summaryrefslogtreecommitdiff
path: root/ale_linters
diff options
context:
space:
mode:
authorw0rp <devw0rp@gmail.com>2022-12-24 13:28:08 +0000
committerw0rp <devw0rp@gmail.com>2022-12-24 13:37:57 +0000
commitbc957015752bce79389e0092998a7b920d277670 (patch)
tree5a33a22281c203a0e036649c1279290e64005b27 /ale_linters
parent1e398202b9a63fcd91808a3205d3422b79435fa0 (diff)
downloadale-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')
-rw-r--r--ale_linters/python/pylsp.vim14
-rw-r--r--ale_linters/python/pyright.vim14
2 files changed, 28 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',
diff --git a/ale_linters/python/pyright.vim b/ale_linters/python/pyright.vim
index 422ecd61..5ce46600 100644
--- a/ale_linters/python/pyright.vim
+++ b/ale_linters/python/pyright.vim
@@ -32,10 +32,24 @@ function! ale_linters#python#pyright#GetConfig(buffer) abort
return l:config
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#pyright#GetCwd(buffer) abort
+ let l:fake_linter = {
+ \ 'name': 'pyright',
+ \ '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
+
call ale#linter#Define('python', {
\ 'name': 'pyright',
\ 'lsp': 'stdio',
\ 'executable': {b -> ale#Var(b, 'python_pyright_executable')},
+\ 'cwd': function('ale_linters#python#pyright#GetCwd'),
\ 'command': '%e --stdio',
\ 'project_root': function('ale#python#FindProjectRoot'),
\ 'completion_filter': 'ale#completion#python#CompletionItemFilter',