fix: lsp rename twice or more if multiple lsp's are active

This commit is contained in:
Ward Truyen
2026-04-20 21:13:57 +02:00
parent 1ee9a1932c
commit d7d2adcf13

View File

@@ -2,160 +2,170 @@
-- NOTE: this adds a Language Server Provider for source files like C++, Java/-Script, etc.
-- It will check the code for errors, warnings, variables and structures and give suggestions.
return {
"neovim/nvim-lspconfig",
version = "*",
config = function()
-- local lspconfig = require("lspconfig")
"neovim/nvim-lspconfig",
version = "*",
config = function()
-- local lspconfig = require("lspconfig")
vim.cmd([[autocmd! ColorScheme * highlight NormalFloat guibg=#1f2335]])
vim.cmd([[autocmd! ColorScheme * highlight FloatBorder guifg=white guibg=#1f2335]])
vim.cmd([[autocmd! ColorScheme * highlight NormalFloat guibg=#1f2335]])
vim.cmd([[autocmd! ColorScheme * highlight FloatBorder guifg=white guibg=#1f2335]])
-- Beautiful borders around LSP stuff like hover/signature_help
local border = {
{ "", "FloatBorder" },
{ "", "FloatBorder" },
{ "", "FloatBorder" },
{ "", "FloatBorder" },
{ "", "FloatBorder" },
{ "", "FloatBorder" },
{ "", "FloatBorder" },
{ "", "FloatBorder" },
}
-- Beautiful borders around LSP stuff like hover/signature_help
local border = {
{ "", "FloatBorder" },
{ "", "FloatBorder" },
{ "", "FloatBorder" },
{ "", "FloatBorder" },
{ "", "FloatBorder" },
{ "", "FloatBorder" },
{ "", "FloatBorder" },
{ "", "FloatBorder" },
}
-- lspconfig.clangd.setup({
vim.lsp.config("clangd",{
keys = {
{ "<leader>pc", "<cmd>ClangdSwitchSourceHeader<cr>", desc = "Switch Source/Header (C/C++)" },
},
cmd = {
"clangd",
"--offset-encoding=utf-16",
"--background-index",
"--clang-tidy",
"--header-insertion=iwyu",
"--completion-style=detailed",
"--function-arg-placeholders",
"-j4",
"--fallback-style=llvm",
},
filetypes = { "c", "cpp", "objc", "objcpp", "cuda", "proto", "hpp", "h" },
-- init_options = {
-- fallbackFlags = { '-std=c17' },
-- },
})
-- lspconfig.clangd.setup({
vim.lsp.config("clangd", {
keys = {
{ "<leader>pc", "<cmd>ClangdSwitchSourceHeader<cr>", desc = "Switch Source/Header (C/C++)" },
},
cmd = {
"clangd",
"--offset-encoding=utf-16",
"--background-index",
"--clang-tidy",
"--header-insertion=iwyu",
"--completion-style=detailed",
"--function-arg-placeholders",
"-j4",
"--fallback-style=llvm",
},
filetypes = { "c", "cpp", "objc", "objcpp", "cuda", "proto", "hpp", "h" },
-- init_options = {
-- fallbackFlags = { '-std=c17' },
-- },
})
-- lspconfig.glsl_analyzer.setup({
vim.lsp.config("glsl_analyzer",{
filetypes = { "glsl", "vert", "tese", "frag", "geom", "comp", "vs", "fs" },
})
-- lspconfig.glsl_analyzer.setup({
vim.lsp.config("glsl_analyzer", {
filetypes = { "glsl", "vert", "tese", "frag", "geom", "comp", "vs", "fs" },
})
-- diagnostics border
local orig_util_open_floating_preview = vim.lsp.util.open_floating_preview
function vim.lsp.util.open_floating_preview(contents, syntax, opts, ...)
-- I would love to retrieve the severity level just here in order to modify opts.border
opts = opts or {}
opts.border = opts.border or border
return orig_util_open_floating_preview(contents, syntax, opts, ...)
end
-- diagnostics border
local orig_util_open_floating_preview = vim.lsp.util.open_floating_preview
function vim.lsp.util.open_floating_preview(contents, syntax, opts, ...)
-- I would love to retrieve the severity level just here in order to modify opts.border
opts = opts or {}
opts.border = opts.border or border
return orig_util_open_floating_preview(contents, syntax, opts, ...)
end
-- adding filetypes to get glsl things
vim.filetype.add({
extension = {
vert = "glsl",
tesc = "glsl",
tese = "glsl",
frag = "glsl",
geom = "glsl",
comp = "glsl",
vs = "glsl",
fs = "glsl",
},
})
-- adding filetypes to get glsl things
vim.filetype.add({
extension = {
vert = "glsl",
tesc = "glsl",
tese = "glsl",
frag = "glsl",
geom = "glsl",
comp = "glsl",
vs = "glsl",
fs = "glsl",
},
})
-- lspconfig.rust_analyzer.setup({
vim.lsp.config("rust_analyzer",{
settings = {
["rust-analyzer"] = {},
},
})
-- lspconfig.rust_analyzer.setup({
vim.lsp.config("rust_analyzer", {
settings = {
["rust-analyzer"] = {},
},
})
-- These lsp keybinds only load when an LSP is attatched to the buffer.
vim.api.nvim_create_autocmd("LspAttach", {
group = vim.api.nvim_create_augroup("UserLspConfig", {}),
callback = function(event)
-- Enable completion triggered by <c-x><c-o>
vim.bo[event.buf].omnifunc = "v:lua.vim.lsp.omnifunc"
-- These lsp keybinds only load when an LSP is attatched to the buffer.
vim.api.nvim_create_autocmd("LspAttach", {
group = vim.api.nvim_create_augroup("UserLspConfig", {}),
callback = function(event)
-- Enable completion triggered by <c-x><c-o>
vim.bo[event.buf].omnifunc = "v:lua.vim.lsp.omnifunc"
local map = function(keys, func, desc)
vim.keymap.set("n", keys, func, { buffer = event.buf, desc = "LSP: " .. desc })
end
local map = function(keys, func, desc)
vim.keymap.set("n", keys, func, { buffer = event.buf, desc = "LSP: " .. desc })
end
-- Jump to the definition of the word under your cursor.
-- This is where a variable was first declared, or where a function is defined, etc.
-- To jump back, press <C-t>.
map("gd", require("telescope.builtin").lsp_definitions, "[G]oto [D]efinition")
-- Jump to the definition of the word under your cursor.
-- This is where a variable was first declared, or where a function is defined, etc.
-- To jump back, press <C-t>.
map("gd", require("telescope.builtin").lsp_definitions, "[G]oto [D]efinition")
-- WARN: This is not Goto Definition, this is Goto Declaration.
-- For example, in C this would take you to the header.
map("gD", vim.lsp.buf.declaration, "[G]oto [D]eclaration")
-- WARN: This is not Goto Definition, this is Goto Declaration.
-- For example, in C this would take you to the header.
map("gD", vim.lsp.buf.declaration, "[G]oto [D]eclaration")
-- Find references for the word under your cursor.
map("gr", require("telescope.builtin").lsp_references, "[G]oto [R]eferences")
-- Find references for the word under your cursor.
map("gr", require("telescope.builtin").lsp_references, "[G]oto [R]eferences")
-- Jump to the implementation of the word under your cursor.
-- Useful when your language has ways of declaring types without an actual implementation.
map("gI", require("telescope.builtin").lsp_implementations, "[G]oto [I]mplementation")
-- Jump to the implementation of the word under your cursor.
-- Useful when your language has ways of declaring types without an actual implementation.
map("gI", require("telescope.builtin").lsp_implementations, "[G]oto [I]mplementation")
-- Jump to the type of the word under your cursor.
-- Useful when you're not sure what type a variable is and you want to see
-- the definition of its *type*, not where it was *defined*.
map("<leader>ld", require("telescope.builtin").lsp_type_definitions, "Type [D]efinition")
-- Jump to the type of the word under your cursor.
-- Useful when you're not sure what type a variable is and you want to see
-- the definition of its *type*, not where it was *defined*.
map("<leader>ld", require("telescope.builtin").lsp_type_definitions, "Type [D]efinition")
-- Jump to the type of the word under your cursor.
-- Useful when you're not sure what type a variable is and you want to see
-- the definition of its *type*, not where it was *defined*.
map("<leader>lD", vim.lsp.buf.declaration, "Go to [D]eclaration")
-- Jump to the type of the word under your cursor.
-- Useful when you're not sure what type a variable is and you want to see
-- the definition of its *type*, not where it was *defined*.
map("<leader>lD", vim.lsp.buf.declaration, "Go to [D]eclaration")
-- Fuzzy find all the symbols in your current document.
-- Symbols are things like variables, functions, types, etc.
map("<leader>ls", require("telescope.builtin").lsp_document_symbols, "document [S]ymbols")
-- Fuzzy find all the symbols in your current document.
-- Symbols are things like variables, functions, types, etc.
map("<leader>ls", require("telescope.builtin").lsp_document_symbols, "document [S]ymbols")
-- Format file
map("<leader>lf", vim.lsp.buf.format, "[F]ormat")
-- Format file
map("<leader>lf", vim.lsp.buf.format, "[F]ormat")
-- Fuzzy find all the symbols in your current workspace.
-- Similar to document symbols, except searches over your entire project.
map("<leader>lw", require("telescope.builtin").lsp_dynamic_workspace_symbols, "[W]orkspace symbols")
map("<leader>li", vim.cmd.LspInfo, "Show lsp info")
map("<leader>lp", vim.diagnostic.goto_prev, "Go to [P]revious diagnostic message")
-- Fuzzy find all the symbols in your current workspace.
-- Similar to document symbols, except searches over your entire project.
map(
"<leader>lw",
require("telescope.builtin").lsp_dynamic_workspace_symbols,
"[W]orkspace symbols"
)
map("<leader>li", vim.cmd.LspInfo, "Show lsp info")
map("<leader>lp", vim.diagnostic.goto_prev, "Go to [P]revious diagnostic message")
map("<leader>ln", vim.diagnostic.goto_next, "Go to [N]ext diagnostic message")
map("<leader>ln", vim.diagnostic.goto_next, "Go to [N]ext diagnostic message")
map("<leader>le", vim.diagnostic.open_float, "Show diagnostic [E]rror messages")
vim.diagnostic.config({ virtual_text = false })
map("<leader>le", vim.diagnostic.open_float, "Show diagnostic [E]rror messages")
vim.diagnostic.config({ virtual_text = false })
map("<leader>lq", vim.diagnostic.setloclist, "Open diagnostic [Q]uickfix list")
map("<leader>lq", vim.diagnostic.setloclist, "Open diagnostic [Q]uickfix list")
-- Rename the variable under your cursor.
local function rename()
local clients = vim.lsp.get_clients({ bufnr = 0, method = "textDocument/rename" })
if #clients > 0 then
local targetClient = clients[1] -- Use the first client .. or angularls if available
for _, client in ipairs(clients) do
if client.name == "angularls" then
targetClient = client
break
end
end
vim.lsp.buf.rename(nil, { name = targetClient.name })
else
print("No LSP attached supports renaming")
end
end
--Most Language Servers support renaming across files, etc.
map("<leader>lr", rename, "[R]ename")
-- Rename the variable under your cursor.
-- Most Language Servers support renaming across files, etc.
map("<leader>lr", vim.lsp.buf.rename, "[R]ename")
-- Execute a code action, usually your cursor needs to be on top of an error
-- or a suggestion from your LSP for this to activate.
map("<leader>la", vim.lsp.buf.code_action, "code [A]ction")
-- Execute a code action, usually your cursor needs to be on top of an error
-- or a suggestion from your LSP for this to activate.
map("<leader>la", vim.lsp.buf.code_action, "code [A]ction")
-- Opens a popup that displays documentation about the word under your cursor
-- See `:help K` for why this keymap.
-- Opens a popup that displays documentation about the word under your cursor
-- See `:help K` for why this keymap.
map("<leader>th", function()
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({ bufnr = event.buf }))
end, "[T]oggle Inlay [H]ints")
end,
})
end,
map("<leader>th", function()
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({ bufnr = event.buf }))
end, "[T]oggle Inlay [H]ints")
end,
})
end,
}