Skip to content
Browse files

provider: has("python3_dynamic") et al. #10980

Vim added more flags for testing yet more dimensions of its Python
situation.  Handle those in eval_has_provider().

vim-patch:8.0.1436: not enough information about what Python version may work
Problem:    Not enough information about what Python version may work.
Solution:   Add "python_compiled", "python3_compiled", "python_dynamic" and
            "python3_dynamic" values for has().

ref: #10942 (comment)
  • Loading branch information...
justinmk committed Sep 9, 2019
1 parent 225941d commit 853683e72a780afef3ecebd8d46e32983abe1798
Showing with 25 additions and 11 deletions.
  1. +17 −11 src/nvim/eval.c
  2. +4 −0 test/functional/provider/python3_spec.lua
  3. +4 −0 test/functional/provider/python_spec.lua
@@ -24133,24 +24133,30 @@ typval_T eval_call_provider(char *provider, char *method, list_T *arguments)
return rettv;

/// Checks if a named provider is enabled.
bool eval_has_provider(const char *name)
if (!strequal(name, "clipboard")
&& !strequal(name, "python")
&& !strequal(name, "python3")
&& !strequal(name, "ruby")
&& !strequal(name, "node")) {
/// Checks if provider for feature `feat` is enabled.
bool eval_has_provider(const char *feat)
if (!strequal(feat, "clipboard")
&& !strequal(feat, "python")
&& !strequal(feat, "python3")
&& !strequal(feat, "python_compiled")
&& !strequal(feat, "python_dynamic")
&& !strequal(feat, "python3_compiled")
&& !strequal(feat, "python3_dynamic")
&& !strequal(feat, "ruby")
&& !strequal(feat, "node")) {
// Avoid autoload for non-provider has() features.
return false;

char name[32]; // Normalized: "python_compiled" => "python".
snprintf(name, sizeof(name), "%s", feat);
strchrsub(name, '_', '\0'); // Chop any "_xx" suffix.

char buf[256];
int len;
typval_T tv;

// Get the g:loaded_xx_provider variable.
len = snprintf(buf, sizeof(buf), "g:loaded_%s_provider", name);
int 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", name);
@@ -29,6 +29,10 @@ describe('python3 provider', function()

it('feature test', function()
eq(1, eval('has("python3")'))
eq(1, eval('has("python3_compiled")'))
eq(1, eval('has("python3_dynamic")'))
eq(0, eval('has("python3_dynamic_")'))
eq(0, eval('has("python3_")'))

it('python3_execute', function()
@@ -37,6 +37,10 @@ end)
describe('python feature test', function()
it('works', function()
eq(1, funcs.has('python'))
eq(1, funcs.has('python_compiled'))
eq(1, funcs.has('python_dynamic'))
eq(0, funcs.has('python_dynamic_'))
eq(0, funcs.has('python_'))

0 comments on commit 853683e

Please sign in to comment.
You can’t perform that action at this time.