aboutsummaryrefslogtreecommitdiff
path: root/test/functional/plugin/lsp_spec.lua
diff options
context:
space:
mode:
authorMathias Fußenegger <mfussenegger@users.noreply.github.com>2024-10-20 23:40:44 +0200
committerGitHub <noreply@github.com>2024-10-20 23:40:44 +0200
commit0083e03d6fa7586d0d6360b40b52b0cab0d2e7ba (patch)
tree4b81b12101025632701174e6de58d9079bf90064 /test/functional/plugin/lsp_spec.lua
parent9b8907d90508d7b66f025bbd1f5a48a78c5ce035 (diff)
downloadrneovim-0083e03d6fa7586d0d6360b40b52b0cab0d2e7ba.tar.gz
rneovim-0083e03d6fa7586d0d6360b40b52b0cab0d2e7ba.tar.bz2
rneovim-0083e03d6fa7586d0d6360b40b52b0cab0d2e7ba.zip
feat(lsp)!: support multiple clients in goto methods (#30877)
Relates to: - https://github.com/neovim/neovim/issues/30034 - https://github.com/neovim/neovim/issues/17712 - https://github.com/neovim/neovim/issues/16363 Closes: - https://github.com/neovim/neovim/issues/26936 (but only provides bufnr and method) - https://github.com/neovim/neovim/issues/22318 Might fix: https://github.com/neovim/neovim/issues/30737
Diffstat (limited to 'test/functional/plugin/lsp_spec.lua')
-rw-r--r--test/functional/plugin/lsp_spec.lua80
1 files changed, 80 insertions, 0 deletions
diff --git a/test/functional/plugin/lsp_spec.lua b/test/functional/plugin/lsp_spec.lua
index 6cd433b975..eaca413e89 100644
--- a/test/functional/plugin/lsp_spec.lua
+++ b/test/functional/plugin/lsp_spec.lua
@@ -5076,6 +5076,86 @@ describe('LSP', function()
end)
end)
+ describe('lsp.buf.definition', function()
+ it('jumps to single location', function()
+ exec_lua(create_server_definition)
+ local result = exec_lua(function()
+ local bufnr = vim.api.nvim_get_current_buf()
+ local server = _G._create_server({
+ capabilities = {
+ definitionProvider = true,
+ },
+ handlers = {
+ ['textDocument/definition'] = function(_, _, callback)
+ local location = {
+ range = {
+ start = { line = 0, character = 0 },
+ ['end'] = { line = 0, character = 0 },
+ },
+ uri = vim.uri_from_bufnr(bufnr),
+ }
+ callback(nil, location)
+ end,
+ },
+ })
+ local win = vim.api.nvim_get_current_win()
+ vim.api.nvim_buf_set_lines(bufnr, 0, -1, true, { 'local x = 10', '', 'print(x)' })
+ vim.api.nvim_win_set_cursor(win, { 3, 6 })
+ local client_id = assert(vim.lsp.start({ name = 'dummy', cmd = server.cmd }))
+ vim.lsp.buf.definition()
+ vim.lsp.stop_client(client_id)
+ return {
+ cursor = vim.api.nvim_win_get_cursor(win),
+ messages = server.messages,
+ }
+ end)
+ eq('textDocument/definition', result.messages[3].method)
+ eq({ 1, 0 }, result.cursor)
+ end)
+ it('merges results from multiple servers', function()
+ exec_lua(create_server_definition)
+ local result = exec_lua(function()
+ local bufnr = vim.api.nvim_get_current_buf()
+ local function serveropts(character)
+ return {
+ capabilities = {
+ definitionProvider = true,
+ },
+ handlers = {
+ ['textDocument/definition'] = function(_, _, callback)
+ local location = {
+ range = {
+ start = { line = 0, character = character },
+ ['end'] = { line = 0, character = character },
+ },
+ uri = vim.uri_from_bufnr(bufnr),
+ }
+ callback(nil, location)
+ end,
+ },
+ }
+ end
+ local server1 = _G._create_server(serveropts(0))
+ local server2 = _G._create_server(serveropts(7))
+ local win = vim.api.nvim_get_current_win()
+ vim.api.nvim_buf_set_lines(bufnr, 0, -1, true, { 'local x = 10', '', 'print(x)' })
+ vim.api.nvim_win_set_cursor(win, { 3, 6 })
+ local client_id1 = assert(vim.lsp.start({ name = 'dummy', cmd = server1.cmd }))
+ local client_id2 = assert(vim.lsp.start({ name = 'dummy', cmd = server2.cmd }))
+ local response
+ vim.lsp.buf.definition({
+ on_list = function(r)
+ response = r
+ end,
+ })
+ vim.lsp.stop_client(client_id1)
+ vim.lsp.stop_client(client_id2)
+ return response
+ end)
+ eq(2, #result.items)
+ end)
+ end)
+
describe('vim.lsp.tagfunc', function()
before_each(function()
clear()