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 5aaaeac..9facb82 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -2881,11 +2881,13 @@
INIT(= N_("E1255: <Cmd> mapping must end with <CR>"));
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 19eee76..f4d59fd 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -1527,7 +1527,7 @@
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 @@
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 d8fe352..b0bfc29 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4025,
+/**/
4024,
/**/
4023,
diff --git a/src/vim9script.c b/src/vim9script.c
index 81f3967..4d16a2a 100644
--- a/src/vim9script.c
+++ b/src/vim9script.c
@@ -474,10 +474,14 @@
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);