From: Bram Moolenaar Date: Fri, 7 Jan 2022 13:38:24 +0000 (+0000) Subject: patch 8.2.4025: error for import not ending in .vim does not work for .vimrc X-Git-Tag: v8.2.4025 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=834d41853e12b9022f60b08c32480928c2a9e48f;p=vim 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 #9484) --- diff --git a/src/errors.h b/src/errors.h index 5aaaeacd8..9facb82c4 100644 --- a/src/errors.h +++ b/src/errors.h @@ -2881,11 +2881,13 @@ EXTERN char e_cmd_mapping_must_end_with_cr[] 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 index 19eee76c7..f4d59fde8 100644 --- 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 index d8fe3528f..b0bfc2919 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 4025, /**/ 4024, /**/ diff --git a/src/vim9script.c b/src/vim9script.c index 81f396759..4d16a2a7a 100644 --- 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_use_as_or_end_in_dot_vim_str), p); + goto erret; + } + if (end == p) { - semsg(_(e_imported_script_must_end_in_dot_vim_str), p); + semsg(_(e_cannot_import_dot_vim_without_using_as), p); goto erret; } as_name = vim_strnsave(p, end - p);