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
&& (eval_isnamec(*p)
|| *p == '{'
|| ((flags & FNE_INCL_BR) && (*p == '[' || *p == '.'))
|| ((flags & FNE_INCL_BR) && (*p == '['
|| (*p == '.' && eval_isnamec1(p[1]))))
|| mb_nest != 0
|| br_nest != 0); MB_PTR_ADV(p)) {
if (*p == '\'') {

View File

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

View File

@ -276,20 +276,27 @@ func Test_let_errors()
let s = "var"
let var = 1
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:')
let l = [[1,2]]
call assert_fails('let l[:][0] = [5]', 'E708:')
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 m = d[{]', 'E15:')
let l = [1, 2]
call assert_fails('let l[2] = 0', 'E684:')
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[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:.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
if v:lang == "C" || v:lang =~ '^[Ee]n'