From 75db0c37a78c1fed601120f6780cd42f0909f2d8 Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Fri, 1 May 2015 04:28:54 +0200 Subject: provider/pythonx: only call system("python") once `s:check_interpreter` will query/return the version also, so that `s:check_version` can just use that, without calling "python" again. --- runtime/autoload/provider/pythonx.vim | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) (limited to 'runtime/autoload') diff --git a/runtime/autoload/provider/pythonx.vim b/runtime/autoload/provider/pythonx.vim index 6137d16fcb..1fe6c066ab 100644 --- a/runtime/autoload/provider/pythonx.vim +++ b/runtime/autoload/provider/pythonx.vim @@ -13,7 +13,7 @@ function! provider#pythonx#Detect(ver) abort let skip = exists(skip_var) ? {skip_var} : 0 if exists(host_var) " Disable auto detection - let [check, err] = s:check_interpreter({host_var}, a:ver, skip) + let [check, err, _] = s:check_interpreter({host_var}, a:ver, skip) return check ? [{host_var}, err] : ['', err] endif @@ -22,9 +22,9 @@ function! provider#pythonx#Detect(ver) abort \ : ['3.5', '3.4', '3.3', '3.2', '3', ''] for prog in map(detect_versions, "'python' . v:val") - let [check, err] = s:check_interpreter(prog, a:ver, skip) + let [check, err, ver] = s:check_interpreter(prog, a:ver, skip) if check - let [check, err] = s:check_version(prog, a:ver, skip) + let [check, err] = s:check_version(prog, ver, skip) return [prog, err] endif endfor @@ -39,31 +39,30 @@ function! s:check_version(prog, ver, skip) abort return [1, ''] endif - let get_version = - \ ' -c "import sys; sys.stdout.write(str(sys.version_info[0]) + '. - \ '\".\" + str(sys.version_info[1]))"' - let min_version = (a:ver == 2) ? '2.6' : '3.3' - if system(a:prog . get_version) >= min_version + let min_version = (a:ver[0] == 2) ? '2.6' : '3.3' + if a:ver >= min_version return [1, ''] endif - return [0, 'Python ' . get_version . ' interpreter is not supported.'] + return [0, 'Python ' . a:ver . ' interpreter is not supported.'] endfunction function! s:check_interpreter(prog, ver, skip) abort if !executable(a:prog) - return [0, 'Python'.a:ver.' interpreter is not executable.'] + return [0, 'Python'.a:ver.' interpreter is not executable.', ''] endif if a:skip - return [1, ''] + return [1, '', ''] endif " Load neovim module check - call system(a:prog . ' -c ' . + let ver = system(a:prog . ' -c ' . + \ '''import sys; sys.stdout.write(str(sys.version_info[0]) + '. + \ '"." + str(sys.version_info[1])); '''. \ (a:ver == 2 ? \ '''import pkgutil; exit(pkgutil.get_loader("neovim") is None)''': \ '''import importlib; exit(importlib.find_loader("neovim") is None)''') \ ) - return [!v:shell_error, 'Python'.a:ver.' interpreter have not neovim module.'] + return [!v:shell_error, 'Python'.a:ver.' interpreter have not neovim module.', ver] endfunction -- cgit From 905f34cf30fdebdf430c3be72429193fd855cc7f Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Sat, 2 May 2015 20:56:09 +0200 Subject: provider/pythonx: fix grammar with error --- runtime/autoload/provider/pythonx.vim | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'runtime/autoload') diff --git a/runtime/autoload/provider/pythonx.vim b/runtime/autoload/provider/pythonx.vim index 1fe6c066ab..e390692d4d 100644 --- a/runtime/autoload/provider/pythonx.vim +++ b/runtime/autoload/provider/pythonx.vim @@ -55,7 +55,7 @@ function! s:check_interpreter(prog, ver, skip) abort return [1, '', ''] endif - " Load neovim module check + " Try to load neovim module, and output Python version. let ver = system(a:prog . ' -c ' . \ '''import sys; sys.stdout.write(str(sys.version_info[0]) + '. \ '"." + str(sys.version_info[1])); '''. @@ -63,6 +63,9 @@ function! s:check_interpreter(prog, ver, skip) abort \ '''import pkgutil; exit(pkgutil.get_loader("neovim") is None)''': \ '''import importlib; exit(importlib.find_loader("neovim") is None)''') \ ) - return [!v:shell_error, 'Python'.a:ver.' interpreter have not neovim module.', ver] + if v:shell_error + return [0, 'Python'.a:ver.' interpreter ('.a:prog.') has no neovim module installed.', ver] + endif + return [1, '', ver] endfunction -- cgit From 6fa10ab9cb77fb96f414b3fe6b19b25552e4f6a2 Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Sat, 2 May 2015 21:00:33 +0200 Subject: provider/pythonx: add reference to ":help nvim-python" for error --- runtime/autoload/provider/pythonx.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'runtime/autoload') diff --git a/runtime/autoload/provider/pythonx.vim b/runtime/autoload/provider/pythonx.vim index e390692d4d..5daa68fa5c 100644 --- a/runtime/autoload/provider/pythonx.vim +++ b/runtime/autoload/provider/pythonx.vim @@ -64,7 +64,7 @@ function! s:check_interpreter(prog, ver, skip) abort \ '''import importlib; exit(importlib.find_loader("neovim") is None)''') \ ) if v:shell_error - return [0, 'Python'.a:ver.' interpreter ('.a:prog.') has no neovim module installed.', ver] + return [0, 'Python'.a:ver.' interpreter ('.a:prog.') has no neovim module installed. See ":help nvim-python".', ver] endif return [1, '', ver] endfunction -- cgit From 12f7229e7eef016baa8d9d959f78fc7f351b48fb Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Sat, 2 May 2015 21:14:41 +0200 Subject: provider/pythonx: test python3/2 first, do not test python3.2 python3/python2 will typically point at the default / most recent interpreter. --- runtime/autoload/provider/pythonx.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'runtime/autoload') diff --git a/runtime/autoload/provider/pythonx.vim b/runtime/autoload/provider/pythonx.vim index 5daa68fa5c..74a9933f09 100644 --- a/runtime/autoload/provider/pythonx.vim +++ b/runtime/autoload/provider/pythonx.vim @@ -18,8 +18,8 @@ function! provider#pythonx#Detect(ver) abort endif let detect_versions = (a:ver == 2) ? - \ ['2.7', '2.6', '2', ''] - \ : ['3.5', '3.4', '3.3', '3.2', '3', ''] + \ ['2', '2.7', '2.6', ''] + \ : ['3', '3.5', '3.4', '3.3', ''] for prog in map(detect_versions, "'python' . v:val") let [check, err, ver] = s:check_interpreter(prog, a:ver, skip) -- cgit From 3b0ec6599cfe6ce56711e89ddf8688416897afb7 Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Sat, 2 May 2015 21:58:54 +0200 Subject: provider/pythonx: Detect: only return valid versions The `check` return value of `s:check_version` was not being used, and it was returned always. --- runtime/autoload/provider/pythonx.vim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'runtime/autoload') diff --git a/runtime/autoload/provider/pythonx.vim b/runtime/autoload/provider/pythonx.vim index 74a9933f09..0e221458b2 100644 --- a/runtime/autoload/provider/pythonx.vim +++ b/runtime/autoload/provider/pythonx.vim @@ -25,7 +25,9 @@ function! provider#pythonx#Detect(ver) abort let [check, err, ver] = s:check_interpreter(prog, a:ver, skip) if check let [check, err] = s:check_version(prog, ver, skip) - return [prog, err] + if check + return [prog, err] + endif endif endfor -- cgit From 866e587b88715e3c10a706687f52a54516721662 Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Mon, 4 May 2015 22:14:54 +0200 Subject: provider/python: define Prog and Error functions always `provider#pythonX#Error` and `provider#pythonX#Prog` are currently meant for debugging only (the error message is not being used), and should therefore be defined always, especially in case of errors. Ref: https://github.com/neovim/neovim/pull/2549#issuecomment-98607580 --- runtime/autoload/provider/python.vim | 9 +++++---- runtime/autoload/provider/python3.vim | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) (limited to 'runtime/autoload') diff --git a/runtime/autoload/provider/python.vim b/runtime/autoload/provider/python.vim index 4c43c8a613..5ce636c324 100644 --- a/runtime/autoload/provider/python.vim +++ b/runtime/autoload/provider/python.vim @@ -10,10 +10,6 @@ endif let g:loaded_python_provider = 1 let [s:prog, s:err] = provider#pythonx#Detect(2) -if s:prog == '' - " Detection failed - finish -endif function! provider#python#Prog() return s:prog @@ -23,6 +19,11 @@ function! provider#python#Error() return s:err endfunction +if s:prog == '' + " Detection failed + finish +endif + let s:plugin_path = expand(':p:h').'/script_host.py' " The Python provider plugin will run in a separate instance of the Python diff --git a/runtime/autoload/provider/python3.vim b/runtime/autoload/provider/python3.vim index 1a52ade0ef..392892b43a 100644 --- a/runtime/autoload/provider/python3.vim +++ b/runtime/autoload/provider/python3.vim @@ -10,10 +10,6 @@ endif let g:loaded_python3_provider = 1 let [s:prog, s:err] = provider#pythonx#Detect(3) -if s:prog == '' - " Detection failed - finish -endif function! provider#python3#Prog() return s:prog @@ -23,6 +19,11 @@ function! provider#python3#Error() return s:err endfunction +if s:prog == '' + " Detection failed + finish +endif + let s:plugin_path = expand(':p:h').'/script_host.py' " The Python3 provider plugin will run in a separate instance of the Python3 -- cgit From 2111f28fc5b716bafd7524567398c4ce020e1cc8 Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Tue, 5 May 2015 11:22:53 +0200 Subject: provider/python: Call: fix usage of 'finish' in function Do not call it again in case of an exception in `remote#host#Require` (ref: https://github.com/neovim/neovim/pull/2549#issuecomment-102674350). --- runtime/autoload/provider/python.vim | 6 ++++++ runtime/autoload/provider/python3.vim | 7 ++++++- 2 files changed, 12 insertions(+), 1 deletion(-) (limited to 'runtime/autoload') diff --git a/runtime/autoload/provider/python.vim b/runtime/autoload/provider/python.vim index 5ce636c324..d4a509864f 100644 --- a/runtime/autoload/provider/python.vim +++ b/runtime/autoload/provider/python.vim @@ -32,6 +32,9 @@ call remote#host#RegisterClone('legacy-python-provider', 'python') call remote#host#RegisterPlugin('legacy-python-provider', s:plugin_path, []) function! provider#python#Call(method, args) + if s:err != '' + return + endif if !exists('s:host') let s:rpcrequest = function('rpcrequest') @@ -39,7 +42,10 @@ function! provider#python#Call(method, args) try let s:host = remote#host#Require('legacy-python-provider') catch + let s:err = v:exception + echohl WarningMsg echomsg v:exception + echohl None finish endtry endif diff --git a/runtime/autoload/provider/python3.vim b/runtime/autoload/provider/python3.vim index 392892b43a..f469bf55aa 100644 --- a/runtime/autoload/provider/python3.vim +++ b/runtime/autoload/provider/python3.vim @@ -32,6 +32,9 @@ call remote#host#RegisterClone('legacy-python3-provider', 'python3') call remote#host#RegisterPlugin('legacy-python3-provider', s:plugin_path, []) function! provider#python3#Call(method, args) + if s:err != '' + return + endif if !exists('s:host') let s:rpcrequest = function('rpcrequest') @@ -39,10 +42,12 @@ function! provider#python3#Call(method, args) try let s:host = remote#host#Require('legacy-python3-provider') catch + let s:err = v:exception + echohl WarningMsg echomsg v:exception + echohl None finish endtry endif - return call(s:rpcrequest, insert(insert(a:args, 'python_'.a:method), s:host)) endfunction -- cgit From 8d42db1eeaac03028257513aa093df79efc9c025 Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Fri, 8 May 2015 12:09:59 +0200 Subject: remote#host#RequirePythonHost: fix reference to log I could not find a reference to NVIM_PYTHON_PYTHON_LOG anywhere, and python-client looks for NVIM_PYTHON_LOG_FILE. ~/.nvimlog appears to be hardcoded and enabled by default. This would need to be adjusted when this changes. --- runtime/autoload/remote/host.vim | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'runtime/autoload') diff --git a/runtime/autoload/remote/host.vim b/runtime/autoload/remote/host.vim index 2a7cd3c43b..a8b505d096 100644 --- a/runtime/autoload/remote/host.vim +++ b/runtime/autoload/remote/host.vim @@ -214,10 +214,12 @@ function! s:RequirePythonHost(name) catch echomsg v:exception endtry - throw 'Failed to load python host. You can try to see what happened ' . - \ 'by starting Neovim with $NVIM_PYTHON_PYTHON_LOG and opening '. + throw 'Failed to load Python host. You can try to see what happened '. + \ 'by starting Neovim with the environment variable '. + \ '$NVIM_PYTHON_LOG_FILE set to a file and opening '. \ 'the generated log file. Also, the host stderr will be available '. - \ 'in Neovim log, so it may contain useful information.' + \ 'in Neovim log, so it may contain useful information. '. + \ 'See also ~/.nvimlog.' endfunction call remote#host#Register('python', function('s:RequirePythonHost')) -- cgit From c148427c89ca8f7ed936f37f016306e06ff5c9b7 Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Thu, 14 May 2015 19:26:49 +0200 Subject: provider/pythonx: return error from Detect Ref: https://github.com/blueyed/neovim/commit/9b653ce0#commitcomment-11195449 --- runtime/autoload/provider/pythonx.vim | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'runtime/autoload') diff --git a/runtime/autoload/provider/pythonx.vim b/runtime/autoload/provider/pythonx.vim index 0e221458b2..b1e6ff9e3a 100644 --- a/runtime/autoload/provider/pythonx.vim +++ b/runtime/autoload/provider/pythonx.vim @@ -12,9 +12,13 @@ function! provider#pythonx#Detect(ver) abort \ 'g:python_host_skip_check' : 'g:python3_host_skip_check' let skip = exists(skip_var) ? {skip_var} : 0 if exists(host_var) - " Disable auto detection + " Disable auto detection. let [check, err, _] = s:check_interpreter({host_var}, a:ver, skip) - return check ? [{host_var}, err] : ['', err] + if check + return [{host_var}, err] + endif + return ['', 'provider#pythonx#Detect: could not load Python '.a:ver + \ .' (from '.host_var.'): '.err] endif let detect_versions = (a:ver == 2) ? @@ -31,9 +35,8 @@ function! provider#pythonx#Detect(ver) abort endif endfor - " No Python interpreter - return ['', 'Neovim module installed Python' - \ .a:ver.' interpreter is not found.'] + return ['', 'provider#pythonx#Detect: could not load Python '.a:ver + \ .': '.err] endfunction function! s:check_version(prog, ver, skip) abort -- cgit From 4dc3c84c5a9c10f720e0a5d8c4269b11e0c81b98 Mon Sep 17 00:00:00 2001 From: Florian Walch Date: Sun, 24 May 2015 20:05:09 +0300 Subject: provider/pythonx: Don't use Python 3 interpreter for +python. The executable 'python' can refer to either Python 2 or Python 3. Add a check to only accept Python 2 interpreters as providers for +python. Also improve the error messages. Resolves #2734. --- runtime/autoload/provider/pythonx.vim | 58 ++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 25 deletions(-) (limited to 'runtime/autoload') diff --git a/runtime/autoload/provider/pythonx.vim b/runtime/autoload/provider/pythonx.vim index b1e6ff9e3a..b08a6dbf91 100644 --- a/runtime/autoload/provider/pythonx.vim +++ b/runtime/autoload/provider/pythonx.vim @@ -5,55 +5,62 @@ endif let s:loaded_pythonx_provider = 1 -function! provider#pythonx#Detect(ver) abort - let host_var = (a:ver == 2) ? +function! provider#pythonx#Detect(major_ver) abort + let host_var = (a:major_ver == 2) ? \ 'g:python_host_prog' : 'g:python3_host_prog' - let skip_var = (a:ver == 2) ? + let skip_var = (a:major_ver == 2) ? \ 'g:python_host_skip_check' : 'g:python3_host_skip_check' let skip = exists(skip_var) ? {skip_var} : 0 if exists(host_var) " Disable auto detection. - let [check, err, _] = s:check_interpreter({host_var}, a:ver, skip) - if check + let [result, err, _] = s:check_interpreter({host_var}, a:major_ver, skip) + if result return [{host_var}, err] endif - return ['', 'provider#pythonx#Detect: could not load Python '.a:ver - \ .' (from '.host_var.'): '.err] + return ['', 'provider/pythonx: Could not load Python ' . a:major_ver + \ . ' from ' . host_var . ': ' . err] endif - let detect_versions = (a:ver == 2) ? + let prog_suffixes = (a:major_ver == 2) ? \ ['2', '2.7', '2.6', ''] \ : ['3', '3.5', '3.4', '3.3', ''] - for prog in map(detect_versions, "'python' . v:val") - let [check, err, ver] = s:check_interpreter(prog, a:ver, skip) - if check - let [check, err] = s:check_version(prog, ver, skip) - if check + let errors = [] + for prog in map(prog_suffixes, "'python' . v:val") + let [result, err, prog_ver] = s:check_interpreter(prog, a:major_ver, skip) + if result + let [result, err] = s:check_version(prog, prog_ver, a:major_ver, skip) + if result return [prog, err] endif endif + + " Accumulate errors in case we don't find + " any suitable Python interpreter. + call add(errors, err) endfor - return ['', 'provider#pythonx#Detect: could not load Python '.a:ver - \ .': '.err] + " No suitable Python interpreter found. + return ['', 'provider/pythonx: Could not load Python ' . a:major_ver + \ . ":\n" . join(errors, "\n")] endfunction -function! s:check_version(prog, ver, skip) abort +function! s:check_version(prog, prog_ver, major_ver, skip) abort if a:skip return [1, ''] endif - let min_version = (a:ver[0] == 2) ? '2.6' : '3.3' - if a:ver >= min_version + let min_version = (a:major_ver == 2) ? '2.6' : '3.3' + if a:prog_ver =~ '^' . a:major_ver && a:prog_ver >= min_version return [1, ''] endif - return [0, 'Python ' . a:ver . ' interpreter is not supported.'] + return [0, a:prog . ' is Python ' . prog_ver . ' and cannot provide Python ' + \ . a:major_ver . '.'] endfunction -function! s:check_interpreter(prog, ver, skip) abort +function! s:check_interpreter(prog, major_ver, skip) abort if !executable(a:prog) - return [0, 'Python'.a:ver.' interpreter is not executable.', ''] + return [0, a:prog . ' does not exist or is not executable.', ''] endif if a:skip @@ -61,16 +68,17 @@ function! s:check_interpreter(prog, ver, skip) abort endif " Try to load neovim module, and output Python version. - let ver = system(a:prog . ' -c ' . + let prog_ver = system(a:prog . ' -c ' . \ '''import sys; sys.stdout.write(str(sys.version_info[0]) + '. \ '"." + str(sys.version_info[1])); '''. - \ (a:ver == 2 ? + \ (a:major_ver == 2 ? \ '''import pkgutil; exit(pkgutil.get_loader("neovim") is None)''': \ '''import importlib; exit(importlib.find_loader("neovim") is None)''') \ ) if v:shell_error - return [0, 'Python'.a:ver.' interpreter ('.a:prog.') has no neovim module installed. See ":help nvim-python".', ver] + return [0, a:prog . ' does have not have the neovim module installed. ' + \ . 'See ":help nvim-python".', prog_ver] endif - return [1, '', ver] + return [1, '', prog_ver] endfunction -- cgit From cfa278c72ed0ce48ce075f7f0230379a2566a458 Mon Sep 17 00:00:00 2001 From: Florian Walch Date: Thu, 4 Jun 2015 19:43:12 +0300 Subject: provider/pythonx: Merge s:check_version() and s:check_interpreter(). --- runtime/autoload/provider/pythonx.vim | 38 +++++++++++++---------------------- 1 file changed, 14 insertions(+), 24 deletions(-) (limited to 'runtime/autoload') diff --git a/runtime/autoload/provider/pythonx.vim b/runtime/autoload/provider/pythonx.vim index b08a6dbf91..669ae47a39 100644 --- a/runtime/autoload/provider/pythonx.vim +++ b/runtime/autoload/provider/pythonx.vim @@ -13,7 +13,7 @@ function! provider#pythonx#Detect(major_ver) abort let skip = exists(skip_var) ? {skip_var} : 0 if exists(host_var) " Disable auto detection. - let [result, err, _] = s:check_interpreter({host_var}, a:major_ver, skip) + let [result, err] = s:check_interpreter({host_var}, a:major_ver, skip) if result return [{host_var}, err] endif @@ -27,12 +27,9 @@ function! provider#pythonx#Detect(major_ver) abort let errors = [] for prog in map(prog_suffixes, "'python' . v:val") - let [result, err, prog_ver] = s:check_interpreter(prog, a:major_ver, skip) + let [result, err] = s:check_interpreter(prog, a:major_ver, skip) if result - let [result, err] = s:check_version(prog, prog_ver, a:major_ver, skip) - if result - return [prog, err] - endif + return [prog, err] endif " Accumulate errors in case we don't find @@ -45,26 +42,13 @@ function! provider#pythonx#Detect(major_ver) abort \ . ":\n" . join(errors, "\n")] endfunction -function! s:check_version(prog, prog_ver, major_ver, skip) abort - if a:skip - return [1, ''] - endif - - let min_version = (a:major_ver == 2) ? '2.6' : '3.3' - if a:prog_ver =~ '^' . a:major_ver && a:prog_ver >= min_version - return [1, ''] - endif - return [0, a:prog . ' is Python ' . prog_ver . ' and cannot provide Python ' - \ . a:major_ver . '.'] -endfunction - function! s:check_interpreter(prog, major_ver, skip) abort if !executable(a:prog) - return [0, a:prog . ' does not exist or is not executable.', ''] + return [0, a:prog . ' does not exist or is not executable.'] endif if a:skip - return [1, '', ''] + return [1, ''] endif " Try to load neovim module, and output Python version. @@ -77,8 +61,14 @@ function! s:check_interpreter(prog, major_ver, skip) abort \ ) if v:shell_error return [0, a:prog . ' does have not have the neovim module installed. ' - \ . 'See ":help nvim-python".', prog_ver] + \ . 'See ":help nvim-python".'] + endif + + let min_version = (a:major_ver == 2) ? '2.6' : '3.3' + if prog_ver =~ '^' . a:major_ver && prog_ver >= min_version + return [1, ''] endif - return [1, '', prog_ver] -endfunction + return [0, a:prog . ' is Python ' . prog_ver . ' and cannot provide Python ' + \ . a:major_ver . '.'] +endfunction -- cgit From e8c68aa7ee64aaa8363b2900ea97a97e7eb8ba4b Mon Sep 17 00:00:00 2001 From: Florian Walch Date: Fri, 5 Jun 2015 12:16:52 +0300 Subject: provider/pythonx: Show absolute path to executable in error message. --- runtime/autoload/provider/pythonx.vim | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'runtime/autoload') diff --git a/runtime/autoload/provider/pythonx.vim b/runtime/autoload/provider/pythonx.vim index 669ae47a39..412c93d5a0 100644 --- a/runtime/autoload/provider/pythonx.vim +++ b/runtime/autoload/provider/pythonx.vim @@ -43,8 +43,9 @@ function! provider#pythonx#Detect(major_ver) abort endfunction function! s:check_interpreter(prog, major_ver, skip) abort - if !executable(a:prog) - return [0, a:prog . ' does not exist or is not executable.'] + let prog_path = exepath(a:prog) + if prog_path == '' + return [0, a:prog . ' not found in search path or not executable.'] endif if a:skip @@ -60,7 +61,7 @@ function! s:check_interpreter(prog, major_ver, skip) abort \ '''import importlib; exit(importlib.find_loader("neovim") is None)''') \ ) if v:shell_error - return [0, a:prog . ' does have not have the neovim module installed. ' + return [0, prog_path . ' does have not have the neovim module installed. ' \ . 'See ":help nvim-python".'] endif @@ -69,6 +70,6 @@ function! s:check_interpreter(prog, major_ver, skip) abort return [1, ''] endif - return [0, a:prog . ' is Python ' . prog_ver . ' and cannot provide Python ' + return [0, prog_path . ' is Python ' . prog_ver . ' and cannot provide Python ' \ . a:major_ver . '.'] endfunction -- cgit