Handle Neovim LSP diagnostics via ALE's functions

This commit is contained in:
w0rp
2025-03-17 18:16:00 +00:00
parent 8ee20eca4b
commit 338f3eeb73
2 changed files with 28 additions and 9 deletions

View File

@@ -488,12 +488,6 @@ function! ale#lsp_linter#StartLSP(buffer, linter, Callback) abort
endfunction
function! s:CheckWithLSP(linter, details) abort
if g:ale_use_neovim_lsp_api && a:linter.lsp isnot# 'tsserver'
" If running an LSP client via Neovim's API then Neovim will
" internally track buffers for changes for us, and we can stop here.
return
endif
let l:buffer = a:details.buffer
let l:info = get(g:ale_buffer_info, l:buffer)
@@ -503,13 +497,19 @@ function! s:CheckWithLSP(linter, details) abort
let l:id = a:details.connection_id
" Remember the linter this connection is for.
let s:lsp_linter_map[l:id] = a:linter
if g:ale_use_neovim_lsp_api && a:linter.lsp isnot# 'tsserver'
" If running an LSP client via Neovim's API then Neovim will
" internally track buffers for changes for us, and we can stop here.
return
endif
" Register a callback now for handling errors now.
let l:Callback = function('ale#lsp_linter#HandleLSPResponse')
call ale#lsp#RegisterCallback(l:id, l:Callback)
" Remember the linter this connection is for.
let s:lsp_linter_map[l:id] = a:linter
if a:linter.lsp is# 'tsserver'
let l:message = ale#lsp#tsserver_message#Geterr(l:buffer)
let l:notified = ale#lsp#Send(l:id, l:message) != 0

View File

@@ -8,7 +8,26 @@ module.start = function(config)
config.init_options[true] = nil
end
config.handlers = {
-- Override Neovim's handling of diagnostics to run through ALE's
-- functions so all of the functionality in ALE works.
["textDocument/publishDiagnostics"] = function(err, result, _, _)
if err == nil then
vim.fn["ale#lsp_linter#HandleLSPResponse"](config.name, {
jsonrpc = "2.0",
method = "textDocument/publishDiagnostics",
params = result
})
end
end
}
config.on_init = function(_, _)
-- Neovim calls `on_init` before marking a client as active, meaning
-- we can't get a client via get_client_by_id until after `on_init` is
-- called. By deferring execution of calling the init callbacks we
-- can only call them after the client becomes available, which
-- will make notifications for configuration changes work, etc.
vim.defer_fn(function()
vim.fn["ale#lsp#CallInitCallbacks"](config.name)
end, 0)