patch 8.2.2558: no error if a lambda argument shadows a variable
Problem: No error if a lambda argument shadows a variable.
Solution: Check that the argument name shadows a local, argument or script
variable. (closes #7898)
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index cda1ffd..26a6932 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -2843,7 +2843,7 @@
# lambda method call
l = [2, 5]
- l->((l) => add(l, 8))()
+ l->((ll) => add(ll, 8))()
assert_equal([2, 5, 8], l)
# dict member
@@ -3034,8 +3034,8 @@
enddef
func Test_expr7_trailing_fails()
- call CheckDefFailure(['var l = [2]', 'l->((l) => add(l, 8))'], 'E107:', 2)
- call CheckDefFailure(['var l = [2]', 'l->((l) => add(l, 8)) ()'], 'E274:', 2)
+ call CheckDefFailure(['var l = [2]', 'l->((ll) => add(ll, 8))'], 'E107:', 2)
+ call CheckDefFailure(['var l = [2]', 'l->((ll) => add(ll, 8)) ()'], 'E274:', 2)
endfunc
func Test_expr_fails()
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index 05becd7..bc65bb1 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -596,7 +596,7 @@
echo nr
enddef
END
- CheckScriptFailure(lines, 'E1054:')
+ CheckScriptFailure(lines, 'E1168:')
lines =<< trim END
vim9script
@@ -699,6 +699,31 @@
Ref = (x, y, z) => 0
END
CheckDefAndScriptFailure(lines, 'E1012:')
+
+ lines =<< trim END
+ var one = 1
+ var l = [1, 2, 3]
+ echo map(l, (one) => one)
+ END
+ CheckDefFailure(lines, 'E1167:')
+ CheckScriptFailure(['vim9script'] + lines, 'E1168:')
+
+ lines =<< trim END
+ def ShadowLocal()
+ var one = 1
+ var l = [1, 2, 3]
+ echo map(l, (one) => one)
+ enddef
+ END
+ CheckDefFailure(lines, 'E1167:')
+
+ lines =<< trim END
+ def Shadowarg(one: number)
+ var l = [1, 2, 3]
+ echo map(l, (one) => one)
+ enddef
+ END
+ CheckDefFailure(lines, 'E1167:')
enddef
def Test_lambda_return_type()
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 629d0b8..5d1e401 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -1119,7 +1119,7 @@
import exported from './Xexport.vim'
END
writefile(import_already_defined, 'Ximport.vim')
- assert_fails('source Ximport.vim', 'E1073:', '', 3, 'Ximport.vim')
+ assert_fails('source Ximport.vim', 'E1054:', '', 3, 'Ximport.vim')
# try to import something that is already defined
import_already_defined =<< trim END
@@ -1128,7 +1128,7 @@
import * as exported from './Xexport.vim'
END
writefile(import_already_defined, 'Ximport.vim')
- assert_fails('source Ximport.vim', 'E1073:', '', 3, 'Ximport.vim')
+ assert_fails('source Ximport.vim', 'E1054:', '', 3, 'Ximport.vim')
# try to import something that is already defined
import_already_defined =<< trim END
@@ -1137,7 +1137,7 @@
import {exported} from './Xexport.vim'
END
writefile(import_already_defined, 'Ximport.vim')
- assert_fails('source Ximport.vim', 'E1073:', '', 3, 'Ximport.vim')
+ assert_fails('source Ximport.vim', 'E1054:', '', 3, 'Ximport.vim')
# try changing an imported const
var import_assign_to_const =<< trim END