35 lines
1004 B
Lua
35 lines
1004 B
Lua
local T = {}
|
|
local exepath = vim.fn.exepath
|
|
|
|
local function path_join(...)
|
|
return table.concat(vim.tbl_flatten { ... }, '/')
|
|
end
|
|
|
|
-- from https://github.com/ray-x/navigator.lua/issues/247#issue-1465308677
|
|
T.get_path = function(workspace)
|
|
-- Use activated virtualenv.
|
|
if vim.env.VIRTUAL_ENV then
|
|
return path_join(vim.env.VIRTUAL_ENV, "bin", "python")
|
|
end
|
|
|
|
-- Find and use virtualenv in workspace directory.
|
|
for _, pattern in ipairs({ "*", ".*" }) do
|
|
local match = vim.fn.glob(path_join(workspace, pattern, "pyvenv.cfg"))
|
|
if match ~= "" then
|
|
local py = path_join("bin", "python")
|
|
match = string.gsub(match, "pyvenv.cfg", py)
|
|
return 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")
|
|
end
|
|
end
|
|
|
|
-- Fallback to system Python.
|
|
return exepath("python3") or exepath("python") or "python"
|
|
end
|
|
|
|
return T
|