summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-10-11 21:34:41 +0200
committerBram Moolenaar <Bram@vim.org>2020-10-11 21:34:41 +0200
commit93be1644db2848659b0610477968c83f53619da1 (patch)
tree62d90457848b7155edb94ba2fbd8da4c85be166a
parentc07b7f701fb30d26112051e4ec737c7e3db72357 (diff)
downloadvim-git-93be1644db2848659b0610477968c83f53619da1.tar.gz
patch 8.2.1838: Vim9: cannot insert a comment line in an expressionv8.2.1838
Problem: Vim9: cannot insert a comment line in an expression. Solution: Skip comment lines at the script level. (closes #7111)
-rw-r--r--src/eval.c25
-rw-r--r--src/testdir/test_vim9_expr.vim81
-rw-r--r--src/version.c2
3 files changed, 107 insertions, 1 deletions
diff --git a/src/eval.c b/src/eval.c
index 98d16c826..58d98e56c 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1968,6 +1968,29 @@ eval_func(
}
/*
+ * Get the next line source line without advancing. But do skip over comment
+ * lines.
+ */
+ static char_u *
+getline_peek_skip_comments(evalarg_T *evalarg)
+{
+ for (;;)
+ {
+ char_u *next = getline_peek(evalarg->eval_getline,
+ evalarg->eval_cookie);
+ char_u *p;
+
+ if (next == NULL)
+ break;
+ p = skipwhite(next);
+ if (*p != NUL && !vim9_comment_start(p))
+ return next;
+ (void)eval_next_line(evalarg);
+ }
+ return NULL;
+}
+
+/*
* If inside Vim9 script, "arg" points to the end of a line (ignoring a #
* comment) and there is a next line, return the next line (skipping blanks)
* and set "getnext".
@@ -1988,7 +2011,7 @@ eval_next_non_blank(char_u *arg, evalarg_T *evalarg, int *getnext)
char_u *next;
if (evalarg->eval_cookie != NULL)
- next = getline_peek(evalarg->eval_getline, evalarg->eval_cookie);
+ next = getline_peek_skip_comments(evalarg);
else
next = peek_next_line_from_context(evalarg->eval_cctx);
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index 9292a77d6..b279df23d 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -90,6 +90,16 @@ def Test_expr1_trinary_vimscript()
END
CheckScriptSuccess(lines)
+ lines =<< trim END
+ vim9script
+ var name = v:false ? # comment
+ 'yes' :
+ # comment
+ 'no' # comment
+ assert_equal('no', name)
+ END
+ CheckScriptSuccess(lines)
+
# check white space
lines =<< trim END
vim9script
@@ -279,6 +289,17 @@ def Test_expr2_vimscript()
END
CheckScriptSuccess(lines)
+ lines =<< trim END
+ vim9script
+ var name = v:false || # comment
+ # comment
+ v:true ||
+ # comment
+ v:false # comment
+ assert_equal(v:true, name)
+ END
+ CheckScriptSuccess(lines)
+
# check white space
lines =<< trim END
vim9script
@@ -405,6 +426,17 @@ def Test_expr3_vimscript()
END
CheckScriptSuccess(lines)
+ lines =<< trim END
+ vim9script
+ var name = v:true && # comment
+ # comment
+ v:true &&
+ # comment
+ v:true
+ assert_equal(v:true, name)
+ END
+ CheckScriptSuccess(lines)
+
# check white space
lines =<< trim END
vim9script
@@ -800,6 +832,7 @@ def Test_expr4_vim9script()
lines =<< trim END
vim9script
var name = 123
+ # comment
!= 123
assert_equal(false, name)
END
@@ -824,6 +857,16 @@ def Test_expr4_vim9script()
lines =<< trim END
vim9script
+ var list = [1, 2, 3]
+ var name = list # comment
+ # comment
+ is list
+ assert_equal(true, name)
+ END
+ CheckScriptSuccess(lines)
+
+ lines =<< trim END
+ vim9script
var myblob = 0z1234
var name = myblob
isnot 0z11
@@ -1059,6 +1102,16 @@ def Test_expr5_vim9script()
lines =<< trim END
vim9script
+ var name = 11 + # comment
+ 77 -
+ # comment
+ 22
+ assert_equal(66, name)
+ END
+ CheckScriptSuccess(lines)
+
+ lines =<< trim END
+ vim9script
var name = 'one'
.. 'two'
assert_equal('onetwo', name)
@@ -1305,6 +1358,17 @@ def Test_expr6_vim9script()
lines =<< trim END
vim9script
+ var name = 25
+ # comment
+
+ # comment
+ % 10
+ assert_equal(5, name)
+ END
+ CheckScriptSuccess(lines)
+
+ lines =<< trim END
+ vim9script
var name = 11 *
22 /
3
@@ -1618,6 +1682,12 @@ def Test_expr7_list_vim9script()
echo [1,
2] [3,
4]
+
+ echo [1, # comment
+ # comment
+ 2] [3,
+ # comment
+ 4]
END
CheckScriptSuccess(lines)
@@ -1832,6 +1902,17 @@ def Test_expr7_dict_vim9script()
'two': 2,
}
assert_equal({'one': 1, 'two': 2}, d)
+
+ d = { # comment
+ 'one':
+ # comment
+
+ 1,
+ # comment
+ # comment
+ 'two': 2,
+ }
+ assert_equal({'one': 1, 'two': 2}, d)
END
CheckScriptSuccess(lines)
diff --git a/src/version.c b/src/version.c
index 035ab273d..8f85e6b0e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1838,
+/**/
1837,
/**/
1836,