From: Bram Moolenaar Date: Mon, 5 Jul 2021 19:41:48 +0000 (+0200) Subject: patch 8.2.3111: Vim9: confusing error with extra whitespace before colon X-Git-Tag: v8.2.3111 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=404557e6a60389d09bbf91dd0cf3bae11bd623b9;p=vim patch 8.2.3111: Vim9: confusing error with extra whitespace before colon Problem: Vim9: confusing error with extra whitespace before colon. Solution: Check for colon after white space. (closes #8513) --- diff --git a/src/eval.c b/src/eval.c index f57001647..1a84d2c1f 100644 --- a/src/eval.c +++ b/src/eval.c @@ -1660,6 +1660,7 @@ eval_for_line( evalarg_T *evalarg) { forinfo_T *fi; + char_u *var_list_end; char_u *expr; typval_T tv; list_T *l; @@ -1671,15 +1672,19 @@ eval_for_line( if (fi == NULL) return NULL; - expr = skip_var_list(arg, TRUE, &fi->fi_varcount, &fi->fi_semicolon, FALSE); - if (expr == NULL) + var_list_end = skip_var_list(arg, TRUE, &fi->fi_varcount, + &fi->fi_semicolon, FALSE); + if (var_list_end == NULL) return fi; - expr = skipwhite_and_linebreak(expr, evalarg); + expr = skipwhite_and_linebreak(var_list_end, evalarg); if (expr[0] != 'i' || expr[1] != 'n' || !(expr[2] == NUL || VIM_ISWHITE(expr[2]))) { - emsg(_(e_missing_in)); + if (in_vim9script() && *expr == ':' && expr != var_list_end) + semsg(_(e_no_white_space_allowed_before_colon_str), expr); + else + emsg(_(e_missing_in)); return fi; } diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim index 9cf098917..9d54899a6 100644 --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -2566,6 +2566,13 @@ def Test_for_loop_fails() endfor END CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected number but got string', 1) + + lines =<< trim END + for n : number in [1, 2] + echo n + endfor + END + CheckDefAndScriptFailure(lines, 'E1059:', 1) enddef def Test_for_loop_script_var() diff --git a/src/version.c b/src/version.c index b448822d5..0653c2797 100644 --- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 3111, /**/ 3110, /**/ diff --git a/src/vim9compile.c b/src/vim9compile.c index 9569f2f4d..d63073676 100644 --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -7775,7 +7775,10 @@ compile_for(char_u *arg_start, cctx_T *cctx) return NULL; if (STRNCMP(p, "in", 2) != 0 || !IS_WHITE_OR_NUL(p[2])) { - emsg(_(e_missing_in)); + if (*p == ':' && wp != p) + semsg(_(e_no_white_space_allowed_before_colon_str), p); + else + emsg(_(e_missing_in)); return NULL; } wp = p + 2;