fix(lsp): clear lsp client diagnostics (#29050)

Problem: When an lsp client is stopped, the client will
only clear the diagnostics for the attached buffers but
not the unattached buffers.
Solution: Reset the diagnostics for the whole namespace rather than
for only the attached buffers.
This commit is contained in:
crwebb85 2024-05-30 02:59:23 -04:00 committed by GitHub
parent 40679c764a
commit 025c874415
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -391,8 +391,8 @@ end
local function on_client_exit(code, signal, client_id) local function on_client_exit(code, signal, client_id)
local client = all_clients[client_id] local client = all_clients[client_id]
for bufnr in pairs(client.attached_buffers) do vim.schedule(function()
vim.schedule(function() for bufnr in pairs(client.attached_buffers) do
if client and client.attached_buffers[bufnr] then if client and client.attached_buffers[bufnr] then
api.nvim_exec_autocmds('LspDetach', { api.nvim_exec_autocmds('LspDetach', {
buffer = bufnr, buffer = bufnr,
@ -401,15 +401,16 @@ local function on_client_exit(code, signal, client_id)
}) })
end end
local namespace = vim.lsp.diagnostic.get_namespace(client_id)
vim.diagnostic.reset(namespace, bufnr)
client.attached_buffers[bufnr] = nil client.attached_buffers[bufnr] = nil
if #lsp.get_clients({ bufnr = bufnr, _uninitialized = true }) == 0 then if #lsp.get_clients({ bufnr = bufnr, _uninitialized = true }) == 0 then
reset_defaults(bufnr) reset_defaults(bufnr)
end end
end) end
end
local namespace = vim.lsp.diagnostic.get_namespace(client_id)
vim.diagnostic.reset(namespace)
end)
local name = client.name or 'unknown' local name = client.name or 'unknown'