Mercurial > vim
changeset 22580:eb54d34ecd27 v8.2.1838
patch 8.2.1838: Vim9: cannot insert a comment line in an expression
Commit: https://github.com/vim/vim/commit/93be1644db2848659b0610477968c83f53619da1
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Oct 11 21:34:41 2020 +0200
patch 8.2.1838: Vim9: cannot insert a comment line in an expression
Problem: Vim9: cannot insert a comment line in an expression.
Solution: Skip comment lines at the script level. (closes https://github.com/vim/vim/issues/7111)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 11 Oct 2020 21:45:03 +0200 |
parents | 837d354b2c0b |
children | ede5047486b7 |
files | src/eval.c src/testdir/test_vim9_expr.vim src/version.c |
diffstat | 3 files changed, 107 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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 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);
--- 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)