aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarco Hinz <mh.codebro+github@gmail.com>2019-01-12 00:52:12 +0100
committerJustin M. Keyes <justinkz@gmail.com>2019-01-13 01:49:07 +0100
commit8a7b6200fbaaafa13c1425faacecbd779d05d729 (patch)
treeff118183fe75981455255e30e672779f83acea8a /src
parent44ea903ca51a387bfcd858221b1748f79d7dbf54 (diff)
downloadrneovim-8a7b6200fbaaafa13c1425faacecbd779d05d729.tar.gz
rneovim-8a7b6200fbaaafa13c1425faacecbd779d05d729.tar.bz2
rneovim-8a7b6200fbaaafa13c1425faacecbd779d05d729.zip
provider: improve error message if provider is missing (#9487)
Move `has_eval_provider()` check to `eval_call_provider()` to make sure that every code path calls it first. Previously we would, when pynvim was missing, get a nice error message for `:python3 1`, but not for `:py3file blah`. Fixes https://github.com/neovim/neovim/issues/9485
Diffstat (limited to 'src')
-rw-r--r--src/nvim/eval.c10
-rw-r--r--src/nvim/ex_cmds2.c7
2 files changed, 11 insertions, 6 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index d67818aa81..5191328b5d 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -22683,6 +22683,16 @@ static void script_host_eval(char *name, typval_T *argvars, typval_T *rettv)
typval_T eval_call_provider(char *provider, char *method, list_T *arguments)
{
+ if (!eval_has_provider(provider)) {
+ emsgf("E319: No \"%s\" provider found. Run \":checkhealth provider\"",
+ provider);
+ return (typval_T){
+ .v_type = VAR_NUMBER,
+ .v_lock = VAR_UNLOCKED,
+ .vval.v_number = (varnumber_T)0
+ };
+ }
+
char func[256];
int name_len = snprintf(func, sizeof(func), "provider#%s#Call", provider);
diff --git a/src/nvim/ex_cmds2.c b/src/nvim/ex_cmds2.c
index 1ffcf67ef7..dd7afa5c77 100644
--- a/src/nvim/ex_cmds2.c
+++ b/src/nvim/ex_cmds2.c
@@ -3908,12 +3908,7 @@ static void script_host_execute(char *name, exarg_T *eap)
tv_list_append_number(args, (int)eap->line1);
tv_list_append_number(args, (int)eap->line2);
- if (!eval_has_provider(name)) {
- emsgf("E319: No \"%s\" provider found. Run \":checkhealth provider\"",
- name);
- } else {
- (void)eval_call_provider(name, "execute", args);
- }
+ (void)eval_call_provider(name, "execute", args);
}
}