diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-01-31 15:44:54 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2022-01-31 15:44:54 +0800 |
commit | 88ba0774e202126a432521d5cb14bd2187ef65a2 (patch) | |
tree | eca5f0142ffb0b0318a9d9087dbaad6195884c02 | |
parent | eda957db10e97b28a2734e0391d986676927d963 (diff) | |
download | rneovim-88ba0774e202126a432521d5cb14bd2187ef65a2.tar.gz rneovim-88ba0774e202126a432521d5cb14bd2187ef65a2.tar.bz2 rneovim-88ba0774e202126a432521d5cb14bd2187ef65a2.zip |
vim-patch:8.2.3932: C line comment not formatted properly
Problem: C line comment not formatted properly.
Solution: If a line comment follows after "#if" the next line is not the end
of a paragraph.
https://github.com/vim/vim/commit/264d3ddac0f9474816c20a0e92014d6f7f4b08ac
-rw-r--r-- | src/nvim/edit.c | 3 | ||||
-rw-r--r-- | src/nvim/ops.c | 11 | ||||
-rw-r--r-- | src/nvim/testdir/test_textformat.vim | 15 |
3 files changed, 25 insertions, 4 deletions
diff --git a/src/nvim/edit.c b/src/nvim/edit.c index 47e1cc3351..3d2cfa5c2a 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -6137,8 +6137,7 @@ static void internal_format(int textwidth, int second_indent, int flags, int for if (curwin->w_cursor.col <= (colnr_T)wantcol) { break; } - } else if ((cc >= 0x100 || !utf_allow_break_before(cc)) - && fo_multibyte) { + } else if ((cc >= 0x100 || !utf_allow_break_before(cc)) && fo_multibyte) { int ncc; bool allow_break; diff --git a/src/nvim/ops.c b/src/nvim/ops.c index 83a7c31991..11484eee57 100644 --- a/src/nvim/ops.c +++ b/src/nvim/ops.c @@ -4350,7 +4350,7 @@ void format_lines(linenr_T line_count, int avoid_fex) int leader_len = 0; // leader len of current line int next_leader_len; // leader len of next line char_u *leader_flags = NULL; // flags for leader of current line - char_u *next_leader_flags; // flags for leader of next line + char_u *next_leader_flags = NULL; // flags for leader of next line bool advance = true; int second_indent = -1; // indent for second line (comment aware) bool first_par_line = true; @@ -4467,7 +4467,14 @@ void format_lines(linenr_T line_count, int avoid_fex) leader_len, leader_flags, next_leader_len, next_leader_flags)) { - is_end_par = true; + // Special case: If the next line starts with a line comment + // and this line has a line comment after some text, the + // paragraph doesn't really end. + if (next_leader_flags == NULL + || STRNCMP(next_leader_flags, "://", 3) != 0 + || check_linecomment(get_cursor_line_ptr()) == MAXCOL) { + is_end_par = true; + } } /* diff --git a/src/nvim/testdir/test_textformat.vim b/src/nvim/testdir/test_textformat.vim index 5ca2554218..25ae208f03 100644 --- a/src/nvim/testdir/test_textformat.vim +++ b/src/nvim/testdir/test_textformat.vim @@ -223,6 +223,21 @@ func Test_format_c_comment() END call assert_equal(expected, getline(1, '$')) + %del + let text =<< trim END + #if 0 // This is another long end of + // line comment that + // wraps. + END + call setline(1, text) + normal gq2j + let expected =<< trim END + #if 0 // This is another long + // end of line comment + // that wraps. + END + call assert_equal(expected, getline(1, '$')) + bwipe! endfunc |