mirror of
https://github.com/neovim/neovim.git
synced 2025-10-21 09:12:07 +00:00
fix(lsp): don't send foreign diagnostics to servers in buf.code_action (#29501)
`buf.code_action` always included diagnostics on a given line from all clients. Servers should only receive diagnostics they published, and in the exact same format they sent it. Should fix https://github.com/neovim/neovim/issues/29500
This commit is contained in:

committed by
GitHub

parent
32e128f209
commit
720b309c78
@@ -852,14 +852,10 @@ function M.code_action(opts)
|
||||
if opts.diagnostics or opts.only then
|
||||
opts = { options = opts }
|
||||
end
|
||||
local context = opts.context or {}
|
||||
local context = opts.context and vim.deepcopy(opts.context) or {}
|
||||
if not context.triggerKind then
|
||||
context.triggerKind = vim.lsp.protocol.CodeActionTriggerKind.Invoked
|
||||
end
|
||||
if not context.diagnostics then
|
||||
local bufnr = api.nvim_get_current_buf()
|
||||
context.diagnostics = vim.lsp.diagnostic.get_line_diagnostics(bufnr)
|
||||
end
|
||||
local mode = api.nvim_get_mode().mode
|
||||
local bufnr = api.nvim_get_current_buf()
|
||||
local win = api.nvim_get_current_win()
|
||||
@@ -901,6 +897,18 @@ function M.code_action(opts)
|
||||
else
|
||||
params = util.make_range_params(win, client.offset_encoding)
|
||||
end
|
||||
if not context.diagnostics then
|
||||
local ns_push = vim.lsp.diagnostic.get_namespace(client.id, false)
|
||||
local ns_pull = vim.lsp.diagnostic.get_namespace(client.id, true)
|
||||
local diagnostics = {}
|
||||
local lnum = api.nvim_win_get_cursor(0)[1] - 1
|
||||
vim.list_extend(diagnostics, vim.diagnostic.get(bufnr, { namespace = ns_pull, lnum = lnum }))
|
||||
vim.list_extend(diagnostics, vim.diagnostic.get(bufnr, { namespace = ns_push, lnum = lnum }))
|
||||
---@diagnostic disable-next-line: no-unknown
|
||||
context.diagnostics = vim.tbl_map(function(d)
|
||||
return d.user_data.lsp
|
||||
end, diagnostics)
|
||||
end
|
||||
params.context = context
|
||||
client.request(ms.textDocument_codeAction, params, on_result, bufnr)
|
||||
end
|
||||
|
Reference in New Issue
Block a user