From 70d39c43c56e415ab23d84439c9227979a5345f0 Mon Sep 17 00:00:00 2001 From: thek4n Date: Tue, 30 Jul 2024 09:43:21 +0300 Subject: [PATCH] fix(nvim): rename object behave --- .../.config/nvim/lua/plugins/lsp_manager.lua | 40 ++++++++++++++++++- home/user/.config/nvim/lua/plugins/ui.lua | 10 ++++- 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/home/user/.config/nvim/lua/plugins/lsp_manager.lua b/home/user/.config/nvim/lua/plugins/lsp_manager.lua index 5797f9d..24a08dd 100644 --- a/home/user/.config/nvim/lua/plugins/lsp_manager.lua +++ b/home/user/.config/nvim/lua/plugins/lsp_manager.lua @@ -1,5 +1,41 @@ -local on_attach = function(_, bufnr) +local lsp_have_feature = { + rename = function(client) + return client.supports_method "textDocument/rename" + end, + inlay_hint = function(client) + return client.supports_method "textDocument/inlayHint" + end, +} + +local function get_lsp_client_names(have_feature) + local client_names = {} + local attached_clients = vim.lsp.get_clients { bufnr = 0 } + for _, client in ipairs(attached_clients) do + if have_feature(client) then + table.insert(client_names, client.name) + end + end + return client_names +end + +local function lsp_buf_rename(client_name) + vim.lsp.buf.rename(nil, { name = client_name }) +end + +function lsp_buf_rename_use_any(fallback) + local client_names = get_lsp_client_names(lsp_have_feature.rename) + for _, client_name in ipairs(client_names) do + lsp_buf_rename(client_name) + return + end + if fallback then + fallback() + end +end + + +local on_attach = function(_, bufnr) local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end local function buf_set_option(...) vim.api.nvim_set_option_value(...) end @@ -28,7 +64,7 @@ local on_attach = function(_, bufnr) buf_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', desc("Remove workspace folder")) buf_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', desc("Show workspace folders")) buf_set_keymap('n', 'D', 'lua vim.lsp.buf.type_definition()', desc("Show type")) - buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', desc("Rename object")) + buf_set_keymap('n', 'rn', "lua lsp_buf_rename_use_any()", desc("Rename object")) buf_set_keymap('n', 'e', 'lua vim.diagnostic.open_float()', desc("Show diagnostic")) buf_set_keymap('n', 'p', 'lua vim.diagnostic.goto_prev()', desc("Previous problem")) buf_set_keymap('n', 'n', 'lua vim.diagnostic.goto_next()', desc("Next problem")) diff --git a/home/user/.config/nvim/lua/plugins/ui.lua b/home/user/.config/nvim/lua/plugins/ui.lua index f4c0c94..7dfeecc 100644 --- a/home/user/.config/nvim/lua/plugins/ui.lua +++ b/home/user/.config/nvim/lua/plugins/ui.lua @@ -191,5 +191,13 @@ return { }, }) end - } + }, + { + "https://github.com/liangxianzhe/floating-input.nvim.git", + config = function() + vim.ui.input = function(opts, on_confirm) + require("floating-input").input(opts, on_confirm, { border = 'single' }) + end + end + }, } \ No newline at end of file