From 69d4143e7baab15bb02ad8e4b48511a41cfdcd95 Mon Sep 17 00:00:00 2001 From: Mathias Fussenegger Date: Fri, 30 Apr 2021 20:04:13 +0200 Subject: lsp: Allow decoded.result to be `false` Some servers might respond to `workspace/executeCommand` requests with a boolean result and that could be `false`. A `false` result should be allowed and not trigger the `on_error` handler: -- Invalid server message on_error(client_errors.INVALID_SERVER_MESSAGE, decoded) Concrete example where this occurred is with eclipse.jdt.ls: vim.lsp.buf_request( 0, 'workspace/executeCommand', { command = 'java.project.isTestFile', arguments = { vim.uri_from_bufnr(0), }, }, function(err, _, resp) print(vim.inspect(err), vim.inspect(resp)) end ) --- runtime/lua/vim/lsp/rpc.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'runtime/lua/vim') diff --git a/runtime/lua/vim/lsp/rpc.lua b/runtime/lua/vim/lsp/rpc.lua index 1aa8326514..0cabd1a0d4 100644 --- a/runtime/lua/vim/lsp/rpc.lua +++ b/runtime/lua/vim/lsp/rpc.lua @@ -518,7 +518,7 @@ local function start(cmd, cmd_args, dispatchers, extra_spawn_params) send_response(decoded.id, err, result) end) -- This works because we are expecting vim.NIL here - elseif decoded.id and (decoded.result or decoded.error) then + elseif decoded.id and (decoded.result ~= vim.NIL or decoded.error ~= vim.NIL) then -- Server Result decoded.error = convert_NIL(decoded.error) decoded.result = convert_NIL(decoded.result) -- cgit