2022-11-27 11:42:19 +00:00
|
|
|
local util = require('lspconfig/util')
|
|
|
|
local path = util.path
|
|
|
|
local M = {}
|
|
|
|
local shell = vim.o.shell
|
|
|
|
local exepath = vim.fn.exepath
|
2022-11-28 00:45:53 +00:00
|
|
|
-- https://github.com/ray-x/navigator.lua/issues/247#issue-1465308677
|
2022-11-27 11:42:19 +00:00
|
|
|
M.pyenv_path = function(workspace)
|
|
|
|
-- Use activated virtualenv.
|
|
|
|
if vim.env.VIRTUAL_ENV then
|
|
|
|
return path.join(vim.env.VIRTUAL_ENV, 'bin', 'python'), 'virtual env'
|
|
|
|
end
|
|
|
|
|
|
|
|
-- Find and use virtualenv in workspace directory.
|
|
|
|
for _, pattern in ipairs({ '*', '.*' }) do
|
|
|
|
local match = vim.fn.glob(path.join(workspace, pattern, 'pyvenv.cfg'))
|
|
|
|
local sep = require('navigator.util').path_sep()
|
|
|
|
local py = 'bin' .. sep .. 'python'
|
|
|
|
if match ~= '' then
|
|
|
|
print('found', match)
|
|
|
|
print(vim.fn.glob(path.join(workspace, pattern)))
|
|
|
|
match = string.gsub(match, 'pyvenv.cfg', py)
|
|
|
|
return match, string.format('venv base folder: %s', match)
|
|
|
|
end
|
|
|
|
match = vim.fn.glob(path.join(workspace, pattern, 'poetry.lock'))
|
|
|
|
if match ~= '' then
|
|
|
|
local venv_base_folder = vim.fn.trim(vim.fn.system('poetry env info -p'))
|
|
|
|
return path.join(venv_base_folder, 'bin', 'python'), string.format('venv base folder: %s', venv_base_folder)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
-- Fallback to system Python.
|
|
|
|
return exepath('python3') or exepath('python') or 'python', 'fallback to system python path'
|
|
|
|
end
|
|
|
|
M.on_init = function(client)
|
|
|
|
local python_path, msg = M.pyenv_path(client.config.root_dir)
|
|
|
|
vim.notify(string.format('%s \ncurrent python path: %s', msg, python_path))
|
|
|
|
client.config.settings.python.pythonPath = python_path
|
|
|
|
end
|
|
|
|
return M
|