changeset 30174:3564cddda2a5 v9.0.0423

patch 9.0.0423: "for" and "while" not recognized after :vim9cmd and :legacy Commit: https://github.com/vim/vim/commit/9132426334a8c7e159db93ec1b08ed61ac600aae Author: Bram Moolenaar <Bram@vim.org> Date: Fri Sep 9 13:27:59 2022 +0100 patch 9.0.0423: "for" and "while" not recognized after :vim9cmd and :legacy Problem: "for" and "while" not recognized after :vim9cmd and :legacy. (Emanuele Torre) Solution: Recognize all the command modifiers. (closes #11087) Add a test to check the list of modifiers.
author Bram Moolenaar <Bram@vim.org>
date Fri, 09 Sep 2022 14:30:05 +0200
parents 6806e2884fad
children c3ad8b5faa7a
files src/ex_docmd.c src/testdir/Make_all.mak src/testdir/test_cmdmods.vim src/testdir/test_eval_stuff.vim src/version.c
diffstat 5 files changed, 43 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -2888,7 +2888,7 @@ parse_command_modifiers(
 
 	switch (*p)
 	{
-	    // When adding an entry, also modify cmd_exists().
+	    // When adding an entry, also modify cmdmods[].
 	    case 'a':	if (!checkforcmd_noparen(&eap->cmd, "aboveleft", 3))
 			    break;
 			cmod->cmod_split |= WSP_ABOVE;
@@ -3958,11 +3958,13 @@ static struct cmdmod
     {"confirm", 4, FALSE},
     {"filter", 4, FALSE},
     {"hide", 3, FALSE},
+    {"horizontal", 3, FALSE},
     {"keepalt", 5, FALSE},
     {"keepjumps", 5, FALSE},
     {"keepmarks", 3, FALSE},
     {"keeppatterns", 5, FALSE},
     {"leftabove", 5, FALSE},
+    {"legacy", 3, FALSE},
     {"lockmarks", 3, FALSE},
     {"noautocmd", 3, FALSE},
     {"noswapfile", 3, FALSE},
@@ -3974,6 +3976,7 @@ static struct cmdmod
     {"unsilent", 3, FALSE},
     {"verbose", 4, TRUE},
     {"vertical", 4, FALSE},
+    {"vim9cmd", 4, FALSE},
 };
 
 /*
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -87,6 +87,7 @@ NEW_TESTS = \
 	test_clientserver \
 	test_close_count \
 	test_cmdline \
+	test_cmdmods \
 	test_cmdwin \
 	test_command_count \
 	test_comments \
@@ -346,6 +347,7 @@ NEW_TESTS_RES = \
 	test_clientserver.res \
 	test_close_count.res \
 	test_cmdline.res \
+	test_cmdmods.res \
 	test_cmdwin.res \
 	test_command_count.res \
 	test_comments.res \
new file mode 100644
--- /dev/null
+++ b/src/testdir/test_cmdmods.vim
@@ -0,0 +1,35 @@
+" Test for all comand modifiers in 
+
+def Test_cmdmods_array()
+  # Get all the command modifiers from ex_cmds.h.
+  var lines = readfile('../ex_cmds.h')->filter((_, l) => l =~ 'ex_wrongmodifier,')
+  var cmds = lines->map((_, v) => substitute(v, '.*"\(\k*\)".*', '\1', ''))
+
+  # :hide is both a command and a modifier
+  cmds->extend(['hide'])
+
+  # Get the entries of cmdmods[] in ex_docmd.c
+  edit ../ex_docmd.c
+  var top = search('^} cmdmods[') + 1
+  var bot = search('^};') - 1
+  lines = getline(top, bot)
+  var mods = lines->map((_, v) => substitute(v, '.*"\(\k*\)".*', '\1', ''))
+
+  # Check the lists are equal.  Convert them to a dict to get a clearer error
+  # message.
+  var cmds_dict = {}
+  for v in cmds
+    cmds_dict[v] = 1
+  endfor
+  var mods_dict = {}
+  for v in mods
+    mods_dict[v] = 1
+  endfor
+  assert_equal(cmds_dict, mods_dict)
+
+  bwipe!
+enddef
+
+
+" vim: shiftwidth=2 sts=2 expandtab
+
index 0081d89a52a488d644f570d314bce2336251c0b0..7d8421b7250d54f0a0dcd39338a729c2faeff781
GIT binary patch
literal 26234
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
L8GIWunw|dxYZY0a
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    423,
+/**/
     422,
 /**/
     421,