LSP: Support LocationLink (#12231)

* support LocationLink in callbacks
* announce linkSupport in client capabilities
This commit is contained in:
Christian Clason
2020-05-02 15:21:07 +02:00
committed by GitHub
parent a6071ac04d
commit 2f42e4d0c8
2 changed files with 24 additions and 7 deletions

View File

@@ -644,6 +644,18 @@ function protocol.make_client_capabilities()
-- TODO(tjdevries): Implement this -- TODO(tjdevries): Implement this
contextSupport = false; contextSupport = false;
}; };
declaration = {
linkSupport = true;
};
definition = {
linkSupport = true;
};
implementation = {
linkSupport = true;
};
typeDefinition = {
linkSupport = true;
};
hover = { hover = {
dynamicRegistration = false; dynamicRegistration = false;
contentFormat = { protocol.MarkupKind.Markdown; protocol.MarkupKind.PlainText }; contentFormat = { protocol.MarkupKind.Markdown; protocol.MarkupKind.PlainText };

View File

@@ -424,8 +424,10 @@ function M.make_floating_popup_options(width, height, opts)
end end
function M.jump_to_location(location) function M.jump_to_location(location)
if location.uri == nil then return end -- location may be Location or LocationLink
local bufnr = vim.uri_to_bufnr(location.uri) local uri = location.uri or location.targetUri
if uri == nil then return end
local bufnr = vim.uri_to_bufnr(uri)
-- Save position in jumplist -- Save position in jumplist
vim.cmd "normal! m'" vim.cmd "normal! m'"
@@ -436,8 +438,9 @@ function M.jump_to_location(location)
--- Jump to new location --- Jump to new location
api.nvim_set_current_buf(bufnr) api.nvim_set_current_buf(bufnr)
local row = location.range.start.line local range = location.range or location.targetSelectionRange
local col = location.range.start.character local row = range.start.line
local col = range.start.character
local line = api.nvim_buf_get_lines(0, row, row+1, true)[1] local line = api.nvim_buf_get_lines(0, row, row+1, true)[1]
col = vim.str_byteindex(line, col) col = vim.str_byteindex(line, col)
api.nvim_win_set_cursor(0, {row + 1, col}) api.nvim_win_set_cursor(0, {row + 1, col})
@@ -876,9 +879,11 @@ function M.locations_to_items(locations)
end; end;
}) })
for _, d in ipairs(locations) do for _, d in ipairs(locations) do
local start = d.range.start -- locations may be Location or LocationLink
local fname = assert(vim.uri_to_fname(d.uri)) local uri = d.uri or d.targetUri
table.insert(grouped[fname], {start = start}) local fname = assert(vim.uri_to_fname(uri))
local range = d.range or d.targetSelectionRange
table.insert(grouped[fname], {start = range.start})
end end