aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/lsp/handlers.lua
diff options
context:
space:
mode:
authorYinzuo Jiang <jiangyinzuo@foxmail.com>2024-04-20 21:40:01 +0800
committerGitHub <noreply@github.com>2024-04-20 15:40:01 +0200
commitf190f758ac58d9cc955368e047b070e0a2261033 (patch)
tree01b942694411b6d2852cff8a9123068ebe27a7ad /runtime/lua/vim/lsp/handlers.lua
parentfd085d90820149caecf213b299f19e46305043ee (diff)
downloadrneovim-f190f758ac58d9cc955368e047b070e0a2261033.tar.gz
rneovim-f190f758ac58d9cc955368e047b070e0a2261033.tar.bz2
rneovim-f190f758ac58d9cc955368e047b070e0a2261033.zip
feat(lsp): add vim.lsp.buf.subtypes(), vim.lsp.buf.supertypes() (#28388)
Co-authored-by: Mathias Fußenegger <mfussenegger@users.noreply.github.com> Co-authored-by: Maria José Solano <majosolano99@gmail.com>
Diffstat (limited to 'runtime/lua/vim/lsp/handlers.lua')
-rw-r--r--runtime/lua/vim/lsp/handlers.lua39
1 files changed, 39 insertions, 0 deletions
diff --git a/runtime/lua/vim/lsp/handlers.lua b/runtime/lua/vim/lsp/handlers.lua
index 1c5291e7fd..a15096fdad 100644
--- a/runtime/lua/vim/lsp/handlers.lua
+++ b/runtime/lua/vim/lsp/handlers.lua
@@ -565,6 +565,45 @@ M[ms.callHierarchy_incomingCalls] = make_call_hierarchy_handler('from')
--- @see # https://microsoft.github.io/language-server-protocol/specifications/specification-current/#callHierarchy_outgoingCalls
M[ms.callHierarchy_outgoingCalls] = make_call_hierarchy_handler('to')
+--- Displays type hierarchy in the quickfix window.
+local function make_type_hierarchy_handler()
+ --- @param result lsp.TypeHierarchyItem[]
+ return function(_, result, ctx, _)
+ if not result then
+ return
+ end
+ local function format_item(item)
+ if not item.detail or #item.detail == 0 then
+ return item.name
+ end
+ return string.format('%s %s', item.name, item.detail)
+ end
+ local client = assert(vim.lsp.get_client_by_id(ctx.client_id))
+ local items = {}
+ for _, type_hierarchy_item in pairs(result) do
+ local col = util._get_line_byte_from_position(
+ ctx.bufnr,
+ type_hierarchy_item.range.start,
+ client.offset_encoding
+ )
+ table.insert(items, {
+ filename = assert(vim.uri_to_fname(type_hierarchy_item.uri)),
+ text = format_item(type_hierarchy_item),
+ lnum = type_hierarchy_item.range.start.line + 1,
+ col = col + 1,
+ })
+ end
+ vim.fn.setqflist({}, ' ', { title = 'LSP type hierarchy', items = items })
+ api.nvim_command('botright copen')
+ end
+end
+
+--- @see # https://microsoft.github.io/language-server-protocol/specifications/specification-current/#typeHierarchy_incomingCalls
+M[ms.typeHierarchy_subtypes] = make_type_hierarchy_handler()
+
+--- @see # https://microsoft.github.io/language-server-protocol/specifications/specification-current/#typeHierarchy_outgoingCalls
+M[ms.typeHierarchy_supertypes] = make_type_hierarchy_handler()
+
--- @see: https://microsoft.github.io/language-server-protocol/specifications/specification-current/#window_logMessage
--- @param result lsp.LogMessageParams
M[ms.window_logMessage] = function(_, result, ctx, _)