summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-02-14 21:19:04 +0000
committerBram Moolenaar <Bram@vim.org>2022-02-14 21:19:04 +0000
commitbc510064027da8024d59460c9c816aea4ffac096 (patch)
tree5054f5b794010b839bfec74808b369a726709f57
parent7a3b802bab5add34baae37ec2c1ae7ad2f1693bd (diff)
patch 8.2.4384: Vim9: error message not tested, some code not testedv8.2.4384
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.
-rw-r--r--src/errors.h3
-rw-r--r--src/ex_docmd.c13
-rw-r--r--src/testdir/test_vim9_assign.vim6
-rw-r--r--src/testdir/test_vim9_cmd.vim10
-rw-r--r--src/version.c2
-rw-r--r--src/vim9compile.c8
6 files changed, 31 insertions, 11 deletions
diff --git a/src/errors.h b/src/errors.h
index c5a2649a5c..937c59d22b 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -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[]
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 864f3d845d..2cd2ca3509 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -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)
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index d9b8f3a24b..8a00cebab7 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -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()
diff --git a/src/testdir/test_vim9_cmd.vim b/src/testdir/test_vim9_cmd.vim
index 8325d7a808..f80d5a26d1 100644
--- a/src/testdir/test_vim9_cmd.vim
+++ b/src/testdir/test_vim9_cmd.vim
@@ -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()
diff --git a/src/version.c b/src/version.c
index d7cfb17c95..3716b3d5c3 100644
--- 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 */
/**/
+ 4384,
+/**/
4383,
/**/
4382,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 81ee41ebe0..a0efafc1ea 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -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);