diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-12-29 14:09:32 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-12-29 14:09:32 +0000 |
commit | 264d3ddac0f9474816c20a0e92014d6f7f4b08ac (patch) | |
tree | 290e2660fb888fd28851b29d8bb55aac5cee51ec | |
parent | febb78fa1798e0f95983b3f7881419a754886df5 (diff) | |
download | vim-git-264d3ddac0f9474816c20a0e92014d6f7f4b08ac.tar.gz |
patch 8.2.3932: C line comment not formatted properlyv8.2.3932
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.
-rw-r--r-- | src/testdir/test_textformat.vim | 15 | ||||
-rw-r--r-- | src/textformat.c | 13 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 28 insertions, 2 deletions
diff --git a/src/testdir/test_textformat.vim b/src/testdir/test_textformat.vim index 62cefa1a0..07a9224c6 100644 --- a/src/testdir/test_textformat.vim +++ b/src/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 diff --git a/src/textformat.c b/src/textformat.c index 920db4082..3c343cd2c 100644 --- a/src/textformat.c +++ b/src/textformat.c @@ -193,7 +193,8 @@ internal_format( 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; int allow_break; @@ -948,7 +949,7 @@ format_lines( 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 int do_comments; // format comments int do_comments_list = 0; // format comments with 'n' or '2' int advance = TRUE; @@ -1071,7 +1072,15 @@ format_lines( || !same_leader(curwin->w_cursor.lnum, leader_len, leader_flags, next_leader_len, next_leader_flags)) + { + // 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(ml_get_curline()) == MAXCOL) is_end_par = TRUE; + } // If we have got to the end of a paragraph, or the line is // getting long, format it. diff --git a/src/version.c b/src/version.c index 09bce7b94..bbfa0ffa9 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3932, +/**/ 3931, /**/ 3930, |