# HG changeset patch # User Bram Moolenaar # Date 1641563104 -3600 # Node ID 8433e5c8765153230649b89dc7e4833fb50ceeba # Parent f57ec31a2cefce36bb3e2bcb97ae4d2780cd5b58 patch 8.2.4025: error for import not ending in .vim does not work for .vimrc Commit: https://github.com/vim/vim/commit/834d41853e12b9022f60b08c32480928c2a9e48f Author: Bram Moolenaar Date: Fri Jan 7 13:38:24 2022 +0000 patch 8.2.4025: error for import not ending in .vim does not work for .vimrc Problem: Error for import not ending in .vim does not work for .vimrc. Solution: Check that .vim is the end. (closes https://github.com/vim/vim/issues/9484) diff --git a/src/errors.h b/src/errors.h --- a/src/errors.h +++ b/src/errors.h @@ -2881,11 +2881,13 @@ EXTERN char e_cmd_mapping_must_end_with_ INIT(= N_("E1255: mapping must end with ")); EXTERN char e_string_or_function_required_for_argument_nr[] INIT(= N_("E1256: String or function required for argument %d")); -EXTERN char e_imported_script_must_end_in_dot_vim_str[] - INIT(= N_("E1257: Imported script must end in .vim: %s")); +EXTERN char e_imported_script_must_use_as_or_end_in_dot_vim_str[] + INIT(= N_("E1257: Imported script must use \"as\" or end in .vim: %s")); EXTERN char e_no_dot_after_imported_name_str[] INIT(= N_("E1258: No '.' after imported name: %s")); EXTERN char e_missing_name_after_imported_name_str[] INIT(= N_("E1259: Missing name after imported name: %s")); EXTERN char e_cannot_unlet_imported_item_str[] INIT(= N_("E1260: Cannot unlet an imported item: %s")); +EXTERN char e_cannot_import_dot_vim_without_using_as[] + INIT(= N_("E1261: Cannot import .vim without using \"as\"")); 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 @@ -1527,7 +1527,7 @@ def Test_import_funcref() delete('Xlib.vim') enddef -def Test_import_star_fails() +def Test_import_fails() writefile([], 'Xfoo.vim') var lines =<< trim END import './Xfoo.vim' as foo @@ -1572,7 +1572,34 @@ def Test_import_star_fails() That() END CheckDefAndScriptFailure(lines, ['E1094:', 'E1236: Cannot use That itself']) - delete('Xthat.vim') + + mkdir('Xdir') + + writefile(['vim9script'], 'Xdir/.vim') + lines =<< trim END + vim9script + import './Xdir/.vim' + END + CheckScriptFailure(lines, 'E1261: Cannot import .vim without using "as"') + lines =<< trim END + vim9script + import './Xdir/.vim' as vim + END + CheckScriptSuccess(lines) + + writefile(['vim9script'], 'Xdir/.vimrc') + lines =<< trim END + vim9script + import './Xdir/.vimrc' + END + CheckScriptFailure(lines, 'E1257: Imported script must use "as" or end in .vim') + lines =<< trim END + vim9script + import './Xdir/.vimrc' as vimrc + END + CheckScriptSuccess(lines) + + delete('Xdir', 'rf') enddef func g:Trigger() 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 */ /**/ + 4025, +/**/ 4024, /**/ 4023, diff --git a/src/vim9script.c b/src/vim9script.c --- a/src/vim9script.c +++ b/src/vim9script.c @@ -474,10 +474,14 @@ handle_import( semsg(_(e_trailing_characters_str), expr_end); goto erret; } - - if (end == NULL) + if (end == NULL || end[4] != NUL) { - semsg(_(e_imported_script_must_end_in_dot_vim_str), p); + semsg(_(e_imported_script_must_use_as_or_end_in_dot_vim_str), p); + goto erret; + } + if (end == p) + { + semsg(_(e_cannot_import_dot_vim_without_using_as), p); goto erret; } as_name = vim_strnsave(p, end - p);