diff options
author | w0rp <devw0rp@gmail.com> | 2022-12-24 13:28:08 +0000 |
---|---|---|
committer | w0rp <devw0rp@gmail.com> | 2022-12-24 13:37:57 +0000 |
commit | bc957015752bce79389e0092998a7b920d277670 (patch) | |
tree | 5a33a22281c203a0e036649c1279290e64005b27 /ale_linters/python/pylsp.vim | |
parent | 1e398202b9a63fcd91808a3205d3422b79435fa0 (diff) | |
download | ale-bc957015752bce79389e0092998a7b920d277670.zip |
Fix #4388: Fix pylsp and Pyright cwd
Add functions to compute the cwd to be the same as the project root for
pylsp and Pyright to work around issues in each language server when
they encounter modules that share the same name as first or third party
libraries.
Diffstat (limited to 'ale_linters/python/pylsp.vim')
-rw-r--r-- | ale_linters/python/pylsp.vim | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/ale_linters/python/pylsp.vim b/ale_linters/python/pylsp.vim index 537d1e74..a699e4f6 100644 --- a/ale_linters/python/pylsp.vim +++ b/ale_linters/python/pylsp.vim @@ -22,6 +22,19 @@ function! ale_linters#python#pylsp#GetExecutable(buffer) abort return ale#python#FindExecutable(a:buffer, 'python_pylsp', ['pylsp']) endfunction +" Force the cwd of the server to be the same as the project root to +" fix issues with treating local files matching first or third party library +" names being imported incorrectly. +function! ale_linters#python#pylsp#GetCwd(buffer) abort + let l:fake_linter = { + \ 'name': 'pylsp', + \ 'project_root': function('ale#python#FindProjectRoot'), + \} + let l:root = ale#lsp_linter#FindProjectRoot(a:buffer, l:fake_linter) + + return !empty(l:root) ? l:root : v:null +endfunction + function! ale_linters#python#pylsp#GetCommand(buffer) abort let l:executable = ale_linters#python#pylsp#GetExecutable(a:buffer) @@ -36,6 +49,7 @@ call ale#linter#Define('python', { \ 'name': 'pylsp', \ 'lsp': 'stdio', \ 'executable': function('ale_linters#python#pylsp#GetExecutable'), +\ 'cwd': function('ale_linters#python#pylsp#GetCwd'), \ 'command': function('ale_linters#python#pylsp#GetCommand'), \ 'project_root': function('ale#python#FindProjectRoot'), \ 'completion_filter': 'ale#completion#python#CompletionItemFilter', |