mirror of
https://github.com/neovim/neovim.git
synced 2024-12-25 05:35:10 -07:00
fix(lsp): expose ContentModified error code to callbacks (#15262)
This commit is contained in:
parent
5cbd0fba00
commit
3f09732195
@ -466,15 +466,12 @@ local function start(cmd, cmd_args, dispatchers, extra_spawn_params)
|
|||||||
-- We sent a number, so we expect a number.
|
-- We sent a number, so we expect a number.
|
||||||
local result_id = tonumber(decoded.id)
|
local result_id = tonumber(decoded.id)
|
||||||
|
|
||||||
-- Do not surface RequestCancelled or ContentModified to users, it is RPC-internal.
|
-- Do not surface RequestCancelled to users, it is RPC-internal.
|
||||||
if decoded.error then
|
if decoded.error then
|
||||||
local mute_error = false
|
local mute_error = false
|
||||||
if decoded.error.code == protocol.ErrorCodes.RequestCancelled then
|
if decoded.error.code == protocol.ErrorCodes.RequestCancelled then
|
||||||
local _ = log.debug() and log.debug("Received cancellation ack", decoded)
|
local _ = log.debug() and log.debug("Received cancellation ack", decoded)
|
||||||
mute_error = true
|
mute_error = true
|
||||||
elseif decoded.error.code == protocol.ErrorCodes.ContentModified then
|
|
||||||
local _ = log.debug() and log.debug("Received content modified ack", decoded)
|
|
||||||
mute_error = true
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if mute_error then
|
if mute_error then
|
||||||
|
@ -246,6 +246,35 @@ function tests.capabilities_for_client_supports_method()
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function tests.check_forward_request_cancelled()
|
||||||
|
skeleton {
|
||||||
|
on_init = function(_)
|
||||||
|
return { capabilities = {} }
|
||||||
|
end;
|
||||||
|
body = function()
|
||||||
|
expect_request("error_code_test", function()
|
||||||
|
return {code = -32800}, nil
|
||||||
|
end)
|
||||||
|
notify('finish')
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
function tests.check_forward_content_modified()
|
||||||
|
skeleton {
|
||||||
|
on_init = function(_)
|
||||||
|
return { capabilities = {} }
|
||||||
|
end;
|
||||||
|
body = function()
|
||||||
|
expect_request("error_code_test", function()
|
||||||
|
return {code = -32801}, nil
|
||||||
|
end)
|
||||||
|
expect_notification('finish')
|
||||||
|
notify('finish')
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
function tests.basic_finish()
|
function tests.basic_finish()
|
||||||
skeleton {
|
skeleton {
|
||||||
on_init = function(params)
|
on_init = function(params)
|
||||||
|
@ -480,6 +480,54 @@ describe('LSP', function()
|
|||||||
}
|
}
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('should not forward RequestCancelled to callback', function()
|
||||||
|
local expected_handlers = {
|
||||||
|
{NIL, "finish", {}, 1};
|
||||||
|
}
|
||||||
|
local client
|
||||||
|
test_rpc_server {
|
||||||
|
test_name = "check_forward_request_cancelled";
|
||||||
|
on_init = function(_client)
|
||||||
|
_client.request("error_code_test")
|
||||||
|
client = _client
|
||||||
|
end;
|
||||||
|
on_exit = function(code, signal)
|
||||||
|
eq(0, code, "exit code", fake_lsp_logfile)
|
||||||
|
eq(0, signal, "exit signal", fake_lsp_logfile)
|
||||||
|
eq(0, #expected_handlers, "did not call expected handler")
|
||||||
|
end;
|
||||||
|
on_handler = function(err, method, ...)
|
||||||
|
eq(table.remove(expected_handlers), {err, method, ...}, "expected handler")
|
||||||
|
if method == 'finish' then client.stop() end
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('should forward ContentModified to callback', function()
|
||||||
|
local expected_handlers = {
|
||||||
|
{NIL, "finish", {}, 1};
|
||||||
|
{{code = -32801}, "error_code_test", NIL, 1, NIL};
|
||||||
|
}
|
||||||
|
local client
|
||||||
|
test_rpc_server {
|
||||||
|
test_name = "check_forward_content_modified";
|
||||||
|
on_init = function(_client)
|
||||||
|
_client.request("error_code_test")
|
||||||
|
client = _client
|
||||||
|
end;
|
||||||
|
on_exit = function(code, signal)
|
||||||
|
eq(0, code, "exit code", fake_lsp_logfile)
|
||||||
|
eq(0, signal, "exit signal", fake_lsp_logfile)
|
||||||
|
eq(0, #expected_handlers, "did not call expected handler")
|
||||||
|
end;
|
||||||
|
on_handler = function(err, method, ...)
|
||||||
|
eq(table.remove(expected_handlers), {err, method, ...}, "expected handler")
|
||||||
|
if method == 'error_code_test' then client.notify("finish") end
|
||||||
|
if method == 'finish' then client.stop() end
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
end)
|
||||||
|
|
||||||
it('should not send didOpen if the buffer closes before init', function()
|
it('should not send didOpen if the buffer closes before init', function()
|
||||||
local expected_handlers = {
|
local expected_handlers = {
|
||||||
{NIL, {}, {method="shutdown", client_id=1}};
|
{NIL, {}, {method="shutdown", client_id=1}};
|
||||||
|
Loading…
Reference in New Issue
Block a user