vim-patch:8.2.3135: Vim9: builtin function arguments not checked at compile time

Problem:    Vim9: builtin function arguments not checked at compile time.
Solution:   Add more type checks. (Yegappan Lakshmanan, closes vim/vim#8539)

5b73992d8f

Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
This commit is contained in:
zeertzjq
2023-05-05 07:02:43 +08:00
parent d79e726212
commit 75119fcc86
10 changed files with 66 additions and 66 deletions

View File

@@ -95,15 +95,15 @@ describe('execute()', function()
ret = exc_exec('call execute(0.0)')
eq('Vim(call):E806: using Float as a String', ret)
ret = exc_exec('call execute(v:_null_dict)')
eq('Vim(call):E731: using Dictionary as a String', ret)
eq('Vim(call):E731: Using a Dictionary as a String', ret)
ret = exc_exec('call execute(function("tr"))')
eq('Vim(call):E729: using Funcref as a String', ret)
eq('Vim(call):E729: Using a Funcref as a String', ret)
ret = exc_exec('call execute(["echo 42", 0.0, "echo 44"])')
eq('Vim:E806: using Float as a String', ret)
ret = exc_exec('call execute(["echo 42", v:_null_dict, "echo 44"])')
eq('Vim:E731: using Dictionary as a String', ret)
eq('Vim:E731: Using a Dictionary as a String', ret)
ret = exc_exec('call execute(["echo 42", function("tr"), "echo 44"])')
eq('Vim:E729: using Funcref as a String', ret)
eq('Vim:E729: Using a Funcref as a String', ret)
end)
it('captures output with highlights', function()
@@ -325,7 +325,7 @@ describe('execute()', function()
eq('Vim(call):E806: using Float as a String', ret)
ret = exc_exec('call execute(v:_null_dict, "silent")')
eq('Vim(call):E731: using Dictionary as a String', ret)
eq('Vim(call):E731: Using a Dictionary as a String', ret)
ret = exc_exec('call execute("echo add(1, 1)", "")')
eq('Vim(echo):E897: List or Blob required', ret)

View File

@@ -222,17 +222,17 @@ describe('input()', function()
eq('DEF2', meths.get_var('var'))
end)
it('errors out on invalid inputs', function()
eq('Vim(call):E730: using List as a String',
eq('Vim(call):E730: Using a List as a String',
exc_exec('call input([])'))
eq('Vim(call):E730: using List as a String',
eq('Vim(call):E730: Using a List as a String',
exc_exec('call input("", [])'))
eq('Vim(call):E730: using List as a String',
eq('Vim(call):E730: Using a List as a String',
exc_exec('call input("", "", [])'))
eq('Vim(call):E730: using List as a String',
eq('Vim(call):E730: Using a List as a String',
exc_exec('call input({"prompt": []})'))
eq('Vim(call):E730: using List as a String',
eq('Vim(call):E730: Using a List as a String',
exc_exec('call input({"default": []})'))
eq('Vim(call):E730: using List as a String',
eq('Vim(call):E730: Using a List as a String',
exc_exec('call input({"completion": []})'))
eq('Vim(call):E5050: {opts} must be the only argument',
exc_exec('call input({}, "default")'))
@@ -418,17 +418,17 @@ describe('inputdialog()', function()
eq('DEF2', meths.get_var('var'))
end)
it('errors out on invalid inputs', function()
eq('Vim(call):E730: using List as a String',
eq('Vim(call):E730: Using a List as a String',
exc_exec('call inputdialog([])'))
eq('Vim(call):E730: using List as a String',
eq('Vim(call):E730: Using a List as a String',
exc_exec('call inputdialog("", [])'))
eq('Vim(call):E730: using List as a String',
eq('Vim(call):E730: Using a List as a String',
exc_exec('call inputdialog("", "", [])'))
eq('Vim(call):E730: using List as a String',
eq('Vim(call):E730: Using a List as a String',
exc_exec('call inputdialog({"prompt": []})'))
eq('Vim(call):E730: using List as a String',
eq('Vim(call):E730: Using a List as a String',
exc_exec('call inputdialog({"default": []})'))
eq('Vim(call):E730: using List as a String',
eq('Vim(call):E730: Using a List as a String',
exc_exec('call inputdialog({"completion": []})'))
eq('Vim(call):E5050: {opts} must be the only argument',
exc_exec('call inputdialog({}, "default")'))
@@ -512,13 +512,13 @@ describe('confirm()', function()
eq(1, meths.get_var('a'))
end
eq('Vim(call):E730: using List as a String',
eq('Vim(call):E730: Using a List as a String',
pcall_err(command, 'call confirm([])'))
eq('Vim(call):E730: using List as a String',
eq('Vim(call):E730: Using a List as a String',
pcall_err(command, 'call confirm("Are you sure?", [])'))
eq('Vim(call):E745: Using a List as a Number',
pcall_err(command, 'call confirm("Are you sure?", "&Yes\n&No\n", [])'))
eq('Vim(call):E730: using List as a String',
eq('Vim(call):E730: Using a List as a String',
pcall_err(command, 'call confirm("Are you sure?", "&Yes\n&No\n", 0, [])'))
end)

View File

@@ -147,11 +147,11 @@ describe('writefile()', function()
for _, args in ipairs({'[], %s, "b"', '[], "' .. fname .. '", %s'}) do
eq('Vim(call):E806: using Float as a String',
pcall_err(command, ('call writefile(%s)'):format(args:format('0.0'))))
eq('Vim(call):E730: using List as a String',
eq('Vim(call):E730: Using a List as a String',
pcall_err(command, ('call writefile(%s)'):format(args:format('[]'))))
eq('Vim(call):E731: using Dictionary as a String',
eq('Vim(call):E731: Using a Dictionary as a String',
pcall_err(command, ('call writefile(%s)'):format(args:format('{}'))))
eq('Vim(call):E729: using Funcref as a String',
eq('Vim(call):E729: Using a Funcref as a String',
pcall_err(command, ('call writefile(%s)'):format(args:format('function("tr")'))))
end
eq('Vim(call):E5060: Unknown flag: «»',