diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-10-11 21:34:41 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-10-11 21:34:41 +0200 |
commit | 93be1644db2848659b0610477968c83f53619da1 (patch) | |
tree | 62d90457848b7155edb94ba2fbd8da4c85be166a | |
parent | c07b7f701fb30d26112051e4ec737c7e3db72357 (diff) | |
download | vim-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.c | 25 | ||||
-rw-r--r-- | src/testdir/test_vim9_expr.vim | 81 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |