vim-patch:8.2.1274: Vim9: no error for missing white space at script level

Problem:    Vim9: no error for missing white space in assignment at script
            level.
Solution:   Check for white space. (closes vim/vim#6495)

63be3d4ba0

Cherry-pick Test_let_errors() change from patch 8.2.0633.

Co-authored-by: Bram Moolenaar <Bram@vim.org>
This commit is contained in:
zeertzjq 2022-11-06 06:31:00 +08:00
parent 5b8d8a4c99
commit e03f23189d
3 changed files with 15 additions and 5 deletions

View File

@ -6694,7 +6694,8 @@ const char *find_name_end(const char *arg, const char **expr_start, const char *
for (p = arg; *p != NUL for (p = arg; *p != NUL
&& (eval_isnamec(*p) && (eval_isnamec(*p)
|| *p == '{' || *p == '{'
|| ((flags & FNE_INCL_BR) && (*p == '[' || *p == '.')) || ((flags & FNE_INCL_BR) && (*p == '['
|| (*p == '.' && eval_isnamec1(p[1]))))
|| mb_nest != 0 || mb_nest != 0
|| br_nest != 0); MB_PTR_ADV(p)) { || br_nest != 0); MB_PTR_ADV(p)) {
if (*p == '\'') { if (*p == '\'') {

View File

@ -231,11 +231,13 @@ static void ex_let_const(exarg_T *eap, const bool is_const)
expr++; expr++;
} }
} }
expr = skipwhite(expr + 2); expr += 2;
} else { } else {
expr = skipwhite(expr + 1); expr += 1;
} }
expr = skipwhite(expr);
if (eap->skip) { if (eap->skip) {
emsg_skip++; emsg_skip++;
} }

View File

@ -276,20 +276,27 @@ func Test_let_errors()
let s = "var" let s = "var"
let var = 1 let var = 1
call assert_fails('let var += [1,2]', 'E734:') call assert_fails('let var += [1,2]', 'E734:')
call assert_fails('let {s}.1 = 2', 'E18:') call assert_fails('let {s}.1 = 2', 'E15:')
call assert_fails('let a[1] = 5', 'E121:') call assert_fails('let a[1] = 5', 'E121:')
let l = [[1,2]] let l = [[1,2]]
call assert_fails('let l[:][0] = [5]', 'E708:') call assert_fails('let l[:][0] = [5]', 'E708:')
let d = {'k' : 4} let d = {'k' : 4}
call assert_fails('let d.# = 5', 'E713:') call assert_fails('let d.# = 5', 'E488:')
call assert_fails('let d.m += 5', 'E734:') call assert_fails('let d.m += 5', 'E734:')
call assert_fails('let m = d[{]', 'E15:')
let l = [1, 2] let l = [1, 2]
call assert_fails('let l[2] = 0', 'E684:') call assert_fails('let l[2] = 0', 'E684:')
call assert_fails('let l[0:1] = [1, 2, 3]', 'E710:') call assert_fails('let l[0:1] = [1, 2, 3]', 'E710:')
call assert_fails('let l[-2:-3] = [3, 4]', 'E684:') call assert_fails('let l[-2:-3] = [3, 4]', 'E684:')
call assert_fails('let l[0:4] = [5, 6]', 'E711:') call assert_fails('let l[0:4] = [5, 6]', 'E711:')
call assert_fails('let l -= 2', 'E734:')
call assert_fails('let l += 2', 'E734:')
call assert_fails('let g:["a;b"] = 10', 'E461:') call assert_fails('let g:["a;b"] = 10', 'E461:')
call assert_fails('let g:.min = function("max")', 'E704:') call assert_fails('let g:.min = function("max")', 'E704:')
if has('channel')
let ch = test_null_channel()
call assert_fails('let ch += 1', 'E734:')
endif
" This test works only when the language is English " This test works only when the language is English
if v:lang == "C" || v:lang =~ '^[Ee]n' if v:lang == "C" || v:lang =~ '^[Ee]n'