0
0
mirror of https://github.com/vim/vim.git synced 2025-09-27 04:14:06 -04:00

patch 8.2.2200: Vim9: lambda without white space around -> is confusing

Problem:    Vim9: lambda without white space around -> is confusing.
Solution:   Require white space in a :def funtion. (issue #7503)
This commit is contained in:
Bram Moolenaar
2020-12-23 20:27:31 +01:00
parent b3c8b1d254
commit 27bf7af9d0
4 changed files with 20 additions and 9 deletions

View File

@@ -1541,10 +1541,10 @@ def Test_disassemble_compare()
['{a: 1} is aDict', 'COMPAREDICT is'], ['{a: 1} is aDict', 'COMPAREDICT is'],
['{a: 1} isnot aDict', 'COMPAREDICT isnot'], ['{a: 1} isnot aDict', 'COMPAREDICT isnot'],
['{->33} == {->44}', 'COMPAREFUNC =='], ['{-> 33} == {-> 44}', 'COMPAREFUNC =='],
['{->33} != {->44}', 'COMPAREFUNC !='], ['{-> 33} != {-> 44}', 'COMPAREFUNC !='],
['{->33} is {->44}', 'COMPAREFUNC is'], ['{-> 33} is {-> 44}', 'COMPAREFUNC is'],
['{->33} isnot {->44}', 'COMPAREFUNC isnot'], ['{-> 33} isnot {-> 44}', 'COMPAREFUNC isnot'],
['77 == g:xx', 'COMPAREANY =='], ['77 == g:xx', 'COMPAREANY =='],
['77 != g:xx', 'COMPAREANY !='], ['77 != g:xx', 'COMPAREANY !='],

View File

@@ -1863,6 +1863,10 @@ def Test_expr7_lambda()
END END
CheckDefAndScriptSuccess(lines) CheckDefAndScriptSuccess(lines)
CheckDefFailure(["var Ref = {a->a + 1}"], 'E720:')
CheckDefFailure(["var Ref = {a-> a + 1}"], 'E720:')
CheckDefFailure(["var Ref = {a ->a + 1}"], 'E720:')
CheckDefFailure(["filter([1, 2], {k,v -> 1})"], 'E1069:', 1) CheckDefFailure(["filter([1, 2], {k,v -> 1})"], 'E1069:', 1)
# error is in first line of the lambda # error is in first line of the lambda
CheckDefFailure(["var L = {a -> a + b}"], 'E1001:', 0) CheckDefFailure(["var L = {a -> a + b}"], 'E1001:', 0)
@@ -2538,7 +2542,7 @@ func Test_expr7_fails()
call CheckDefFailure(["'yes'->", "Echo()"], 'E488: Trailing characters: ->', 1) call CheckDefFailure(["'yes'->", "Echo()"], 'E488: Trailing characters: ->', 1)
call CheckDefExecFailure(["[1, 2->len()"], 'E697:', 2) call CheckDefExecFailure(["[1, 2->len()"], 'E697:', 2)
call CheckDefExecFailure(["{a: 1->len()"], 'E451:', 1) call CheckDefExecFailure(["{a: 1->len()"], 'E723:', 2)
call CheckDefExecFailure(["{['a']: 1->len()"], 'E723:', 2) call CheckDefExecFailure(["{['a']: 1->len()"], 'E723:', 2)
endfunc endfunc

View File

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

View File

@@ -3916,13 +3916,18 @@ compile_expr7(
*/ */
case '{': { case '{': {
char_u *start = skipwhite(*arg + 1); char_u *start = skipwhite(*arg + 1);
char_u *after = start;
garray_T ga_arg; garray_T ga_arg;
// Find out what comes after the arguments. // Find out what comes after the arguments.
ret = get_function_args(&start, '-', NULL, ret = get_function_args(&after, '-', NULL,
&ga_arg, TRUE, NULL, NULL, &ga_arg, TRUE, NULL, NULL,
TRUE, NULL, NULL); TRUE, NULL, NULL);
if (ret != FAIL && *start == '>') if (ret != FAIL && after[0] == '>'
&& ((after > start + 2
&& VIM_ISWHITE(after[-2]))
|| after == start + 1)
&& IS_WHITE_OR_NUL(after[1]))
ret = compile_lambda(arg, cctx); ret = compile_lambda(arg, cctx);
else else
ret = compile_dict(arg, cctx, ppconst); ret = compile_dict(arg, cctx, ppconst);