Mercurial > vim
changeset 23310:7951c5098e8e v8.2.2200
patch 8.2.2200: Vim9: lambda without white space around -> is confusing
Commit: https://github.com/vim/vim/commit/27bf7af9d042b396c412fcad7bac59849a4a420f
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Dec 23 20:27:31 2020 +0100
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 https://github.com/vim/vim/issues/7503)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 23 Dec 2020 20:30:04 +0100 |
parents | e0a6d49ed3ad |
children | a1be8dd27aae |
files | src/testdir/test_vim9_disassemble.vim src/testdir/test_vim9_expr.vim src/version.c src/vim9compile.c |
diffstat | 4 files changed, 20 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_vim9_disassemble.vim +++ b/src/testdir/test_vim9_disassemble.vim @@ -1541,10 +1541,10 @@ def Test_disassemble_compare() ['{a: 1} is aDict', 'COMPAREDICT is'], ['{a: 1} isnot aDict', 'COMPAREDICT isnot'], - ['{->33} == {->44}', 'COMPAREFUNC =='], - ['{->33} != {->44}', 'COMPAREFUNC !='], - ['{->33} is {->44}', 'COMPAREFUNC is'], - ['{->33} isnot {->44}', 'COMPAREFUNC isnot'], + ['{-> 33} == {-> 44}', 'COMPAREFUNC =='], + ['{-> 33} != {-> 44}', 'COMPAREFUNC !='], + ['{-> 33} is {-> 44}', 'COMPAREFUNC is'], + ['{-> 33} isnot {-> 44}', 'COMPAREFUNC isnot'], ['77 == g:xx', 'COMPAREANY =='], ['77 != g:xx', 'COMPAREANY !='],
--- a/src/testdir/test_vim9_expr.vim +++ b/src/testdir/test_vim9_expr.vim @@ -1863,6 +1863,10 @@ def Test_expr7_lambda() END 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) # error is in first line of the lambda 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 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) endfunc
--- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2200, +/**/ 2199, /**/ 2198,
--- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -3915,14 +3915,19 @@ compile_expr7( * Dictionary: {'key': val, 'key': val} */ case '{': { - char_u *start = skipwhite(*arg + 1); - garray_T ga_arg; + char_u *start = skipwhite(*arg + 1); + char_u *after = start; + garray_T ga_arg; // Find out what comes after the arguments. - ret = get_function_args(&start, '-', NULL, + ret = get_function_args(&after, '-', NULL, &ga_arg, 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); else ret = compile_dict(arg, cctx, ppconst);