summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-12-29 14:09:32 +0000
committerBram Moolenaar <Bram@vim.org>2021-12-29 14:09:32 +0000
commit264d3ddac0f9474816c20a0e92014d6f7f4b08ac (patch)
tree290e2660fb888fd28851b29d8bb55aac5cee51ec /src
parentfebb78fa1798e0f95983b3f7881419a754886df5 (diff)
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.
Diffstat (limited to 'src')
-rw-r--r--src/testdir/test_textformat.vim15
-rw-r--r--src/textformat.c13
-rw-r--r--src/version.c2
3 files changed, 28 insertions, 2 deletions
diff --git a/src/testdir/test_textformat.vim b/src/testdir/test_textformat.vim
index 62cefa1a0f..07a9224c6b 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 920db40826..3c343cd2c7 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 09bce7b944..bbfa0ffa99 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,