changeset 28972:864fa5276e78 v8.2.5008

patch 8.2.5008: when 'formatoptions' contains "/" wrongly wrapping comment Commit: https://github.com/vim/vim/commit/7e667788150be617aeac42b0d668618ac33ab9da Author: Bram Moolenaar <Bram@vim.org> Date: Mon May 23 13:10:48 2022 +0100 patch 8.2.5008: when 'formatoptions' contains "/" wrongly wrapping comment Problem: When 'formatoptions' contains "/" wrongly wrapping a long trailing comment. Solution: Pass the OPENLINE_FORMAT flag.
author Bram Moolenaar <Bram@vim.org>
date Mon, 23 May 2022 14:15:03 +0200
parents 1aa8858686ea
children 8ed9b1009bfb
files src/change.c src/testdir/test_textformat.vim src/textformat.c src/version.c src/vim.h
diffstat 5 files changed, 29 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/change.c
+++ b/src/change.c
@@ -1643,7 +1643,8 @@ open_line(
 	lead_len = get_leader_len(saved_line, &lead_flags,
 							dir == BACKWARD, TRUE);
 	if (lead_len == 0 && curbuf->b_p_cin && do_cindent && dir == FORWARD
-					&& !has_format_option(FO_NO_OPEN_COMS))
+		&& (!has_format_option(FO_NO_OPEN_COMS)
+						 || (flags & OPENLINE_FORMAT)))
 	{
 	    // Check for a line comment after code.
 	    comment_start = check_linecomment(saved_line);
--- a/src/testdir/test_textformat.vim
+++ b/src/testdir/test_textformat.vim
@@ -289,11 +289,28 @@ func Test_format_c_comment()
       x
   END
   call assert_equal(expected, getline(1, '$'))
+
+  " Comment is formatted when it wraps
+  normal 2GA with some more text added
+  let expected =<< trim END
+      nop;
+      val = val;      // This is a comment
+                      // with some more text
+                      // added
+      x
+  END
+  call assert_equal(expected, getline(1, '$'))
+
   set fo-=/
 
   " using 'indentexpr' instead of 'cindent' does not repeat a comment
   setl nocindent indentexpr=2
-  3delete
+  %del
+  let text =<< trim END
+      nop;
+      val = val;      // This is a comment
+  END
+  call setline(1, text)
   normal 2Gox
   let expected =<< trim END
       nop;
--- a/src/textformat.c
+++ b/src/textformat.c
@@ -371,6 +371,7 @@ internal_format(
 	open_line(FORWARD, OPENLINE_DELSPACES + OPENLINE_MARKFIX
 		+ (fo_white_par ? OPENLINE_KEEPTRAIL : 0)
 		+ (do_comments ? OPENLINE_DO_COM : 0)
+		+ OPENLINE_FORMAT
 		+ ((flags & INSCHAR_COM_LIST) ? OPENLINE_COM_LIST : 0)
 		, ((flags & INSCHAR_COM_LIST) ? second_indent : old_indent),
 		&did_do_comment);
--- a/src/version.c
+++ b/src/version.c
@@ -735,6 +735,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    5008,
+/**/
     5007,
 /**/
     5006,
--- a/src/vim.h
+++ b/src/vim.h
@@ -1118,11 +1118,12 @@ extern int (*dyn_libintl_wputenv)(const 
 #define INSCHAR_COM_LIST 16	// format comments with list/2nd line indent
 
 // flags for open_line()
-#define OPENLINE_DELSPACES  1	// delete spaces after cursor
-#define OPENLINE_DO_COM	    2	// format comments
-#define OPENLINE_KEEPTRAIL  4	// keep trailing spaces
-#define OPENLINE_MARKFIX    8	// fix mark positions
-#define OPENLINE_COM_LIST  16	// format comments with list/2nd line indent
+#define OPENLINE_DELSPACES  0x01    // delete spaces after cursor
+#define OPENLINE_DO_COM	    0x02    // format comments
+#define OPENLINE_KEEPTRAIL  0x04    // keep trailing spaces
+#define OPENLINE_MARKFIX    0x08    // fix mark positions
+#define OPENLINE_COM_LIST   0x10    // format comments with list/2nd line indent
+#define OPENLINE_FORMAT	    0x20    // formatting long comment
 
 // There are five history tables:
 #define HIST_CMD	0	// colon commands