Mathias Fußenegger
2024-10-20 23:40:44 +02:00
committed by GitHub
parent 9b8907d905
commit 0083e03d6f
7 changed files with 169 additions and 81 deletions

View File

@@ -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()