summaryrefslogtreecommitdiff
path: root/autoload
diff options
context:
space:
mode:
authorDalius Dobravolskas <daliusd@wix.com>2021-09-16 16:05:38 +0300
committerGitHub <noreply@github.com>2021-09-16 22:05:38 +0900
commitdca56dd77267d6cedc3785f1359dd96d1f4b3fa9 (patch)
treee41aa1cb6777ab6eb15b16982f0ddb74a27cd01c /autoload
parent31349f208bf186bab90e51fddc09493fe28a19d8 (diff)
downloadale-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.vim10
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 = [