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
This commit is contained in:
Marco Hinz 2019-01-12 00:52:12 +01:00 committed by Justin M. Keyes
parent 44ea903ca5
commit 8a7b6200fb
5 changed files with 20 additions and 12 deletions

View File

@ -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);

View File

@ -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);
}
}

View File

@ -11,8 +11,9 @@ do
clear()
if missing_provider('python3') then
it(':python3 reports E319 if provider is missing', function()
expect_err([[Vim%(python3%):E319: No "python3" provider found.*]],
command, 'python3 print("foo")')
local expected = [[Vim%(py3.*%):E319: No "python3" provider found.*]]
expect_err(expected, command, 'py3 print("foo")')
expect_err(expected, command, 'py3file foo')
end)
pending('Python 3 (or the pynvim module) is broken/missing', function() end)
return

View File

@ -19,8 +19,9 @@ do
clear()
if missing_provider('python') then
it(':python reports E319 if provider is missing', function()
expect_err([[Vim%(python%):E319: No "python" provider found.*]],
command, 'python print("foo")')
local expected = [[Vim%(py.*%):E319: No "python" provider found.*]]
expect_err(expected, command, 'py print("foo")')
expect_err(expected, command, 'pyfile foo')
end)
pending('Python 2 (or the pynvim module) is broken/missing', function() end)
return

View File

@ -19,8 +19,9 @@ do
clear()
if missing_provider('ruby') then
it(':ruby reports E319 if provider is missing', function()
expect_err([[Vim%(ruby%):E319: No "ruby" provider found.*]],
command, 'ruby puts "foo"')
local expected = [[Vim%(ruby.*%):E319: No "ruby" provider found.*]]
expect_err(expected, command, 'ruby puts "foo"')
expect_err(expected, command, 'rubyfile foo')
end)
pending("Missing neovim RubyGem.", function() end)
return