From 982460584f979365aeec195cbc81ecfb92e1baac Mon Sep 17 00:00:00 2001 From: hedy Date: Wed, 27 Dec 2023 22:14:12 +0800 Subject: [PATCH] fix(lsp): Use vim.buf.lsp.rename for rename_symbol Closes #42 --- lua/outline/providers/nvim-lsp.lua | 42 +++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/lua/outline/providers/nvim-lsp.lua b/lua/outline/providers/nvim-lsp.lua index 8ee8fb4..b93624b 100644 --- a/lua/outline/providers/nvim-lsp.lua +++ b/lua/outline/providers/nvim-lsp.lua @@ -95,20 +95,11 @@ function M.code_actions(sidebar) return true end ----Synchronously request rename from LSP +---@see rename_symbol ---@param sidebar outline.Sidebar +---@param node outline.FlatSymbol ---@return boolean success -function M.rename_symbol(sidebar) - local client = get_appropriate_client(sidebar.code.buf, 'renameProvider') - if not client then - return false - end - - local node = sidebar:_current_node() - if not node then - return false - end - +local function legacy_rename(sidebar, client, node) -- Using fn.input so it's synchronous local new_name = vim.fn.input({ prompt = 'New Name: ', default = node.name }) if not new_name or new_name == '' or new_name == node.name then @@ -133,6 +124,33 @@ function M.rename_symbol(sidebar) return true end +---Synchronously request rename from LSP +---@param sidebar outline.Sidebar +---@return boolean success +function M.rename_symbol(sidebar) + local client = get_appropriate_client(sidebar.code.buf, 'renameProvider') + if not client then + return false + end + local node = sidebar:_current_node() + if not node then + return false + end + + if _G._outline_nvim_has[8] then + sidebar:wrap_goto_location(function() + -- Options table with filter key only added in nvim-0.8 + -- Use vim.lsp's function because it has better support. + l.buf.rename(nil, { filter = function (client) + return not cfg.is_client_blacklisted(client) + end }) + end) + return true + else + return legacy_rename(sidebar, client, node) + end +end + ---Synchronously request and show hover info from LSP ---@param sidebar outline.Sidebar ---@return boolean success