mirror of
https://github.com/neovim/neovim.git
synced 2025-12-07 15:14:04 +00:00
feat(lsp): fallback to code-action command on resolve failure (#25464)
The haskell-language-server supports resolve only for a subset of code
actions. For many code actions trying to resolve the `edit` property
results in an error, but the unresolved action already contains a
command that can be executed without issue.
The protocol specification is unfortunately a bit vague about this,
and what the haskell-language-server does seems to be valid.
Example:
newtype Dummy = Dummy Int
instance Num Dummy where
Triggering code actions on "Num Dummy" and choosing "Add placeholders
for all missing methods" resulted in:
-32601: No plugin enabled for SMethod_CodeActionResolve, potentially available: explicit-fields, importLens, hlint, overloaded-record-dot
With this change it will insert the missing methods:
instance Num Dummy where
(+) = _
(-) = _
(*) = _
negate = _
abs = _
signum = _
fromInteger = _
This commit is contained in:
committed by
GitHub
parent
09a17f91d0
commit
4a09c178a1
@@ -652,7 +652,7 @@ local function on_code_action_results(results, ctx, options)
|
||||
-- arguments?: any[]
|
||||
--
|
||||
---@type lsp.Client
|
||||
local client = vim.lsp.get_client_by_id(action_tuple[1])
|
||||
local client = assert(vim.lsp.get_client_by_id(action_tuple[1]))
|
||||
local action = action_tuple[2]
|
||||
|
||||
local reg = client.dynamic_capabilities:get(ms.textDocument_codeAction, { bufnr = ctx.bufnr })
|
||||
@@ -663,10 +663,14 @@ local function on_code_action_results(results, ctx, options)
|
||||
if not action.edit and client and supports_resolve then
|
||||
client.request(ms.codeAction_resolve, action, function(err, resolved_action)
|
||||
if err then
|
||||
vim.notify(err.code .. ': ' .. err.message, vim.log.levels.ERROR)
|
||||
return
|
||||
if action.command then
|
||||
apply_action(action, client)
|
||||
else
|
||||
vim.notify(err.code .. ': ' .. err.message, vim.log.levels.ERROR)
|
||||
end
|
||||
else
|
||||
apply_action(resolved_action, client)
|
||||
end
|
||||
apply_action(resolved_action, client)
|
||||
end, ctx.bufnr)
|
||||
else
|
||||
apply_action(action, client)
|
||||
|
||||
Reference in New Issue
Block a user