From 1f34fc02f36f8254180b6fc70b4032d282459a77 Mon Sep 17 00:00:00 2001 From: Daniil Tsivinsky Date: Wed, 23 Feb 2022 11:43:00 +0300 Subject: [PATCH] add util function for local and global definitions --- config/nvim/lua/user/remaps.lua | 3 ++- config/nvim/lua/user/utils.lua | 43 +++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/config/nvim/lua/user/remaps.lua b/config/nvim/lua/user/remaps.lua index c03180c..e57894f 100644 --- a/config/nvim/lua/user/remaps.lua +++ b/config/nvim/lua/user/remaps.lua @@ -51,7 +51,8 @@ nmap("f", ":Telescope find_files") nmap("p", ":Telescope") -- LSP -nmap("gd", ":lua vim.lsp.buf.definition()") +nmap("gd", ":lua require('user.utils').goto_local_definition()") +nmap("gD", ":lua require('user.utils').goto_global_definition()") nmap("gr", ":lua vim.lsp.buf.references()") nmap("K", ":lua vim.lsp.buf.hover()") nmap("", ":lua vim.lsp.buf.rename()") diff --git a/config/nvim/lua/user/utils.lua b/config/nvim/lua/user/utils.lua index 88ca1a9..835c198 100644 --- a/config/nvim/lua/user/utils.lua +++ b/config/nvim/lua/user/utils.lua @@ -124,4 +124,47 @@ M.open_terminal = function(vertically) end end +M.get_definitions = function() + local params = vim.lsp.util.make_position_params() + + local resp = vim.lsp.buf_request_sync(0, "textDocument/definition", params, 1000) + local result = {} + for _, v in pairs(resp) do + table.insert(result, v) + end + result = result[1].result + + return result +end + +M.goto_local_definition = function() + local definitions = M.get_definitions() + + local local_definition = unpack(definitions) + local target = local_definition.targetSelectionRange + + local startLine = target.start.line + 1 + local startCol = target.start.character + + vim.api.nvim_win_set_cursor(0, { startLine, startCol }) +end + +M.goto_global_definition = function() + local definitions = M.get_definitions() + + local global_definition = definitions[#definitions] + local target = global_definition.targetSelectionRange + + local startLine = target.start.line + 1 + local startCol = target.start.character + + local fileuri = global_definition.targetUri + local filepath = string.gsub(fileuri, "file://", "") + + vim.cmd("tabnew") + vim.cmd("e " .. filepath) + + vim.api.nvim_win_set_cursor(0, { startLine, startCol }) +end + return M