# HG changeset patch # User Bram Moolenaar # Date 1643568303 -3600 # Node ID 55613f0d59bc7929a42987db3d7caa481e218b4a # Parent 769fe460984ebb57853700b24968289a15ac06c8 patch 8.2.4264: Vim9: can use old style autoload function name Commit: https://github.com/vim/vim/commit/d8fe6d34bb582438142d7c1f73d0bd8537bb3a7a Author: Bram Moolenaar Date: Sun Jan 30 18:40:44 2022 +0000 patch 8.2.4264: Vim9: can use old style autoload function name Problem: Vim9: can use old style autoload function name. Solution: Give an error for old style autoload function name. diff --git a/src/errors.h b/src/errors.h --- a/src/errors.h +++ b/src/errors.h @@ -3218,8 +3218,8 @@ EXTERN char e_cannot_import_dot_vim_with INIT(= N_("E1261: Cannot import .vim without using \"as\"")); EXTERN char e_cannot_import_same_script_twice_str[] INIT(= N_("E1262: Cannot import the same script twice: %s")); -EXTERN char e_using_autoload_name_in_non_autoload_script_str[] - INIT(= N_("E1263: Using autoload name in a non-autoload script: %s")); +EXTERN char e_cannot_use_name_with_hash_in_vim9_script_use_export_instead[] + INIT(= N_("E1263: cannot use name with # in Vim9 script, use export instead")); EXTERN char e_autoload_import_cannot_use_absolute_or_relative_path[] INIT(= N_("E1264: Autoload import cannot use absolute or relative path: %s")); EXTERN char e_cannot_use_partial_here[] diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim --- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -46,7 +46,7 @@ def TestCompilingErrorInTry() var lines =<< trim END vim9script - def script#OnlyCompiled() + export def OnlyCompiled() g:runtime = 'yes' invalid enddef @@ -114,7 +114,7 @@ def Test_autoload_name_mismatch() var lines =<< trim END vim9script - def scriptX#Function() + export def NoFunction() # comment g:runtime = 'yes' enddef @@ -126,7 +126,7 @@ def Test_autoload_name_mismatch() lines =<< trim END call script#Function() END - v9.CheckScriptFailure(lines, 'E746:', 2) + v9.CheckScriptFailure(lines, 'E117:', 1) &rtp = save_rtp delete(dir, 'rf') diff --git a/src/testdir/test_vim9_import.vim b/src/testdir/test_vim9_import.vim --- a/src/testdir/test_vim9_import.vim +++ b/src/testdir/test_vim9_import.vim @@ -1614,13 +1614,13 @@ enddef def Test_vim9_autoload_full_name() var lines =<< trim END vim9script - def some#gettest(): string + export def Gettest(): string return 'test' enddef g:some#name = 'name' g:some#dict = {key: 'value'} - def some#varargs(a1: string, ...l: list): string + export def Varargs(a1: string, ...l: list): string return a1 .. l[0] .. l[1] enddef END @@ -1630,23 +1630,23 @@ def Test_vim9_autoload_full_name() var save_rtp = &rtp exe 'set rtp^=' .. getcwd() .. '/Xdir' - assert_equal('test', g:some#gettest()) + assert_equal('test', g:some#Gettest()) assert_equal('name', g:some#name) assert_equal('value', g:some#dict.key) g:some#other = 'other' assert_equal('other', g:some#other) - assert_equal('abc', some#varargs('a', 'b', 'c')) + assert_equal('abc', some#Varargs('a', 'b', 'c')) # upper case script name works lines =<< trim END vim9script - def Other#getOther(): string + export def GetOther(): string return 'other' enddef END writefile(lines, 'Xdir/autoload/Other.vim') - assert_equal('other', g:Other#getOther()) + assert_equal('other', g:Other#GetOther()) delete('Xdir', 'rf') &rtp = save_rtp @@ -2020,14 +2020,23 @@ enddef def Test_autoload_name_wrong() var lines =<< trim END - vim9script def Xscriptname#Func() enddef END writefile(lines, 'Xscriptname.vim') - v9.CheckScriptFailure(lines, 'E1263:') + v9.CheckScriptFailure(lines, 'E746:') + delete('Xscriptname.vim') - delete('Xscriptname.vim') + mkdir('Xdir/autoload', 'p') + lines =<< trim END + vim9script + def somescript#Func() + enddef + END + writefile(lines, 'Xdir/autoload/somescript.vim') + assert_fails('source Xdir/autoload/somescript.vim', 'E1263:') + + delete('Xdir', 'rf') enddef def Test_import_autoload_postponed() @@ -2202,7 +2211,7 @@ def Test_vim9_autoload_disass() var lines =<< trim END vim9script - def debugit#test(): string + export def Test(): string return 'debug' enddef END @@ -2210,7 +2219,7 @@ def Test_vim9_autoload_disass() lines =<< trim END vim9script - def profileit#test(): string + export def Test(): string return 'profile' enddef END @@ -2218,10 +2227,10 @@ def Test_vim9_autoload_disass() lines =<< trim END vim9script - assert_equal('debug', debugit#test()) - disass debugit#test - assert_equal('profile', profileit#test()) - disass profileit#test + assert_equal('debug', debugit#Test()) + disass debugit#Test + assert_equal('profile', profileit#Test()) + disass profileit#Test END v9.CheckScriptSuccess(lines) @@ -2233,7 +2242,7 @@ enddef def Test_vim9_aucmd_autoload() var lines =<< trim END vim9script - def foo#test() + export def Test() echomsg getreg('"') enddef END @@ -2243,7 +2252,7 @@ def Test_vim9_aucmd_autoload() var save_rtp = &rtp exe 'set rtp^=' .. getcwd() .. '/Xdir' augroup test - autocmd TextYankPost * call foo#test() + autocmd TextYankPost * call foo#Test() augroup END normal Y diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -3078,7 +3078,7 @@ def Test_error_in_autoload_script() var lines =<< trim END vim9script noclear - def script#autoloaded() + export def Autoloaded() enddef def Broken() var x: any = '' @@ -3091,7 +3091,7 @@ def Test_error_in_autoload_script() lines =<< trim END vim9script def CallAutoloaded() - script#autoloaded() + script#Autoloaded() enddef function Legacy() @@ -3196,7 +3196,7 @@ func Test_no_redraw_when_restoring_cpo() let lines =<< trim END vim9script - def script#func() + export def Func() enddef END call mkdir('Xdir/autoload', 'p') @@ -3206,7 +3206,7 @@ func Test_no_redraw_when_restoring_cpo() vim9script set cpo+=M exe 'set rtp^=' .. getcwd() .. '/Xdir' - au CmdlineEnter : ++once timer_start(0, (_) => script#func()) + au CmdlineEnter : ++once timer_start(0, (_) => script#Func()) setline(1, 'some text') END call writefile(lines, 'XTest_redraw_cpo') diff --git a/src/userfunc.c b/src/userfunc.c --- a/src/userfunc.c +++ b/src/userfunc.c @@ -4232,6 +4232,11 @@ define_function(exarg_T *eap, char_u *na name = prefixed; } } + else if (vim9script && vim_strchr(name, AUTOLOAD_CHAR) != NULL) + { + emsg(_(e_cannot_use_name_with_hash_in_vim9_script_use_export_instead)); + goto ret_free; + } } // An error in a function call during evaluation of an expression in magic @@ -4540,12 +4545,6 @@ define_function(exarg_T *eap, char_u *na } } } - else if (vim9script && vim_strchr(name, AUTOLOAD_CHAR) != NULL) - { - semsg(_(e_using_autoload_name_in_non_autoload_script_str), - name); - goto erret; - } } if (var_conflict) { diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4264, +/**/ 4263, /**/ 4262,