forked from aniani/vim
patch 8.2.4324: Vim9: script-local function name can start with "_"
Problem: Vim9: script-local function name can start with "_". Solution: Check for leading capital after "s:". Correct error message.
This commit is contained in:
@@ -3228,3 +3228,7 @@ EXTERN char e_cannot_use_partial_here[]
|
|||||||
EXTERN char e_critical_error_in_python3_initialization_check_your_installation[]
|
EXTERN char e_critical_error_in_python3_initialization_check_your_installation[]
|
||||||
INIT(= N_("E1266: Critical error in python3 initialization, check your python3 installation"));
|
INIT(= N_("E1266: Critical error in python3 initialization, check your python3 installation"));
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef FEAT_EVAL
|
||||||
|
EXTERN char e_function_name_must_start_with_capital_str[]
|
||||||
|
INIT(= N_("E1267: Function name must start with a capital: %s"));
|
||||||
|
#endif
|
||||||
|
@@ -97,7 +97,7 @@ def Test_wrong_function_name()
|
|||||||
echo 'foo'
|
echo 'foo'
|
||||||
endfunc
|
endfunc
|
||||||
END
|
END
|
||||||
v9.CheckScriptFailure(lines, 'E128:')
|
v9.CheckScriptFailure(lines, 'E1267:')
|
||||||
|
|
||||||
lines =<< trim END
|
lines =<< trim END
|
||||||
vim9script
|
vim9script
|
||||||
@@ -105,7 +105,7 @@ def Test_wrong_function_name()
|
|||||||
echo 'foo'
|
echo 'foo'
|
||||||
enddef
|
enddef
|
||||||
END
|
END
|
||||||
v9.CheckScriptFailure(lines, 'E128:')
|
v9.CheckScriptFailure(lines, 'E1267:')
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
def Test_autoload_name_mismatch()
|
def Test_autoload_name_mismatch()
|
||||||
@@ -685,11 +685,11 @@ def Test_nested_function()
|
|||||||
def _Inner()
|
def _Inner()
|
||||||
echo 'bad'
|
echo 'bad'
|
||||||
enddef
|
enddef
|
||||||
Inner()
|
_Inner()
|
||||||
enddef
|
enddef
|
||||||
defcompile
|
defcompile
|
||||||
END
|
END
|
||||||
v9.CheckScriptFailure(lines, 'E128:')
|
v9.CheckScriptFailure(lines, 'E1267:')
|
||||||
|
|
||||||
lines =<< trim END
|
lines =<< trim END
|
||||||
vim9script
|
vim9script
|
||||||
@@ -697,11 +697,27 @@ def Test_nested_function()
|
|||||||
def g:inner()
|
def g:inner()
|
||||||
echo 'bad'
|
echo 'bad'
|
||||||
enddef
|
enddef
|
||||||
Inner()
|
g:inner()
|
||||||
enddef
|
enddef
|
||||||
defcompile
|
defcompile
|
||||||
END
|
END
|
||||||
v9.CheckScriptFailure(lines, 'E128:')
|
v9.CheckScriptFailure(lines, 'E1267:')
|
||||||
|
|
||||||
|
lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
def g:_Func()
|
||||||
|
echo 'bad'
|
||||||
|
enddef
|
||||||
|
END
|
||||||
|
v9.CheckScriptFailure(lines, 'E1267:')
|
||||||
|
|
||||||
|
lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
def s:_Func()
|
||||||
|
echo 'bad'
|
||||||
|
enddef
|
||||||
|
END
|
||||||
|
v9.CheckScriptFailure(lines, 'E1267:')
|
||||||
|
|
||||||
# nested function inside conditional
|
# nested function inside conditional
|
||||||
lines =<< trim END
|
lines =<< trim END
|
||||||
@@ -2772,7 +2788,7 @@ def Test_nested_inline_lambda()
|
|||||||
lines =<< trim END
|
lines =<< trim END
|
||||||
vim9script
|
vim9script
|
||||||
|
|
||||||
def s:func()
|
def s:Func()
|
||||||
range(10)
|
range(10)
|
||||||
->mapnew((_, _) => ({
|
->mapnew((_, _) => ({
|
||||||
key: range(10)->mapnew((_, _) => {
|
key: range(10)->mapnew((_, _) => {
|
||||||
|
@@ -3884,15 +3884,6 @@ trans_function_name(
|
|||||||
// In Vim9 script a user function is script-local by default, unless it
|
// In Vim9 script a user function is script-local by default, unless it
|
||||||
// starts with a lower case character: dict.func().
|
// starts with a lower case character: dict.func().
|
||||||
vim9script = ASCII_ISUPPER(*start) && in_vim9script();
|
vim9script = ASCII_ISUPPER(*start) && in_vim9script();
|
||||||
if (vim9script)
|
|
||||||
{
|
|
||||||
char_u *p;
|
|
||||||
|
|
||||||
// SomeScript#func() is a global function.
|
|
||||||
for (p = start; *p != NUL && *p != '('; ++p)
|
|
||||||
if (*p == AUTOLOAD_CHAR)
|
|
||||||
vim9script = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copy the function name to allocated memory.
|
* Copy the function name to allocated memory.
|
||||||
@@ -3904,7 +3895,17 @@ trans_function_name(
|
|||||||
else if (lead > 0 || vim9script)
|
else if (lead > 0 || vim9script)
|
||||||
{
|
{
|
||||||
if (!vim9script)
|
if (!vim9script)
|
||||||
|
{
|
||||||
|
if (in_vim9script() && lead == 2 && !ASCII_ISUPPER(*lv.ll_name))
|
||||||
|
{
|
||||||
|
semsg(_(in_vim9script()
|
||||||
|
? e_function_name_must_start_with_capital_str
|
||||||
|
: e_function_name_must_start_with_capital_or_s_str),
|
||||||
|
start);
|
||||||
|
goto theend;
|
||||||
|
}
|
||||||
lead = 3;
|
lead = 3;
|
||||||
|
}
|
||||||
if (vim9script || (lv.ll_exp_name != NULL
|
if (vim9script || (lv.ll_exp_name != NULL
|
||||||
&& eval_fname_sid(lv.ll_exp_name))
|
&& eval_fname_sid(lv.ll_exp_name))
|
||||||
|| eval_fname_sid(*pp))
|
|| eval_fname_sid(*pp))
|
||||||
@@ -3925,7 +3926,10 @@ trans_function_name(
|
|||||||
else if (!(flags & TFN_INT) && (builtin_function(lv.ll_name, len)
|
else if (!(flags & TFN_INT) && (builtin_function(lv.ll_name, len)
|
||||||
|| (in_vim9script() && *lv.ll_name == '_')))
|
|| (in_vim9script() && *lv.ll_name == '_')))
|
||||||
{
|
{
|
||||||
semsg(_(e_function_name_must_start_with_capital_or_s_str), start);
|
semsg(_(in_vim9script()
|
||||||
|
? e_function_name_must_start_with_capital_str
|
||||||
|
: e_function_name_must_start_with_capital_or_s_str),
|
||||||
|
start);
|
||||||
goto theend;
|
goto theend;
|
||||||
}
|
}
|
||||||
if (!skip && !(flags & TFN_QUIET) && !(flags & TFN_NO_DEREF))
|
if (!skip && !(flags & TFN_QUIET) && !(flags & TFN_NO_DEREF))
|
||||||
|
@@ -746,6 +746,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
4324,
|
||||||
/**/
|
/**/
|
||||||
4323,
|
4323,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -888,7 +888,7 @@ compile_nested_function(exarg_T *eap, cctx_T *cctx, garray_T *lines_to_free)
|
|||||||
return NULL;
|
return NULL;
|
||||||
if (!ASCII_ISUPPER(is_global ? name_start[2] : name_start[0]))
|
if (!ASCII_ISUPPER(is_global ? name_start[2] : name_start[0]))
|
||||||
{
|
{
|
||||||
semsg(_(e_function_name_must_start_with_capital_or_s_str), name_start);
|
semsg(_(e_function_name_must_start_with_capital_str), name_start);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user