swenv.nvim
swenv.nvim copied to clipboard
Poetry support
Wouldn't it be easier to change https://github.com/AckslD/swenv.nvim/blob/main/lua/swenv/api.lua#L200 : ](https://github.com/AckslD/swenv.nvim/blob/main/lua/swenv/api.lua#L188 :
from:
M.auto_venv = function()
-- the function tries to activate in-project venvs, if present. Otherwise it tries to activate a venv in venvs folder
-- which best matches the project name.
local loaded, project_nvim = pcall(require, 'project_nvim.project')
local venvs = settings.get_venvs(settings.venvs_path)
if not loaded then
print('Error: failed to load the project_nvim.project module')
return
end
local project_dir, _ = project_nvim.get_project_root()
if project_dir then -- project_nvim.get_project_root might not always return a project path
local venv_name = read_venv_name_in_project(project_dir)
if venv_name then
local venv = { path = get_local_venv_path(project_dir), name = venv_name }
set_venv(venv)
return
end
venv_name = read_venv_name_common_dir(project_dir)
if venv_name then
local venv = best_match(venvs, venv_name)
if venv then
set_venv(venv)
return
end
end
end
end
to:
M.auto_venv = function()
-- Check if the $VIRTUAL_ENV environment variable exists
local virtual_env = os.getenv("VIRTUAL_ENV")
if virtual_env then
-- Extract the last part of the $VIRTUAL_ENV path
local venv_name = virtual_env:match("([^/]+)$")
if venv_name then
local venv = { path = virtual_env, name = venv_name }
set_venv(venv)
return
end
end
-- The function tries to activate in-project venvs, if present. Otherwise it tries to activate a venv in venvs folder
-- which best matches the project name.
local loaded, project_nvim = pcall(require, 'project_nvim.project')
local venvs = settings.get_venvs(settings.venvs_path)
if not loaded then
print('Error: failed to load the project_nvim.project module')
return
end
local project_dir, _ = project_nvim.get_project_root()
if project_dir then -- project_nvim.get_project_root might not always return a project path
local venv_name = read_venv_name_in_project(project_dir)
if venv_name then
local venv = { path = get_local_venv_path(project_dir), name = venv_name }
set_venv(venv)
return
end
venv_name = read_venv_name_common_dir(project_dir)
if venv_name then
local venv = best_match(venvs, venv_name)
if venv then
set_venv(venv)
return
end
end
end
end
Basically using $VIRTUAL_ENV
local virtual_env = os.getenv("VIRTUAL_ENV")
if virtual_env then
-- Extract the last part of the $VIRTUAL_ENV path
local venv_name = virtual_env:match("([^/]+)$")
if venv_name then
local venv = { path = virtual_env, name = venv_name }
set_venv(venv)
return
end
end
@aemonge hmm, but wouldn't that only work if you already had the venv activated? I don't actually use the auto_venv feature myself but if I understand it correctly it's intention is to activate a venv automatically. So that env var wouldn't exist?
You're right !