diff options
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r-- | src/nvim/eval.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 3bcec56b06..dc18532b40 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -23969,28 +23969,37 @@ typval_T eval_call_provider(char *provider, char *method, list_T *arguments) } /// Checks if a named provider is enabled. -bool eval_has_provider(const char *provider) -{ +bool eval_has_provider(const char *name) +{ + if (!strequal(name, "clipboard") + && !strequal(name, "python") + && !strequal(name, "python3") + && !strequal(name, "ruby") + && !strequal(name, "node")) { + // Avoid autoload for non-provider has() features. + return false; + } + char buf[256]; int len; typval_T tv; // Get the g:loaded_xx_provider variable. - len = snprintf(buf, sizeof(buf), "g:loaded_%s_provider", provider); + len = snprintf(buf, sizeof(buf), "g:loaded_%s_provider", name); if (get_var_tv(buf, len, &tv, NULL, false, true) == FAIL) { // Trigger autoload once. - len = snprintf(buf, sizeof(buf), "provider#%s#bogus", provider); + len = snprintf(buf, sizeof(buf), "provider#%s#bogus", name); script_autoload(buf, len, false); // Retry the (non-autoload-style) variable. - len = snprintf(buf, sizeof(buf), "g:loaded_%s_provider", provider); + len = snprintf(buf, sizeof(buf), "g:loaded_%s_provider", name); if (get_var_tv(buf, len, &tv, NULL, false, true) == FAIL) { // Show a hint if Call() is defined but g:loaded_xx_provider is missing. - snprintf(buf, sizeof(buf), "provider#%s#Call", provider); + snprintf(buf, sizeof(buf), "provider#%s#Call", name); bool has_call = !!find_func((char_u *)buf); if (has_call && p_lpl) { emsgf("provider: %s: missing required variable g:loaded_%s_provider", - provider, provider); + name, name); } return false; } |