diff options
author | Dalius Dobravolskas <daliusd@wix.com> | 2021-09-16 16:05:38 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-16 22:05:38 +0900 |
commit | dca56dd77267d6cedc3785f1359dd96d1f4b3fa9 (patch) | |
tree | e41aa1cb6777ab6eb15b16982f0ddb74a27cd01c /autoload | |
parent | 31349f208bf186bab90e51fddc09493fe28a19d8 (diff) | |
download | ale-dca56dd77267d6cedc3785f1359dd96d1f4b3fa9.zip |
ALECodeAction fix: check linter name when searching for nearest error. (#3901)
It is easier to explain this fix with an example:
* tsserver and LSPs ask for error information when you want to fix
error. tsserver `ts@getCodeFixes` command needs tsserver error code.
* now let's imagine that user has eslint and tsserver in use. Sometimes
both can report same error in different way.
* Now there is no guarantee which error will come first and if eslint
error comes first then tsserver will not return code fixes as we are
passing wrong error code to it.
This fix will return proper error code based on linter.
Diffstat (limited to 'autoload')
-rw-r--r-- | autoload/ale/codefix.vim | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/autoload/ale/codefix.vim b/autoload/ale/codefix.vim index 4a78063b..09ee34cb 100644 --- a/autoload/ale/codefix.vim +++ b/autoload/ale/codefix.vim @@ -299,7 +299,7 @@ function! ale#codefix#HandleLSPResponse(conn_id, response) abort endif endfunction -function! s:FindError(buffer, line, column, end_line, end_column) abort +function! s:FindError(buffer, line, column, end_line, end_column, linter_name) abort let l:nearest_error = v:null if a:line == a:end_line @@ -308,7 +308,9 @@ function! s:FindError(buffer, line, column, end_line, end_column) abort let l:nearest_error_diff = -1 for l:error in get(g:ale_buffer_info[a:buffer], 'loclist', []) - if has_key(l:error, 'code') && l:error.lnum == a:line + if has_key(l:error, 'code') + \ && (a:linter_name is v:null || l:error.linter_name is# a:linter_name) + \ && l:error.lnum == a:line let l:diff = abs(l:error.col - a:column) if l:nearest_error_diff == -1 || l:diff < l:nearest_error_diff @@ -341,7 +343,7 @@ function! s:OnReady( if a:linter.lsp is# 'tsserver' let l:nearest_error = - \ s:FindError(l:buffer, a:line, a:column, a:end_line, a:end_column) + \ s:FindError(l:buffer, a:line, a:column, a:end_line, a:end_column, a:linter.lsp) if l:nearest_error isnot v:null let l:message = ale#lsp#tsserver_message#GetCodeFixes( @@ -368,7 +370,7 @@ function! s:OnReady( let l:diagnostics = [] let l:nearest_error = - \ s:FindError(l:buffer, a:line, a:column, a:end_line, a:end_column) + \ s:FindError(l:buffer, a:line, a:column, a:end_line, a:end_column, v:null) if l:nearest_error isnot v:null let l:diagnostics = [ |