changeset 27237:44cb142c8615 v8.2.4147

patch 8.2.4147: E464 does not always include the offending command Commit: https://github.com/vim/vim/commit/bed34f0a8a4e38a72a080184881bc68254a8cdc6 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Jan 19 20:48:37 2022 +0000 patch 8.2.4147: E464 does not always include the offending command Problem: E464 does not always include the offending command. Solution: Add another error message with "%s". (closes https://github.com/vim/vim/issues/9564)
author Bram Moolenaar <Bram@vim.org>
date Wed, 19 Jan 2022 22:00:03 +0100
parents 6cf6cf88dc33
children 78460f6857a0
files src/errors.h src/ex_docmd.c src/testdir/test_vim9_script.vim src/version.c src/vim9compile.c
diffstat 5 files changed, 36 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/errors.h
+++ b/src/errors.h
@@ -1148,6 +1148,8 @@ EXTERN char e_region_is_guarded_cannot_m
 #endif
 EXTERN char e_ambiguous_use_of_user_defined_command[]
 	INIT(= N_("E464: Ambiguous use of user-defined command"));
+EXTERN char e_ambiguous_use_of_user_defined_command_str[]
+	INIT(= N_("E464: Ambiguous use of user-defined command: %s"));
 EXTERN char e_winsize_requires_two_number_arguments[]
 	INIT(= N_("E465: :winsize requires two number arguments"));
 EXTERN char e_winpos_requires_two_number_arguments[]
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -2614,7 +2614,7 @@ doend:
 
     if (errormsg != NULL && *errormsg != NUL && !did_emsg)
     {
-	if (sourcing)
+	if (sourcing || !KeyTyped)
 	{
 	    if (errormsg != (char *)IObuff)
 	    {
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -3664,6 +3664,36 @@ def ProfiledNestedProfiled()
   Nested()
 enddef
 
+def Test_ambigous_command_error()
+  var lines =<< trim END
+      vim9script
+      command CmdA echomsg 'CmdA'
+      command CmdB echomsg 'CmdB'
+      Cmd
+  END
+  CheckScriptFailure(lines, 'E464: Ambiguous use of user-defined command: Cmd', 4)
+
+  lines =<< trim END
+      vim9script
+      def Func()
+        Cmd
+      enddef
+      Func()
+  END
+  CheckScriptFailure(lines, 'E464: Ambiguous use of user-defined command: Cmd', 1)
+
+  lines =<< trim END
+      vim9script
+      nnoremap <F3> <ScriptCmd>Cmd<CR>
+      feedkeys("\<F3>", 'xt')
+  END
+  CheckScriptFailure(lines, 'E464: Ambiguous use of user-defined command: Cmd', 3)
+
+  delcommand CmdA
+  delcommand CmdB
+  nunmap <F3>
+enddef
+
 " Execute this near the end, profiling doesn't stop until Vim exits.
 " This only tests that it works, not the profiling output.
 def Test_xx_profile_with_lambda()
--- 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 */
 /**/
+    4147,
+/**/
     4146,
 /**/
     4145,
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -2878,7 +2878,7 @@ compile_def_function(
 	if (p == NULL)
 	{
 	    if (cctx.ctx_skip != SKIP_YES)
-		emsg(_(e_ambiguous_use_of_user_defined_command));
+		semsg(_(e_ambiguous_use_of_user_defined_command_str), ea.cmd);
 	    goto erret;
 	}