changeset 22790:44317eb799d7 v8.2.1943

patch 8.2.1943: Vim9: wrong error message when colon is missing Commit: https://github.com/vim/vim/commit/36113e46b4a7e8c33aa1ed1c9cfa6591c952183d Author: Bram Moolenaar <Bram@vim.org> Date: Mon Nov 2 21:08:47 2020 +0100 patch 8.2.1943: Vim9: wrong error message when colon is missing Problem: Vim9: wrong error message when colon is missing. Solution: Check for a missing colon. (issue https://github.com/vim/vim/issues/7239)
author Bram Moolenaar <Bram@vim.org>
date Mon, 02 Nov 2020 21:15:03 +0100
parents be5c458c0168
children 879583321480
files src/ex_docmd.c src/testdir/test_vim9_cmd.vim src/version.c
diffstat 3 files changed, 23 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -1807,12 +1807,19 @@ do_one_cmd(
 	if (ea.cmd == cmd + 1 && *cmd == '$')
 	    // should be "$VAR = val"
 	    --ea.cmd;
-	else if (ea.cmd > cmd)
-	{
-	    emsg(_(e_colon_required_before_a_range));
-	    goto doend;
-	}
 	p = find_ex_command(&ea, NULL, lookup_scriptvar, NULL);
+	if (ea.cmdidx == CMD_SIZE)
+	{
+	    char_u *ar = skip_range(ea.cmd, TRUE, NULL);
+
+	    // If a ':' before the range is missing, give a clearer error
+	    // message.
+	    if (ar > ea.cmd)
+	    {
+		emsg(_(e_colon_required_before_a_range));
+		goto doend;
+	    }
+	}
     }
     else
 #endif
--- a/src/testdir/test_vim9_cmd.vim
+++ b/src/testdir/test_vim9_cmd.vim
@@ -460,6 +460,15 @@ def Test_command_modifier_other()
   # verbose
 enddef
 
+def Test_range_after_command_modifier()
+  CheckScriptFailure(['vim9script', 'silent keepjump 1d _'], 'E1050:', 2)
+  new
+  setline(1, 'xxx')
+  CheckScriptSuccess(['vim9script', 'silent keepjump :1d _'])
+  assert_equal('', getline(1))
+  bwipe!
+enddef
+
 def Test_eval_command()
   var from = 3
   var to = 5
--- 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 */
 /**/
+    1943,
+/**/
     1942,
 /**/
     1941,