summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
authorViktor Kojouharov <developer@sugr.org>2021-04-21 02:31:43 +0200
committerGitHub <noreply@github.com>2021-04-20 17:31:43 -0700
commit13dae8c4d924472933443f14109a0739dbacbeda (patch)
tree8a6a548d9e027c4d62765f3536533482506d3a63 /lua
parentf92b9b1fae70d5fac681a29f0df64549c399f18f (diff)
lsp: Implement lsp.implementations similar to lsp.definitions (#743)
Fixes #730
Diffstat (limited to 'lua')
-rw-r--r--lua/telescope/builtin/init.lua1
-rw-r--r--lua/telescope/builtin/lsp.lua15
2 files changed, 13 insertions, 3 deletions
diff --git a/lua/telescope/builtin/init.lua b/lua/telescope/builtin/init.lua
index b9cc99f..f7f32f8 100644
--- a/lua/telescope/builtin/init.lua
+++ b/lua/telescope/builtin/init.lua
@@ -65,6 +65,7 @@ builtin.tagstack = require('telescope.builtin.internal').tagstack
builtin.lsp_references = require('telescope.builtin.lsp').references
builtin.lsp_definitions = require('telescope.builtin.lsp').definitions
+builtin.lsp_implementations = require('telescope.builtin.lsp').implementations
builtin.lsp_document_symbols = require('telescope.builtin.lsp').document_symbols
builtin.lsp_code_actions = require('telescope.builtin.lsp').code_actions
builtin.lsp_document_diagnostics = require('telescope.builtin.lsp').diagnostics
diff --git a/lua/telescope/builtin/lsp.lua b/lua/telescope/builtin/lsp.lua
index b2ab981..285a047 100644
--- a/lua/telescope/builtin/lsp.lua
+++ b/lua/telescope/builtin/lsp.lua
@@ -41,11 +41,11 @@ lsp.references = function(opts)
}):find()
end
-lsp.definitions = function(opts)
+local function list_or_jump(action, title, opts)
opts = opts or {}
local params = vim.lsp.util.make_position_params()
- local result = vim.lsp.buf_request_sync(0, "textDocument/definition", params, opts.timeout or 10000)
+ local result = vim.lsp.buf_request_sync(0, action, params, opts.timeout or 10000)
local flattened_results = {}
for _, server_results in pairs(result) do
if server_results.result then
@@ -60,7 +60,7 @@ lsp.definitions = function(opts)
else
local locations = vim.lsp.util.locations_to_items(flattened_results)
pickers.new(opts, {
- prompt_title = 'LSP Definitions',
+ prompt_title = title,
finder = finders.new_table {
results = locations,
entry_maker = opts.entry_maker or make_entry.gen_from_quickfix(opts),
@@ -71,6 +71,14 @@ lsp.definitions = function(opts)
end
end
+lsp.definitions = function(opts)
+ return list_or_jump("textDocument/definition", 'LSP Definitions', opts)
+end
+
+lsp.implementations = function(opts)
+ return list_or_jump("textDocument/implementation", 'LSP Implementations', opts)
+end
+
lsp.document_symbols = function(opts)
local params = vim.lsp.util.make_position_params()
local results_lsp = vim.lsp.buf_request_sync(0, "textDocument/documentSymbol", params, opts.timeout or 10000)
@@ -308,6 +316,7 @@ local feature_map = {
["document_symbols"] = "document_symbol",
["references"] = "find_references",
["definitions"] = "goto_definition",
+ ["implementations"] = "implementation",
["workspace_symbols"] = "workspace_symbol",
}