]> granicus.if.org Git - vim/commitdiff
patch 8.2.4025: error for import not ending in .vim does not work for .vimrc v8.2.4025
authorBram Moolenaar <Bram@vim.org>
Fri, 7 Jan 2022 13:38:24 +0000 (13:38 +0000)
committerBram Moolenaar <Bram@vim.org>
Fri, 7 Jan 2022 13:38:24 +0000 (13:38 +0000)
Problem:    Error for import not ending in .vim does not work for .vimrc.
Solution:   Check that .vim is the end. (closes #9484)

src/errors.h
src/testdir/test_vim9_script.vim
src/version.c
src/vim9script.c

index 5aaaeacd8d1dcb90e69fb6f05d14a7662a548cf4..9facb82c4afde50cc6c4b4664e83149ad6139f01 100644 (file)
@@ -2881,11 +2881,13 @@ EXTERN char e_cmd_mapping_must_end_with_cr[]
        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\""));
index 19eee76c784da81c85d8793f7ca915b200ba7d25..f4d59fde8225e4150d55c4737321acc7c21b1e01 100644 (file)
@@ -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()
index d8fe3528fded245bc85e7f2cc2d6c3b1e8738933..b0bfc29192e8cc85e67bfecc167f433a3070cda5 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4025,
 /**/
     4024,
 /**/
index 81f396759c25c7960c5ea260d31187581117a783..4d16a2a7a54038540b6c6090a39c1aeac485570e 100644 (file)
@@ -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);