#2172 - Expand PATH in the shell for automatic virtualenv

This commit is contained in:
w0rp 2023-03-07 01:59:05 +00:00
parent 6ae26df22b
commit bb691d6dee
No known key found for this signature in database
GPG Key ID: 0FC1ECAA8C81CD83
5 changed files with 26 additions and 9 deletions

View File

@ -100,15 +100,18 @@ endfunction
" a string of them to prefix linter commands with.
function! ale#python#AutoVirtualenvEnvString(buffer) abort
let l:venv_dir = ale#python#FindVirtualenv(a:buffer)
let l:pathsep = has('win32') ? ';' : ':'
if !empty(l:venv_dir)
let l:vars = [
\ ['PATH', l:venv_dir . s:sep . s:bin_dir . l:pathsep . $PATH],
\]
let l:strs = [ ]
" We don't need a space between var as ale#Env adds one.
return join(map(l:vars, 'ale#Env(v:val[0], v:val[1])'), '')
" expand PATH correctly inside of the appropriate shell.
if has('win32')
call add(l:strs, 'set PATH=' . ale#Escape(l:venv_dir) . ';%PATH% && ')
else
call add(l:strs, 'PATH=' . ale#Escape(l:venv_dir) . '":$PATH" ')
endif
return join(l:strs, '')
endif
return ''

View File

@ -31,8 +31,9 @@ Execute(virtualenv vars should be used when ale_python_auto_virtualenv = 1):
let b:sep = has('win32') ? ';' : ':'
let b:executable = ale#path#Simplify(b:venv_bin . '/jedi-language-server')
AssertLinter b:executable, ale#Env('PATH', b:venv_bin . b:sep . $PATH)
AssertLinter b:executable, ale#python#AutoVirtualenvEnvString(bufnr(''))
\ . ale#Escape(b:executable)
Assert !empty(ale#python#AutoVirtualenvEnvString(bufnr('')))
Execute(You should be able to override the jedi-language-server virtualenv lookup):
call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py')

View File

@ -52,8 +52,9 @@ Execute(virtualenv vars should be used when ale_python_auto_virtualenv = 1):
let b:sep = has('win32') ? ';' : ':'
let b:executable = ale#path#Simplify(b:venv_bin . '/pylsp')
AssertLinter b:executable, ale#Env('PATH', b:venv_bin . b:sep . $PATH)
AssertLinter b:executable, ale#python#AutoVirtualenvEnvString(bufnr(''))
\ . ale#Escape(b:executable)
Assert !empty(ale#python#AutoVirtualenvEnvString(bufnr('')))
Execute(You should be able to override the pylsp virtualenv lookup):
call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py')

View File

@ -144,8 +144,9 @@ Execute(virtualenv vars should be used when ale_python_auto_virtualenv = 1):
let b:sep = has('win32') ? ';' : ':'
let b:executable = ale#path#Simplify(b:venv_bin . '/pyright-langserver')
AssertLinter b:executable, ale#Env('PATH', b:venv_bin . b:sep . $PATH)
AssertLinter b:executable, ale#python#AutoVirtualenvEnvString(bufnr(''))
\ . ale#Escape(b:executable) . ' --stdio'
Assert !empty(ale#python#AutoVirtualenvEnvString(bufnr('')))
Execute(Setting executable to 'pipenv' should append 'run pyright'):
call ale#test#SetFilename('../test-files')

View File

@ -10,3 +10,14 @@ Execute(ale#python#FindVirtualenv falls back to $VIRTUAL_ENV when no directories
\ ale#python#FindVirtualenv(bufnr('%')),
\ '/opt/example/',
\ 'Expected VIRTUAL_ENV environment variable to be used, but it was not'
Execute(ale#python#AutoVirtualenvEnvString should return the correct values):
if has('win32')
AssertEqual
\ 'set PATH=/opt/example/;%PATH% && ',
\ ale#python#AutoVirtualenvEnvString(bufnr(''))
else
AssertEqual
\ 'PATH=''/opt/example/''":$PATH" ',
\ ale#python#AutoVirtualenvEnvString(bufnr(''))
endif