From 3ea14d53664ca7dba648e650d4047e01a8518231 Mon Sep 17 00:00:00 2001 From: Marco Hinz Date: Sat, 17 Nov 2018 15:27:09 +0100 Subject: health/python: 'neovim' module was renamed to 'pynvim' --- runtime/autoload/provider/pythonx.vim | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'runtime/autoload/provider/pythonx.vim') diff --git a/runtime/autoload/provider/pythonx.vim b/runtime/autoload/provider/pythonx.vim index b51c398410..189159ab9e 100644 --- a/runtime/autoload/provider/pythonx.vim +++ b/runtime/autoload/provider/pythonx.vim @@ -10,7 +10,7 @@ function! provider#pythonx#Require(host) abort " Python host arguments let prog = (ver == '2' ? provider#python#Prog() : provider#python3#Prog()) - let args = [prog, '-c', 'import sys; sys.path.remove(""); import neovim; neovim.start_host()'] + let args = [prog, '-c', 'import sys; sys.path.remove(""); import pynvim; pynvim.start_host()'] " Collect registered Python plugins into args let python_plugins = remote#host#PluginsForHost(a:host.name) @@ -62,17 +62,17 @@ function! s:check_interpreter(prog, major_ver) abort let min_version = (a:major_ver == 2) ? '2.6' : '3.3' - " Try to load neovim module, and output Python version. + " Try to load pynvim module, and output Python version. " Return codes: - " 0 Neovim module can be loaded. - " 2 Neovim module cannot be loaded. + " 0 pynvim module can be loaded. + " 2 pynvim module cannot be loaded. " Otherwise something else went wrong (e.g. 1 or 127). let prog_ver = system([ a:prog , '-c' , \ 'import sys; ' . \ 'sys.path.remove(""); ' . \ 'sys.stdout.write(str(sys.version_info[0]) + "." + str(sys.version_info[1])); ' . \ 'import pkgutil; ' . - \ 'exit(2*int(pkgutil.get_loader("neovim") is None))' + \ 'exit(2*int(pkgutil.get_loader("pynvim") is None))' \ ]) if v:shell_error == 2 || v:shell_error == 0 @@ -87,7 +87,7 @@ function! s:check_interpreter(prog, major_ver) abort endif if v:shell_error == 2 - return [0, prog_path.' does not have the "neovim" module. :help provider-python'] + return [0, prog_path.' does not have the "pynvim" module. :help provider-python'] elseif v:shell_error == 127 " This can happen with pyenv's shims. return [0, prog_path . ' does not exist: ' . prog_ver] -- cgit From 443cd04d5b00c57d791681065b2016cbe4228044 Mon Sep 17 00:00:00 2001 From: Marco Hinz Date: Sun, 18 Nov 2018 15:46:55 +0100 Subject: provider/python: refactoring --- runtime/autoload/provider/pythonx.vim | 48 ++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 21 deletions(-) (limited to 'runtime/autoload/provider/pythonx.vim') diff --git a/runtime/autoload/provider/pythonx.vim b/runtime/autoload/provider/pythonx.vim index 189159ab9e..55d9db821a 100644 --- a/runtime/autoload/provider/pythonx.vim +++ b/runtime/autoload/provider/pythonx.vim @@ -54,46 +54,52 @@ function! provider#pythonx#Detect(major_ver) abort \ . ":\n" . join(errors, "\n")] endfunction -function! s:check_interpreter(prog, major_ver) abort +" Returns array: [interpreter_exitcode, interpreter_version] +function! s:check_for_package(prog, package) abort + let prog_version = system([a:prog, '-c' , printf( + \ 'import sys; ' . + \ 'sys.path.remove(""); ' . + \ 'sys.stdout.write(str(sys.version_info[0]) + "." + str(sys.version_info[1])); ' . + \ 'import pkgutil; ' . + \ 'exit(2*int(pkgutil.get_loader("%s") is None))', + \ a:package)]) + return [v:shell_error, prog_version] +endfunction + +function! s:check_interpreter(prog, major_version) abort let prog_path = exepath(a:prog) if prog_path ==# '' return [0, a:prog . ' not found in search path or not executable.'] endif - let min_version = (a:major_ver == 2) ? '2.6' : '3.3' + let min_version = (a:major_version == 2) ? '2.6' : '3.3' " Try to load pynvim module, and output Python version. - " Return codes: + " Exit codes: " 0 pynvim module can be loaded. " 2 pynvim module cannot be loaded. " Otherwise something else went wrong (e.g. 1 or 127). - let prog_ver = system([ a:prog , '-c' , - \ 'import sys; ' . - \ 'sys.path.remove(""); ' . - \ 'sys.stdout.write(str(sys.version_info[0]) + "." + str(sys.version_info[1])); ' . - \ 'import pkgutil; ' . - \ 'exit(2*int(pkgutil.get_loader("pynvim") is None))' - \ ]) + let [prog_exitcode, prog_version] = s:check_for_package(a:prog, 'pynvim') - if v:shell_error == 2 || v:shell_error == 0 + if prog_exitcode == 2 || prog_exitcode == 0 " Check version only for expected return codes. - if prog_ver !~ '^' . a:major_ver - return [0, prog_path . ' is Python ' . prog_ver . ' and cannot provide Python ' - \ . a:major_ver . '.'] - elseif prog_ver =~ '^' . a:major_ver && prog_ver < min_version - return [0, prog_path . ' is Python ' . prog_ver . ' and cannot provide Python >= ' + if prog_version !~ '^' . a:major_version + return [0, prog_path . ' is Python ' . prog_version . ' and cannot provide Python ' + \ . a:major_version . '.'] + elseif prog_version =~ '^' . a:major_version && prog_version < min_version + return [0, prog_path . ' is Python ' . prog_version . ' and cannot provide Python >= ' \ . min_version . '.'] endif endif - if v:shell_error == 2 + if prog_exitcode == 2 return [0, prog_path.' does not have the "pynvim" module. :help provider-python'] - elseif v:shell_error == 127 + elseif prog_exitcode == 127 " This can happen with pyenv's shims. - return [0, prog_path . ' does not exist: ' . prog_ver] - elseif v:shell_error + return [0, prog_path . ' does not exist: ' . prog_version] + elseif prog_exitcode return [0, 'Checking ' . prog_path . ' caused an unknown error. ' - \ . '(' . v:shell_error . ', output: ' . prog_ver . ')' + \ . '(' . prog_exitcode . ', output: ' . prog_version . ')' \ . ' Report this at https://github.com/neovim/neovim'] endif -- cgit From f1a787d292d1508ffebb2b70f6c9f86fc84044b9 Mon Sep 17 00:00:00 2001 From: Marco Hinz Date: Tue, 20 Nov 2018 09:57:43 +0100 Subject: health/python: warn if pynvim upgrade failed Reference: https://github.com/neovim/neovim/wiki/Following-HEAD#20181118 --- runtime/autoload/provider/pythonx.vim | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'runtime/autoload/provider/pythonx.vim') diff --git a/runtime/autoload/provider/pythonx.vim b/runtime/autoload/provider/pythonx.vim index 55d9db821a..258aff61b3 100644 --- a/runtime/autoload/provider/pythonx.vim +++ b/runtime/autoload/provider/pythonx.vim @@ -40,7 +40,7 @@ function! provider#pythonx#Detect(major_ver) abort let errors = [] for prog in progs - let [result, err] = s:check_interpreter(prog, a:major_ver) + let [result, err] = provider#pythonx#CheckForModule(prog, 'pynvim', a:major_ver) if result return [prog, err] endif @@ -54,19 +54,20 @@ function! provider#pythonx#Detect(major_ver) abort \ . ":\n" . join(errors, "\n")] endfunction -" Returns array: [interpreter_exitcode, interpreter_version] -function! s:check_for_package(prog, package) abort +" Returns array: [prog_exitcode, prog_version] +function! s:import_module(prog, module) abort let prog_version = system([a:prog, '-c' , printf( \ 'import sys; ' . \ 'sys.path.remove(""); ' . \ 'sys.stdout.write(str(sys.version_info[0]) + "." + str(sys.version_info[1])); ' . \ 'import pkgutil; ' . \ 'exit(2*int(pkgutil.get_loader("%s") is None))', - \ a:package)]) + \ a:module)]) return [v:shell_error, prog_version] endfunction -function! s:check_interpreter(prog, major_version) abort +" Returns array: [was_success, error_message] +function! provider#pythonx#CheckForModule(prog, module, major_version) abort let prog_path = exepath(a:prog) if prog_path ==# '' return [0, a:prog . ' not found in search path or not executable.'] @@ -79,7 +80,7 @@ function! s:check_interpreter(prog, major_version) abort " 0 pynvim module can be loaded. " 2 pynvim module cannot be loaded. " Otherwise something else went wrong (e.g. 1 or 127). - let [prog_exitcode, prog_version] = s:check_for_package(a:prog, 'pynvim') + let [prog_exitcode, prog_version] = s:import_module(a:prog, 'pynvim') if prog_exitcode == 2 || prog_exitcode == 0 " Check version only for expected return codes. -- cgit From e509576e531acf6a97ef5b471e25bbe8c77414a8 Mon Sep 17 00:00:00 2001 From: "Justin M. Keyes" Date: Wed, 5 Dec 2018 00:11:28 +0100 Subject: provider/lang: expand() g:foo_host_prog (#9312) Before this commit, if user does this: let g:node_host_prog = '~/.nvm/versions/node/v11.3.0/bin/neovim-node-host' the "~/" is not expanded to user's home directory. `:help g:ruby_host_prog` suggests a path with "~/" so technically we already claimed to support this. closes https://github.com/neovim/node-client/issues/102 --- runtime/autoload/provider/pythonx.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'runtime/autoload/provider/pythonx.vim') diff --git a/runtime/autoload/provider/pythonx.vim b/runtime/autoload/provider/pythonx.vim index 258aff61b3..b8e2ded00d 100644 --- a/runtime/autoload/provider/pythonx.vim +++ b/runtime/autoload/provider/pythonx.vim @@ -24,13 +24,13 @@ endfunction function! provider#pythonx#Detect(major_ver) abort if a:major_ver == 2 if exists('g:python_host_prog') - return [g:python_host_prog, ''] + return [expand(g:python_host_prog), ''] else let progs = ['python2', 'python2.7', 'python2.6', 'python'] endif else if exists('g:python3_host_prog') - return [g:python3_host_prog, ''] + return [expand(g:python3_host_prog), ''] else let progs = ['python3', 'python3.7', 'python3.6', 'python3.5', \ 'python3.4', 'python3.3', 'python'] -- cgit