patch 9.0.1986: Vim9: accepting type-annotations
Problem: Vim9: accepting type-annotations
Solution: Reject type annotations outside of declarations.
closes: #13267
closes: #13283
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index ce72823..07afadb 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -2822,6 +2822,45 @@
v9.CheckScriptSuccess(lines)
enddef
+" Test for specifying a type in assignment
+def Test_type_specification_in_assignment()
+ # specify type for an existing script local variable without "var"
+ var lines =<< trim END
+ vim9script
+ var n: number = 10
+ n: number = 20
+ END
+ v9.CheckSourceFailure(lines, 'E488: Trailing characters: : number = 20', 3)
+
+ # specify type for a non-existing script local variable without "var"
+ lines =<< trim END
+ vim9script
+ MyVar: string = 'abc'
+ END
+ v9.CheckSourceFailure(lines, "E492: Not an editor command: MyVar: string = 'abc'", 2)
+
+ # specify type for an existing def local variable without "var"
+ lines =<< trim END
+ vim9script
+ def Foo()
+ var n: number = 10
+ n: number = 20
+ enddef
+ Foo()
+ END
+ v9.CheckSourceFailure(lines, 'E488: Trailing characters: : number = 20', 2)
+
+ # specify type for a non-existing def local variable without "var"
+ lines =<< trim END
+ vim9script
+ def Foo()
+ MyVar: string = 'abc'
+ enddef
+ Foo()
+ END
+ v9.CheckSourceFailure(lines, "E476: Invalid command: MyVar: string = 'abc'", 1)
+enddef
+
let g:someVar = 'X'
" Test for heredoc with Vim expressions.