]> granicus.if.org Git - vim/commitdiff
patch 8.2.5053: cannot have a comment halfway an expression in a block v8.2.5053
authorBram Moolenaar <Bram@vim.org>
Fri, 3 Jun 2022 16:39:46 +0000 (17:39 +0100)
committerBram Moolenaar <Bram@vim.org>
Fri, 3 Jun 2022 16:39:46 +0000 (17:39 +0100)
Problem:    Cannot have a comment halfway an expression in an autocmd command
            block.
Solution:   When skipping over the NL also skip over comments. (closes #10519)

src/eval.c
src/testdir/test_autocmd.vim
src/version.c

index 5f9c3423d10cdc3103a809b454f684916116f525..dce78f7f04190513630a8cdb53fbac0ba40d6523 100644 (file)
@@ -2135,6 +2135,35 @@ eval_func(
     return ret;
 }
 
+/*
+ * After a NL, skip over empty lines and comment-only lines.
+ */
+    static char_u *
+newline_skip_comments(char_u *arg)
+{
+    char_u *p = arg + 1;
+
+    for (;;)
+    {
+       p = skipwhite(p);
+
+       if (*p == NUL)
+           break;
+       if (vim9_comment_start(p))
+       {
+           char_u *nl = vim_strchr(p, NL);
+
+           if (nl == NULL)
+                   break;
+           p = nl;
+       }
+       if (*p != NL)
+           break;
+       ++p;  // skip another NL
+    }
+    return p;
+}
+
 /*
  * Get the next line source line without advancing.  But do skip over comment
  * lines.
@@ -2184,7 +2213,7 @@ eval_next_non_blank(char_u *arg, evalarg_T *evalarg, int *getnext)
        char_u *next;
 
        if (*p == NL)
-           next = p + 1;
+           next = newline_skip_comments(p);
        else if (evalarg->eval_cookie != NULL)
            next = getline_peek_skip_comments(evalarg);
        else
@@ -2212,7 +2241,7 @@ eval_next_line(char_u *arg, evalarg_T *evalarg)
     if (arg != NULL)
     {
        if (*arg == NL)
-           return skipwhite(arg + 1);
+           return newline_skip_comments(arg);
        // Truncate before a trailing comment, so that concatenating the lines
        // won't turn the rest into a comment.
        if (*skipwhite(arg) == '#')
index 1a4ed1a624cbff7bf02e2143589de632e110c507..24e2ed9842b5776b4b52e92544d355eee82c3dd8 100644 (file)
@@ -3100,6 +3100,22 @@ func Test_autocmd_with_block()
   call assert_equal(77, g:gotSafeState)
   unlet g:gotSafeState
 
+  augroup block_testing
+    au!
+    autocmd CursorHold * {
+      if true
+        # comment
+        && true
+
+        && true
+        g:done = 'yes'
+      endif
+      }
+  augroup END
+  doautocmd CursorHold
+  call assert_equal('yes', g:done)
+
+  unlet g:done
   augroup block_testing
     au!
   augroup END
index 36a69d922c7a029e301380f1a1c987e0ac42b566..0f33fb2f23483a0010f64b8439f9ec86e6d52a4f 100644 (file)
@@ -734,6 +734,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    5053,
 /**/
     5052,
 /**/