0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.2.1368: Vim9: no error for missing white space around operator

Problem:    Vim9: no error for missing white space around operator.
Solution:   Check for white space around <, !=, etc.
This commit is contained in:
Bram Moolenaar 2020-08-05 11:51:30 +02:00
parent b4caa163ff
commit ff1cd39cfe
3 changed files with 53 additions and 5 deletions

View File

@ -2422,7 +2422,7 @@ eval3(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
* var1 isnot var2
*
* "arg" must point to the first non-white of the expression.
* "arg" is advanced to the next non-white after the recognized expression.
* "arg" is advanced to just after the recognized expression.
*
* Return OK or FAIL.
*/
@ -2452,9 +2452,17 @@ eval4(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
typval_T var2;
int ic;
int vim9script = in_vim9script();
int evaluate = evalarg == NULL
? 0 : (evalarg->eval_flags & EVAL_EVALUATE);
if (getnext)
*arg = eval_next_line(evalarg);
else if (evaluate && vim9script && !VIM_ISWHITE(**arg))
{
error_white_both(p, len);
clear_tv(rettv);
return FAIL;
}
if (vim9script && type_is && (p[len] == '?' || p[len] == '#'))
{
@ -2482,13 +2490,19 @@ eval4(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
/*
* Get the second variable.
*/
if (evaluate && vim9script && !IS_WHITE_OR_NUL(p[len]))
{
error_white_both(p, 1);
clear_tv(rettv);
return FAIL;
}
*arg = skipwhite_and_linebreak(p + len, evalarg);
if (eval5(arg, &var2, evalarg) == FAIL)
{
clear_tv(rettv);
return FAIL;
}
if (evalarg != NULL && (evalarg->eval_flags & EVAL_EVALUATE))
if (evaluate)
{
int ret;
@ -2552,7 +2566,7 @@ eval_addlist(typval_T *tv1, typval_T *tv2)
* .. string concatenation
*
* "arg" must point to the first non-white of the expression.
* "arg" is advanced to the next non-white after the recognized expression.
* "arg" is advanced to just after the recognized expression.
*
* Return OK or FAIL.
*/
@ -2754,7 +2768,7 @@ eval5(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
* % number modulo
*
* "arg" must point to the first non-white of the expression.
* "arg" is advanced to the next non-white after the recognized expression.
* "arg" is advanced to just after the recognized expression.
*
* Return OK or FAIL.
*/
@ -2956,7 +2970,7 @@ eval6(
* trailing ->name() method call
*
* "arg" must point to the first non-white of the expression.
* "arg" is advanced to the next non-white after the recognized expression.
* "arg" is advanced to just after the recognized expression.
*
* Return OK or FAIL.
*/

View File

@ -726,6 +726,38 @@ def Test_expr4_vimscript()
set noignorecase
END
CheckScriptSuccess(lines)
# check missing white space
lines =<< trim END
vim9script
echo 2>3
END
CheckScriptFailure(lines, 'E1004:')
lines =<< trim END
vim9script
echo 2 >3
END
CheckScriptFailure(lines, 'E1004:')
lines =<< trim END
vim9script
echo 2> 3
END
CheckScriptFailure(lines, 'E1004:')
lines =<< trim END
vim9script
echo 2!=3
END
CheckScriptFailure(lines, 'E1004:')
lines =<< trim END
vim9script
echo 2 !=3
END
CheckScriptFailure(lines, 'E1004:')
lines =<< trim END
vim9script
echo 2!= 3
END
CheckScriptFailure(lines, 'E1004:')
enddef
func Test_expr4_fails()

View File

@ -754,6 +754,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1368,
/**/
1367,
/**/