From 1f558f8d09603c425096ed1c5c5d8fcf70153310 Mon Sep 17 00:00:00 2001 From: tris203 Date: Thu, 19 Mar 2026 17:50:40 +0000 Subject: [PATCH] fix(lsp): improve diagnostics handling and comments - Add TODO comments for aggregating diagnostics from all pull namespaces and for clearing diagnostics when an empty array is received, referencing the LSP specification. - Update diagnostics refresh logic to safely access previousResultId, preventing potential nil errors. --- runtime/lua/vim/lsp/buf.lua | 1 + runtime/lua/vim/lsp/diagnostic.lua | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/runtime/lua/vim/lsp/buf.lua b/runtime/lua/vim/lsp/buf.lua index 1d99afd39a..14bbb279f1 100644 --- a/runtime/lua/vim/lsp/buf.lua +++ b/runtime/lua/vim/lsp/buf.lua @@ -1365,6 +1365,7 @@ function M.code_action(opts) params.context = context else local ns_push = lsp.diagnostic.get_namespace(client.id, false) + -- TODO(tris203): should we aggregate diagnostics from all the possible pull namespaces? local ns_pull = lsp.diagnostic.get_namespace(client.id, true) local diagnostics = {} local lnum = api.nvim_win_get_cursor(0)[1] - 1 diff --git a/runtime/lua/vim/lsp/diagnostic.lua b/runtime/lua/vim/lsp/diagnostic.lua index 1a17da9e03..4f6a2a346c 100644 --- a/runtime/lua/vim/lsp/diagnostic.lua +++ b/runtime/lua/vim/lsp/diagnostic.lua @@ -261,6 +261,8 @@ end ---@param params lsp.PublishDiagnosticsParams ---@param ctx lsp.HandlerContext function M.on_publish_diagnostics(_, params, ctx) + -- TODO(tris203): if empty array then clear diags + -- https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_publishDiagnostics handle_diagnostics(params.uri, ctx.client_id, params.diagnostics, false) end @@ -396,7 +398,9 @@ function M._refresh(bufnr, client_id, only_visible) local params = { identifier = cap.identifier, textDocument = util.make_text_document_params(bufnr), - previousResultId = bufstate.client_result_id[key], + previousResultId = bufstate + and bufstate.client_result_id + and bufstate.client_result_id[key], } client:request(method, params, nil, bufnr) end)