1
0
forked from aniani/vim

patch 8.2.2673: Vim9: script-local funcref can have lower case name

Problem:    Vim9: script-local funcref can have lower case name.
Solution:   Require an upper case name.
This commit is contained in:
Bram Moolenaar
2021-03-28 21:14:06 +02:00
parent b2cb6c8bbd
commit 3215466af9
3 changed files with 32 additions and 2 deletions

View File

@@ -3453,8 +3453,10 @@ var_wrong_func_name(
char_u *name, // points to start of variable name
int new_var) // TRUE when creating the variable
{
// Allow for w: b: s: and t:.
if (!(vim_strchr((char_u *)"wbst", name[0]) != NULL && name[1] == ':')
// Allow for w: b: s: and t:. In Vim9 script s: is not allowed, because
// the name can be used without the s: prefix.
if (!((vim_strchr((char_u *)"wbt", name[0]) != NULL
|| (!in_vim9script() && name[0] == 's')) && name[1] == ':')
&& !ASCII_ISUPPER((name[0] != NUL && name[1] == ':')
? name[2] : name[0]))
{

View File

@@ -1654,5 +1654,31 @@ def Test_assign_command_modifier()
CheckDefAndScriptSuccess(lines)
enddef
def Test_script_funcref_case()
var lines =<< trim END
var Len = (s: string): number => len(s) + 1
assert_equal(5, Len('asdf'))
END
CheckDefAndScriptSuccess(lines)
lines =<< trim END
var len = (s: string): number => len(s) + 1
END
CheckDefAndScriptFailure(lines, 'E704:')
lines =<< trim END
vim9script
var s:Len = (s: string): number => len(s) + 2
assert_equal(6, Len('asdf'))
END
CheckScriptSuccess(lines)
lines =<< trim END
vim9script
var s:len = (s: string): number => len(s) + 1
END
CheckScriptFailure(lines, 'E704:')
enddef
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker

View File

@@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
2673,
/**/
2672,
/**/