changeset 26807:c1e083481f5d v8.2.3932

patch 8.2.3932: C line comment not formatted properly Commit: https://github.com/vim/vim/commit/264d3ddac0f9474816c20a0e92014d6f7f4b08ac Author: Bram Moolenaar <Bram@vim.org> Date: Wed Dec 29 14:09:32 2021 +0000 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.
author Bram Moolenaar <Bram@vim.org>
date Wed, 29 Dec 2021 15:15:03 +0100
parents eb2ef75a9abd
children e83c9271beba
files src/testdir/test_textformat.vim src/textformat.c src/version.c
diffstat 3 files changed, 28 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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
 
--- 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.
--- 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,