From 187579fe197ddd844bc0b0979e7f53c646f4235e Mon Sep 17 00:00:00 2001 From: Mathias Fussenegger Date: Thu, 11 Mar 2021 23:49:59 +0100 Subject: feat(lsp): include original request params in handler ctx This is mostly motivated by https://github.com/neovim/neovim/issues/12326 Client side commands might need to access the original request parameters. Currently this is already possible by using closures with `vim.lsp.buf_request`, but the global handlers so far couldn't access the request parameters. --- test/functional/plugin/lsp_spec.lua | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'test/functional/plugin/lsp_spec.lua') diff --git a/test/functional/plugin/lsp_spec.lua b/test/functional/plugin/lsp_spec.lua index 6ad37110c7..7319a02533 100644 --- a/test/functional/plugin/lsp_spec.lua +++ b/test/functional/plugin/lsp_spec.lua @@ -2353,6 +2353,10 @@ describe('LSP', function() eq(0, signal, "exit signal", fake_lsp_logfile) end; on_handler = function(err, result, ctx) + -- Don't compare & assert params, they're not relevant for the testcase + -- This allows us to be lazy and avoid declaring them + ctx.params = nil + eq(table.remove(test.expected_handlers), {err, result, ctx}, "expected handler") if ctx.method == 'start' then exec_lua("vim.lsp.buf.rename()") -- cgit From 6c03601e3adb4c3c4d47f148df8df20401b88677 Mon Sep 17 00:00:00 2001 From: Mathias Fussenegger Date: Fri, 12 Mar 2021 10:19:21 +0100 Subject: feat(lsp): add a registry for client side code action commands This builds on https://github.com/neovim/neovim/pull/14112 and closes https://github.com/neovim/neovim/issues/12326 --- test/functional/plugin/lsp_spec.lua | 38 +++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'test/functional/plugin/lsp_spec.lua') diff --git a/test/functional/plugin/lsp_spec.lua b/test/functional/plugin/lsp_spec.lua index 7319a02533..27f2d2536f 100644 --- a/test/functional/plugin/lsp_spec.lua +++ b/test/functional/plugin/lsp_spec.lua @@ -2374,4 +2374,42 @@ describe('LSP', function() end end) + describe('vim.lsp.buf.code_action', function() + it('Calls client side command if available', function() + eq(1, exec_lua [[ + local dummy_calls = 0 + vim.lsp.commands.dummy = function() + dummy_calls = dummy_calls + 1 + end + local actions = { + { + title = 'Dummy command', + command = 'dummy', + }, + } + -- inputlist would require input and block the test; + vim.fn.inputlist = function() + return 1 + end + local params = {} + local handler = require'vim.lsp.handlers'['textDocument/codeAction'] + handler(nil, actions, { method = 'textDocument/codeAction', params = params }, nil) + return dummy_calls + ]]) + end) + end) + describe('vim.lsp.commands', function() + it('Accepts only string keys', function() + matches( + '.*The key for commands in `vim.lsp.commands` must be a string', + pcall_err(exec_lua, 'vim.lsp.commands[1] = function() end') + ) + end) + it('Accepts only function values', function() + matches( + '.*Command added to `vim.lsp.commands` must be a function', + pcall_err(exec_lua, 'vim.lsp.commands.dummy = 10') + ) + end) + end) end) -- cgit