aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathias Fußenegger <mfussenegger@users.noreply.github.com>2024-04-23 19:05:01 +0200
committerGitHub <noreply@github.com>2024-04-23 19:05:01 +0200
commitc81b7849a0f677164c01cf84ecfb25c1f47acf21 (patch)
tree31e11059634023a90d96d409ca8a5c3240b3fdbb
parent052498ed42780a76daea589d063cd8947a894673 (diff)
downloadrneovim-c81b7849a0f677164c01cf84ecfb25c1f47acf21.tar.gz
rneovim-c81b7849a0f677164c01cf84ecfb25c1f47acf21.tar.bz2
rneovim-c81b7849a0f677164c01cf84ecfb25c1f47acf21.zip
refactor(lsp): merge subtypes and supertypes into typehierarchy (#28467)
Both methods had pretty much the same documentation and shared the implementation.
-rw-r--r--runtime/doc/lsp.txt18
-rw-r--r--runtime/doc/news.txt2
-rw-r--r--runtime/lua/vim/lsp/buf.lua26
-rw-r--r--test/functional/plugin/lsp_spec.lua4
4 files changed, 19 insertions, 31 deletions
diff --git a/runtime/doc/lsp.txt b/runtime/doc/lsp.txt
index 42ed31a186..9385d92416 100644
--- a/runtime/doc/lsp.txt
+++ b/runtime/doc/lsp.txt
@@ -1431,22 +1431,20 @@ signature_help() *vim.lsp.buf.signature_help()*
Displays signature information about the symbol under the cursor in a
floating window.
-subtypes() *vim.lsp.buf.subtypes()*
- Lists all the subtypes of the symbol under the cursor in the |quickfix|
- window. If the symbol can resolve to multiple items, the user can pick one
- using |vim.ui.select()|.
-
-supertypes() *vim.lsp.buf.supertypes()*
- Lists all the supertypes of the symbol under the cursor in the |quickfix|
- window. If the symbol can resolve to multiple items, the user can pick one
- using |vim.ui.select()|.
-
type_definition({options}) *vim.lsp.buf.type_definition()*
Jumps to the definition of the type of the symbol under the cursor.
Parameters: ~
• {options} (`vim.lsp.LocationOpts?`) See |vim.lsp.LocationOpts|.
+typehierarchy({kind}) *vim.lsp.buf.typehierarchy()*
+ Lists all the subtypes or supertypes of the symbol under the cursor in the
+ |quickfix| window. If the symbol can resolve to multiple items, the user
+ can pick one using |vim.ui.select()|.
+
+ Parameters: ~
+ • {kind} (`"subtypes"|"supertypes"`)
+
workspace_symbol({query}, {options}) *vim.lsp.buf.workspace_symbol()*
Lists all symbols in the current workspace in the quickfix window.
diff --git a/runtime/doc/news.txt b/runtime/doc/news.txt
index 39a99a61d1..7d189d7df0 100644
--- a/runtime/doc/news.txt
+++ b/runtime/doc/news.txt
@@ -217,7 +217,7 @@ The following new APIs and features were added.
https://microsoft.github.io/language-server-protocol/specification/#textDocument_inlayHint
• Implemented pull diagnostic textDocument/diagnostic: |vim.lsp.diagnostic.on_diagnostic()|
https://microsoft.github.io/language-server-protocol/specification/#textDocument_diagnostic
- • Implemented LSP type hierarchy: |vim.lsp.buf.supertypes()| and |vim.lsp.buf.subtypes()|
+ • Implemented LSP type hierarchy: |vim.lsp.buf.typehierarchy()|
https://microsoft.github.io/language-server-protocol/specification/#textDocument_prepareTypeHierarchy
• |vim.lsp.status()| consumes the last progress messages as a string.
• LSP client now always saves and restores named buffer marks when applying
diff --git a/runtime/lua/vim/lsp/buf.lua b/runtime/lua/vim/lsp/buf.lua
index fa0cbab138..79c1aeb53d 100644
--- a/runtime/lua/vim/lsp/buf.lua
+++ b/runtime/lua/vim/lsp/buf.lua
@@ -495,11 +495,17 @@ function M.outgoing_calls()
call_hierarchy(ms.callHierarchy_outgoingCalls)
end
---- @param method string
-local function type_hierarchy(method)
+--- Lists all the subtypes or supertypes of the symbol under the
+--- cursor in the |quickfix| window. If the symbol can resolve to
+--- multiple items, the user can pick one using |vim.ui.select()|.
+---@param kind "subtypes"|"supertypes"
+function M.typehierarchy(kind)
+ local method = kind == 'subtypes' and ms.typeHierarchy_subtypes or ms.typeHierarchy_supertypes
+
--- Merge results from multiple clients into a single table. Client-ID is preserved.
---
--- @param results table<integer, {error: lsp.ResponseError, result: lsp.TypeHierarchyItem[]?}>
+ --- @return [integer, lsp.TypeHierarchyItem][]
local function merge_results(results)
local merged_results = {}
for client_id, client_result in pairs(results) do
@@ -525,11 +531,9 @@ local function type_hierarchy(method)
end
if #merged_results == 1 then
- --- @type {integer, lsp.TypeHierarchyItem}
local item = merged_results[1]
local client = vim.lsp.get_client_by_id(item[1])
if client then
- --- @type lsp.TypeHierarchyItem
client.request(method, { item = item[2] }, nil, bufnr)
else
vim.notify(
@@ -565,20 +569,6 @@ local function type_hierarchy(method)
end)
end
---- Lists all the subtypes of the symbol under the
---- cursor in the |quickfix| window. If the symbol can resolve to
---- multiple items, the user can pick one using |vim.ui.select()|.
-function M.subtypes()
- type_hierarchy(ms.typeHierarchy_subtypes)
-end
-
---- Lists all the supertypes of the symbol under the
---- cursor in the |quickfix| window. If the symbol can resolve to
---- multiple items, the user can pick one using |vim.ui.select()|.
-function M.supertypes()
- type_hierarchy(ms.typeHierarchy_supertypes)
-end
-
--- List workspace folders.
---
function M.list_workspace_folders()
diff --git a/test/functional/plugin/lsp_spec.lua b/test/functional/plugin/lsp_spec.lua
index 8d3e141944..0432d3fc94 100644
--- a/test/functional/plugin/lsp_spec.lua
+++ b/test/functional/plugin/lsp_spec.lua
@@ -3463,7 +3463,7 @@ describe('LSP', function()
end)
end)
- describe('vim.lsp.buf.subtypes', function()
+ describe('vim.lsp.buf.typehierarchy subtypes', function()
it('does nothing for an empty response', function()
local qflist_count = exec_lua([=[
require'vim.lsp.handlers'['typeHierarchy/subtypes'](nil, nil, {})
@@ -3681,7 +3681,7 @@ describe('LSP', function()
end)
end)
- describe('vim.lsp.buf.supertypes', function()
+ describe('vim.lsp.buf.typehierarchy supertypes', function()
it('does nothing for an empty response', function()
local qflist_count = exec_lua([=[
require'vim.lsp.handlers'['typeHierarchy/supertypes'](nil, nil, {})