mirror of
https://github.com/neovim/neovim
synced 2025-07-18 10:11:50 +00:00
feat: aggregate code actions from all clients (#15121)
This commit is contained in:
@ -422,6 +422,21 @@ function M.clear_references()
|
|||||||
util.buf_clear_references()
|
util.buf_clear_references()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Requests code actions from all clients and calls the handler exactly once
|
||||||
|
--- with all aggregated results
|
||||||
|
--@private
|
||||||
|
local function code_action_request(params)
|
||||||
|
local bufnr = vim.api.nvim_get_current_buf()
|
||||||
|
local method = 'textDocument/codeAction'
|
||||||
|
vim.lsp.buf_request_all(bufnr, method, params, function(results)
|
||||||
|
local actions = {}
|
||||||
|
for _, r in pairs(results) do
|
||||||
|
vim.list_extend(actions, r.result or {})
|
||||||
|
end
|
||||||
|
vim.lsp.handlers[method](nil, method, actions, nil, bufnr)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
--- Selects a code action from the input list that is available at the current
|
--- Selects a code action from the input list that is available at the current
|
||||||
--- cursor position.
|
--- cursor position.
|
||||||
--
|
--
|
||||||
@ -432,7 +447,7 @@ function M.code_action(context)
|
|||||||
context = context or { diagnostics = vim.lsp.diagnostic.get_line_diagnostics() }
|
context = context or { diagnostics = vim.lsp.diagnostic.get_line_diagnostics() }
|
||||||
local params = util.make_range_params()
|
local params = util.make_range_params()
|
||||||
params.context = context
|
params.context = context
|
||||||
request('textDocument/codeAction', params)
|
code_action_request(params)
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Performs |vim.lsp.buf.code_action()| for a given range.
|
--- Performs |vim.lsp.buf.code_action()| for a given range.
|
||||||
@ -447,7 +462,7 @@ function M.range_code_action(context, start_pos, end_pos)
|
|||||||
context = context or { diagnostics = vim.lsp.diagnostic.get_line_diagnostics() }
|
context = context or { diagnostics = vim.lsp.diagnostic.get_line_diagnostics() }
|
||||||
local params = util.make_given_range_params(start_pos, end_pos)
|
local params = util.make_given_range_params(start_pos, end_pos)
|
||||||
params.context = context
|
params.context = context
|
||||||
request('textDocument/codeAction', params)
|
code_action_request(params)
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Executes an LSP server command.
|
--- Executes an LSP server command.
|
||||||
|
Reference in New Issue
Block a user