]> granicus.if.org Git - vim/commitdiff
patch 8.2.3932: C line comment not formatted properly v8.2.3932
authorBram Moolenaar <Bram@vim.org>
Wed, 29 Dec 2021 14:09:32 +0000 (14:09 +0000)
committerBram Moolenaar <Bram@vim.org>
Wed, 29 Dec 2021 14:09:32 +0000 (14:09 +0000)
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.

src/testdir/test_textformat.vim
src/textformat.c
src/version.c

index 62cefa1a0f2891b9c6bf67e3dbc4a5b88861e69a..07a9224c6b987d22b7b5644f750835140a8f649f 100644 (file)
@@ -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
 
index 920db408267793d5fa7f8982ce27bd76d09d7d64..3c343cd2c7537d357c72512b5e5e4a4b9d4b281a 100644 (file)
@@ -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.
index 09bce7b944ecc0524aea5db911114275807cedc4..bbfa0ffa990e15f230029df56c7e0ea5c4b6820d 100644 (file)
@@ -749,6 +749,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3932,
 /**/
     3931,
 /**/