patch 8.2.4578: no warning when autoload script for completion has an error
Problem: No warning when an autoload script for completion function has an
error.
Solution: Do not ignore errors when a function name is given with a dot or
'#' character. (closes #9958)
diff --git a/src/eval.c b/src/eval.c
index b55ae1a..62266f8 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -695,6 +695,7 @@
char_u *arg;
char_u *name;
char_u *tofree = NULL;
+ int ignore_errors;
rettv->v_type = VAR_UNKNOWN; // clear_tv() uses this
CLEAR_FIELD(funcexe);
@@ -702,11 +703,18 @@
funcexe.fe_lastline = curwin->w_cursor.lnum;
funcexe.fe_evaluate = TRUE;
- // The name might be "import.Func" or "Funcref".
+ // The name might be "import.Func" or "Funcref". We don't know, we need to
+ // ignore errors for an undefined name. But we do want errors when an
+ // autoload script has errors. Guess that when there is a dot or '#' in
+ // the name showing errors is the right choice.
+ ignore_errors = vim_strchr(func, '.') == NULL
+ && vim_strchr(func, AUTOLOAD_CHAR) == NULL;
arg = func;
- ++emsg_off;
+ if (ignore_errors)
+ ++emsg_off;
name = deref_function_name(&arg, &tofree, &EVALARG_EVALUATE, FALSE);
- --emsg_off;
+ if (ignore_errors)
+ --emsg_off;
if (name == NULL)
name = func;