1
0
forked from aniani/vim

patch 8.2.2257: Vim9: using -> for lambda is ambiguous

Problem:    Vim9: using -> for lambda is ambiguous.
Solution:   Stop supporting ->, must use =>.
This commit is contained in:
Bram Moolenaar
2020-12-31 21:28:47 +01:00
parent adc8e44645
commit 2949cfdbe4
10 changed files with 137 additions and 173 deletions

View File

@@ -54,7 +54,7 @@ def CallRecursive(n: number): number
enddef
def CallMapRecursive(l: list<number>): number
return map(l, {_, v -> CallMapRecursive([v])})[0]
return map(l, (_, v) => CallMapRecursive([v]))[0]
enddef
def Test_funcdepth_error()
@@ -310,7 +310,7 @@ def Test_nested_global_function()
vim9script
def Outer()
def g:Inner()
echo map([1, 2, 3], {_, v -> v + 1})
echo map([1, 2, 3], (_, v) => v + 1)
enddef
g:Inner()
enddef
@@ -509,11 +509,11 @@ def Test_call_funcref_wrong_args()
enddef
def Test_call_lambda_args()
CheckDefFailure(['echo {i -> 0}()'],
'E119: Not enough arguments for function: {i -> 0}()')
CheckDefFailure(['echo ((i) => 0)()'],
'E119: Not enough arguments for function: ((i) => 0)()')
var lines =<< trim END
var Ref = {x: number, y: number -> x + y}
var Ref = (x: number, y: number) => x + y
echo Ref(1, 'x')
END
CheckDefFailure(lines, 'E1013: Argument 2: type mismatch, expected number but got string')
@@ -522,7 +522,7 @@ enddef
def Test_lambda_uses_assigned_var()
CheckDefSuccess([
'var x: any = "aaa"'
'x = filter(["bbb"], {_, v -> v =~ x})'])
'x = filter(["bbb"], (_, v) => v =~ x)'])
enddef
" Default arg and varargs
@@ -1413,12 +1413,12 @@ enddef
def Test_closure_simple()
var local = 'some '
RefFunc({s -> local .. s})->assert_equal('some more')
RefFunc((s) => local .. s)->assert_equal('some more')
enddef
def MakeRef()
var local = 'some '
g:Ref = {s -> local .. s}
g:Ref = (s) => local .. s
enddef
def Test_closure_ref_after_return()
@@ -1429,8 +1429,8 @@ enddef
def MakeTwoRefs()
var local = ['some']
g:Extend = {s -> local->add(s)}
g:Read = {-> local}
g:Extend = (s) => local->add(s)
g:Read = () => local
enddef
def Test_closure_two_refs()
@@ -1467,12 +1467,12 @@ enddef
def MakeArgRefs(theArg: string)
var local = 'loc_val'
g:UseArg = {s -> theArg .. '/' .. local .. '/' .. s}
g:UseArg = (s) => theArg .. '/' .. local .. '/' .. s
enddef
def MakeArgRefsVarargs(theArg: string, ...rest: list<string>)
var local = 'the_loc'
g:UseVararg = {s -> theArg .. '/' .. local .. '/' .. s .. '/' .. join(rest)}
g:UseVararg = (s) => theArg .. '/' .. local .. '/' .. s .. '/' .. join(rest)
enddef
def Test_closure_using_argument()
@@ -1526,7 +1526,7 @@ endfunc
def Test_call_closure_not_compiled()
var text = 'text'
g:Ref = {s -> s .. text}
g:Ref = (s) => s .. text
GetResult(g:Ref)->assert_equal('sometext')
enddef
@@ -1536,7 +1536,7 @@ def Test_double_closure_fails()
def Func()
var name = 0
for i in range(2)
timer_start(0, {-> name})
timer_start(0, () => name)
endfor
enddef
Func()
@@ -1549,8 +1549,8 @@ def Test_nested_closure_used()
vim9script
def Func()
var x = 'hello'
var Closure = {-> x}
g:Myclosure = {-> Closure()}
var Closure = () => x
g:Myclosure = () => Closure()
enddef
Func()
assert_equal('hello', g:Myclosure())
@@ -1565,7 +1565,7 @@ def Test_nested_closure_fails()
FuncB(0)
enddef
def FuncB(n: number): list<string>
return map([0], {_, v -> n})
return map([0], (_, v) => n)
enddef
FuncA()
END
@@ -1642,8 +1642,8 @@ def Test_nested_lambda()
vim9script
def Func()
var x = 4
var Lambda1 = {-> 7}
var Lambda2 = {-> [Lambda1(), x]}
var Lambda1 = () => 7
var Lambda2 = () => [Lambda1(), x]
var res = Lambda2()
assert_equal([7, 4], res)
enddef
@@ -1653,8 +1653,8 @@ def Test_nested_lambda()
enddef
def Shadowed(): list<number>
var FuncList: list<func: number> = [{ -> 42}]
return FuncList->map({_, Shadowed -> Shadowed()})
var FuncList: list<func: number> = [() => 42]
return FuncList->map((_, Shadowed) => Shadowed())
enddef
def Test_lambda_arg_shadows_func()
@@ -1676,15 +1676,15 @@ def Test_script_var_in_lambda()
var lines =<< trim END
vim9script
var script = 'test'
assert_equal(['test'], map(['one'], {-> script}))
assert_equal(['test'], map(['one'], () => script))
END
CheckScriptSuccess(lines)
enddef
def Line_continuation_in_lambda(): list<string>
var x = range(97, 100)
->map({_, v -> nr2char(v)
->toupper()})
->map((_, v) => nr2char(v)
->toupper())
->reverse()
return x
enddef
@@ -1772,11 +1772,11 @@ def Test_recursive_call()
enddef
def TreeWalk(dir: string): list<any>
return readdir(dir)->map({_, val ->
return readdir(dir)->map((_, val) =>
fnamemodify(dir .. '/' .. val, ':p')->isdirectory()
? {[val]: TreeWalk(dir .. '/' .. val)}
: val
})
)
enddef
def Test_closure_in_map()
@@ -1890,7 +1890,7 @@ def Test_block_scoped_var()
var x = ['a', 'b', 'c']
if 1
var y = 'x'
map(x, {-> y})
map(x, () => y)
endif
var z = x
assert_equal(['x', 'x', 'x'], z)
@@ -1922,7 +1922,7 @@ def Test_did_emsg_reset()
vim9script
au BufWinLeave * #
def Func()
popup_menu('', {callback: {-> popup_create('', {})->popup_close()}})
popup_menu('', {callback: () => popup_create('', {})->popup_close()})
eval [][0]
enddef
nno <F3> <cmd>call <sid>Func()<cr>
@@ -2014,7 +2014,7 @@ def Test_dict_member_with_silent()
var d: dict<any>
def Func()
try
g:result = map([], {_, v -> {}[v]})->join() .. d['']
g:result = map([], (_, v) => ({}[v]))->join() .. d['']
catch
endtry
enddef