# HG changeset patch # User Bram Moolenaar # Date 1662726605 -7200 # Node ID 3564cddda2a53b5f271c6eaed116497e1e49cbaf # Parent 6806e2884fad766d4c10ae5a9429fb92312a75b8 patch 9.0.0423: "for" and "while" not recognized after :vim9cmd and :legacy Commit: https://github.com/vim/vim/commit/9132426334a8c7e159db93ec1b08ed61ac600aae Author: Bram Moolenaar 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. diff --git a/src/ex_docmd.c b/src/ex_docmd.c --- 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}, }; /* diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak --- 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 \ diff --git a/src/testdir/test_cmdmods.vim b/src/testdir/test_cmdmods.vim 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 + diff --git a/src/testdir/test_eval_stuff.vim b/src/testdir/test_eval_stuff.vim index 0081d89a52a488d644f570d314bce2336251c0b0..7d8421b7250d54f0a0dcd39338a729c2faeff781 GIT binary patch literal 26234 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 L8GIWunw|dxYZY0a diff --git a/src/version.c b/src/version.c --- 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,