patch 8.2.0626: Vim9: wrong syntax of function in Vim9 script
Problem: Vim9: wrong syntax of function in Vim9 script.
Solution: Give error for missing space. Implement :echomsg and :echoerr.
(closes #5670)
diff --git a/src/testdir/test_vim9_disassemble.vim b/src/testdir/test_vim9_disassemble.vim
index 7814952..89ca66f 100644
--- a/src/testdir/test_vim9_disassemble.vim
+++ b/src/testdir/test_vim9_disassemble.vim
@@ -919,6 +919,28 @@
res)
enddef
+def s:Echomsg()
+ echomsg 'some' 'message'
+ echoerr 'went' .. 'wrong'
+enddef
+
+def Test_disassemble_echomsg()
+ let res = execute('disass s:Echomsg')
+ assert_match('\<SNR>\d*_Echomsg.*' ..
+ "echomsg 'some' 'message'.*" ..
+ '\d PUSHS "some".*' ..
+ '\d PUSHS "message".*' ..
+ '\d ECHOMSG 2.*' ..
+ "echoerr 'went' .. 'wrong'.*" ..
+ '\d PUSHS "went".*' ..
+ '\d PUSHS "wrong".*' ..
+ '\d CONCAT.*' ..
+ '\d ECHOERR 1.*' ..
+ '\d PUSHNR 0.*' ..
+ '\d RETURN',
+ res)
+enddef
+
def SomeStringArg(arg: string)
echo arg
enddef
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index d364679..f3721ba 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -259,6 +259,7 @@
def Test_arg_type_wrong()
CheckScriptFailure(['def Func3(items: list)', 'echo "a"', 'enddef'], 'E1008: Missing <type>')
CheckScriptFailure(['def Func4(...)', 'echo "a"', 'enddef'], 'E1055: Missing name after ...')
+ CheckScriptFailure(['def Func5(items:string)', 'echo "a"'], 'E1069:')
CheckScriptFailure(['def Func5(items)', 'echo "a"'], 'E1077:')
enddef
@@ -390,6 +391,20 @@
delfunc! Func2
enddef
+def Test_vim9script_func()
+ let lines =<< trim END
+ vim9script
+ func Func(arg)
+ echo a:arg
+ endfunc
+ Func('text')
+ END
+ writefile(lines, 'XVim9Func')
+ so XVim9Func
+
+ delete('XVim9Func')
+enddef
+
" Test for internal functions returning different types
func Test_InternalFuncRetType()
let lines =<< trim END
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 5eda50b..f06bb73 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -54,6 +54,10 @@
let dict4: dict<any> = #{one: 1, two: '2'}
let dict5: dict<blob> = #{one: 0z01, tw: 0z02}
+ call CheckDefFailure(['let x:string'], 'E1069:')
+ call CheckDefFailure(['let x:string = "x"'], 'E1069:')
+ call CheckDefFailure(['let a:string = "x"'], 'E1082:')
+
let a: number = 6
assert_equal(6, a)
@@ -976,6 +980,20 @@
call CheckDefFailure(['echo "xxx"# comment'], 'E488:')
enddef
+def Test_echomsg_cmd()
+ echomsg 'some' 'more' # comment
+ assert_match('^some more$', Screenline(&lines))
+ echo 'clear'
+ 1messages
+ assert_match('^some more$', Screenline(&lines))
+
+ call CheckDefFailure(['echomsg "xxx"# comment'], 'E488:')
+enddef
+
+def Test_echoerr_cmd()
+ # TODO: write this test
+enddef
+
def Test_for_outside_of_function()
let lines =<< trim END
vim9script