fix(lsp): suppress ContentModified errors from UI (#16904)

Fixes https://github.com/neovim/neovim/issues/16900

If clients receive a ContentModified error, it generally should not
show it in the UI for the end-user. Clients can resend the request if
they know how to do so.

https://microsoft.github.io/language-server-protocol/specifications/specification-current/#implementationConsiderations
This commit is contained in:
Sam McCall 2022-01-04 18:28:13 +01:00 committed by GitHub
parent 3fd454bd4a
commit d6f0c9539c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -439,14 +439,20 @@ for k, fn in pairs(M) do
})
if err then
local client = vim.lsp.get_client_by_id(ctx.client_id)
local client_name = client and client.name or string.format("client_id=%d", ctx.client_id)
-- LSP spec:
-- interface ResponseError:
-- code: integer;
-- message: string;
-- data?: string | number | boolean | array | object | null;
return err_message(client_name .. ': ' .. tostring(err.code) .. ': ' .. err.message)
-- Per LSP, don't show ContentModified error to the user.
if err.code ~= protocol.ErrorCodes.ContentModified then
local client = vim.lsp.get_client_by_id(ctx.client_id)
local client_name = client and client.name or string.format("client_id=%d", ctx.client_id)
err_message(client_name .. ': ' .. tostring(err.code) .. ': ' .. err.message)
end
return
end
return fn(err, result, ctx, config)