]> granicus.if.org Git - vim/commitdiff
patch 8.2.4384: Vim9: error message not tested, some code not tested v8.2.4384
authorBram Moolenaar <Bram@vim.org>
Mon, 14 Feb 2022 21:19:04 +0000 (21:19 +0000)
committerBram Moolenaar <Bram@vim.org>
Mon, 14 Feb 2022 21:19:04 +0000 (21:19 +0000)
Problem:    Vim9: error message not tested, some code not tested.
Solution:   Add a couple of test cases.  Give an error for a command modifier
            without a command.

src/errors.h
src/ex_docmd.c
src/testdir/test_vim9_assign.vim
src/testdir/test_vim9_cmd.vim
src/version.c
src/vim9compile.c

index c5a2649a5c101101bbee0a838ffa495730b65298..937c59d22b5b313495295719f84e570352f074ca 100644 (file)
@@ -2791,7 +2791,8 @@ EXTERN char e_missing_argument_type_for_str[]
 // E1080 unused
 EXTERN char e_cannot_unlet_str[]
        INIT(= N_("E1081: Cannot unlet %s"));
-// E1082 unused
+EXTERN char e_command_modifier_without_command[]
+       INIT(= N_("E1082: Command modifier without command"));
 EXTERN char e_missing_backtick[]
        INIT(= N_("E1083: Missing backtick"));
 EXTERN char e_cannot_delete_vim9_script_function_str[]
index 864f3d845d40d56afef77915bd3418aa1dea6bcb..2cd2ca3509d33eb0dc25b1621c47dd4e7bfe39cf 100644 (file)
@@ -2784,6 +2784,7 @@ parse_command_modifiers(
 {
     char_u  *p;
     int            starts_with_colon = FALSE;
+    int            vim9script = in_vim9script();
 
     CLEAR_POINTER(cmod);
     cmod->cmod_flags = sticky_cmdmod_flags;
@@ -2819,12 +2820,18 @@ parse_command_modifiers(
                if (eap->nextcmd != NULL)
                    ++eap->nextcmd;
            }
+           if (vim9script && has_cmdmod(cmod, FALSE))
+               *errormsg = _(e_command_modifier_without_command);
            return FAIL;
        }
        if (*eap->cmd == NUL)
        {
            if (!skip_only)
+           {
                ex_pressedreturn = TRUE;
+               if (vim9script && has_cmdmod(cmod, FALSE))
+                   *errormsg = _(e_command_modifier_without_command);
+           }
            return FAIL;
        }
 
@@ -2838,7 +2845,7 @@ parse_command_modifiers(
        //   verbose[expr] = 2
        // But not:
        //   verbose [a, b] = list
-       if (in_vim9script())
+       if (vim9script)
        {
            char_u *s, *n;
 
@@ -2915,7 +2922,7 @@ parse_command_modifiers(
 #ifdef FEAT_EVAL
                                        // in ":filter #pat# cmd" # does not
                                        // start a comment
-                                    && (!in_vim9script() || VIM_ISWHITE(p[1]))
+                                    && (!vim9script || VIM_ISWHITE(p[1]))
 #endif
                                     ))
                                break;
@@ -2928,7 +2935,7 @@ parse_command_modifiers(
                            }
 #ifdef FEAT_EVAL
                            // Avoid that "filter(arg)" is recognized.
-                           if (in_vim9script() && !VIM_ISWHITE(p[-1]))
+                           if (vim9script && !VIM_ISWHITE(p[-1]))
                                break;
 #endif
                            if (skip_only)
index d9b8f3a24b35f9db5774fc131a2091f67bc9b54e..8a00cebab747de3b0f805404ac8bd05dcb4009da 100644 (file)
@@ -350,6 +350,11 @@ def Test_assign_unpack()
     assert_equal(1, v1)
     assert_equal(2, v2)
 
+    var _x: number
+    [_x, v2] = [6, 7]
+    assert_equal(6, _x)
+    assert_equal(7, v2)
+
     var reslist = []
     for text in ['aaa {bbb} ccc', 'ddd {eee} fff']
       var before: string
@@ -1481,6 +1486,7 @@ def Test_assign_dict()
 
   v9.CheckDefFailure(["var d: dict<number> = {a: '', b: true}"], 'E1012: Type mismatch; expected dict<number> but got dict<any>', 1)
   v9.CheckDefFailure(["var d: dict<dict<number>> = {x: {a: '', b: true}}"], 'E1012: Type mismatch; expected dict<dict<number>> but got dict<dict<any>>', 1)
+  v9.CheckDefFailure(["var d = {x: 1}", "d[1 : 2] = {y: 2}"], 'E1165: Cannot use a range with an assignment: d[1 : 2] =', 2)
 enddef
 
 def Test_assign_dict_unknown_type()
index 8325d7a808595e8e369f02ec388ddaf52cf02e8f..f80d5a26d16cd99a488194e7fe6eddb3534f91cf 100644 (file)
@@ -1133,6 +1133,16 @@ def Test_useless_command_modifier()
       silent endtry
   END
   v9.CheckDefAndScriptFailure(lines, 'E1176:', 3)
+
+  lines =<< trim END
+      leftabove
+  END
+  v9.CheckDefAndScriptFailure(lines, 'E1082:', 1)
+
+  lines =<< trim END
+      leftabove # comment
+  END
+  v9.CheckDefAndScriptFailure(lines, 'E1082:', 1)
 enddef
 
 def Test_eval_command()
index d7cfb17c956c9591ea812e4cfeee4b204ad86926..3716b3d5c39a9d3bcf88597da175827fd589d133 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4384,
 /**/
     4383,
 /**/
index 81ee41ebe022e06cf019e2f4bb43402ccc358aae..a0efafc1ea0337e70aa66ef9fe9a85c177422e02 100644 (file)
@@ -2761,13 +2761,7 @@ compile_def_function(
        cctx.ctx_has_cmdmod = FALSE;
        if (parse_command_modifiers(&ea, &errormsg, &local_cmdmod, FALSE)
                                                                       == FAIL)
-       {
-           if (errormsg != NULL)
-               goto erret;
-           // empty line or comment
-           line = (char_u *)"";
-           continue;
-       }
+           goto erret;
        generate_cmdmods(&cctx, &local_cmdmod);
        undo_cmdmod(&local_cmdmod);