diff options
| author | Justin M. Keyes <justinkz@gmail.com> | 2019-08-04 12:20:30 +0200 | 
|---|---|---|
| committer | Justin M. Keyes <justinkz@gmail.com> | 2019-08-04 13:23:46 +0200 | 
| commit | 5e6a08f2e6b21e83c9fb381042f0aed89de4598d (patch) | |
| tree | f219b253e9543c31e4792394a110c089db766895 /src | |
| parent | 241956720d02d933b0b27097a3b0a1966f138d0b (diff) | |
| download | rneovim-5e6a08f2e6b21e83c9fb381042f0aed89de4598d.tar.gz rneovim-5e6a08f2e6b21e83c9fb381042f0aed89de4598d.tar.bz2 rneovim-5e6a08f2e6b21e83c9fb381042f0aed89de4598d.zip | |
provider: skip non-provider has() feature-names
We don't want to retry autoload sourcing (slow) for every random has()
query that finds it way to eval_call_provider().
Diffstat (limited to 'src')
| -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;      } | 
