From b4b4cf46a7a2b6d7b4e997179166444b0e338ac8 Mon Sep 17 00:00:00 2001 From: Abao Zhang Date: Wed, 17 Jul 2024 14:07:20 +0800 Subject: fix(health): fix pyenv root and python exepath detect issue Fix the following two issues: - pyenv root detection issue When `PYENV_ROOT` environment variable is not set, neovim will detect pyenv's root via `pyenv root` command, but which will be always fail because `vim.fn.system()` returns result with additional `\n`. Using `vim.system` instead prevents this problem. to trim it before check whether it is exists - python executable path detection issue Filter unrelated `python-config` in cases where multiple python versions are installed, e.g. `python-config`, `python3.10-config`, `python3.11-config` etc. --- runtime/lua/vim/provider/health.lua | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/runtime/lua/vim/provider/health.lua b/runtime/lua/vim/provider/health.lua index 9ff4d15257..47d66307e9 100644 --- a/runtime/lua/vim/provider/health.lua +++ b/runtime/lua/vim/provider/health.lua @@ -366,7 +366,17 @@ local function check_for_pyenv() local pyenv_root = vim.fn.resolve(os.getenv('PYENV_ROOT') or '') if pyenv_root == '' then - pyenv_root = vim.fn.system({ pyenv_path, 'root' }) + local p = vim.system({ pyenv_path, 'root' }):wait() + if p.code ~= 0 then + local message = string.format( + 'pyenv: Failed to infer the root of pyenv by running `%s root` : %s. Ignoring pyenv for all following checks.', + pyenv_path, + p.stderr + ) + health.warn(message) + return { '', '' } + end + pyenv_root = vim.trim(p.stdout) health.info('pyenv: $PYENV_ROOT is not set. Infer from `pyenv root`.') end @@ -754,7 +764,7 @@ local function python() local venv_bins = vim.fn.glob(string.format('%s/%s/python*', virtual_env, bin_dir), true, true) venv_bins = vim.tbl_filter(function(v) -- XXX: Remove irrelevant executables found in bin/. - return not v:match('python%-config') + return not v:match('python.*%-config') end, venv_bins) if vim.tbl_count(venv_bins) > 0 then for _, venv_bin in pairs(venv_bins) do -- cgit