From 5798601f2527b6535fbafba7e22de4dd53954718 Mon Sep 17 00:00:00 2001 From: "eric.marin" Date: Mon, 24 Mar 2025 08:42:44 +0100 Subject: update --- nvim/lua/plugins/nvim-lspconfig.lua | 150 +++++++++++++++++++++--------------- 1 file changed, 86 insertions(+), 64 deletions(-) (limited to 'nvim/lua/plugins/nvim-lspconfig.lua') diff --git a/nvim/lua/plugins/nvim-lspconfig.lua b/nvim/lua/plugins/nvim-lspconfig.lua index 22435e6..639734e 100644 --- a/nvim/lua/plugins/nvim-lspconfig.lua +++ b/nvim/lua/plugins/nvim-lspconfig.lua @@ -1,5 +1,5 @@ local config = function() - local lspconfig = require("lspconfig") + local lsp = vim.lsp local capabilities = require("cmp_nvim_lsp").default_capabilities() -- setting custom signs @@ -9,85 +9,107 @@ local config = function() vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = "" }) end - local on_attach = function(client, bufnr) - local keymap = vim.keymap - local lsp = vim.lsp - local opts = { noremap = true, silent = true, buffer = bufnr, desc = "" } + vim.api.nvim_create_autocmd('LspAttach', { + callback = function(ev) + local client = lsp.get_client_by_id(ev.data.client_id) + local keymap = vim.keymap + local opts = { noremap = true, silent = true, buffer = ev.buf, desc = "" } - -- setting custom keymaps - opts.desc = "Finder" - keymap.set("n", "lf", ":Lspsaga finder", opts) -- go to definition - opts.desc = "Peek Definition (Lspsaga)" - keymap.set("n", "lp", ":Lspsaga peek_definition", opts) -- peak definition - opts.desc = "Goto Definition (Lspsaga)" - keymap.set("n", "lg", ":Lspsaga goto_definition", opts) -- go to definition - opts.desc = "Code Action (Lspsaga)" - keymap.set("n", "la", ":Lspsaga code_action", opts) -- see available code actions - opts.desc = "Rename (Lspsaga)" - keymap.set("n", "lr", ":Lspsaga rename", opts) -- smart rename - opts.desc = "Hover Documentation (Lspsaga)" - keymap.set("n", "lk", lsp.buf.hover, opts) -- show documentation for what is under cursor - opts.desc = "Outline (Lspsaga)" - keymap.set("n", "lo", ":Lspsaga outline", opts) -- show outline - opts.desc = "Diagnostic (Lspsaga)" - keymap.set("n", "ld", ":Lspsaga show_workspace_diagnostics", opts) -- show diagnostics + -- setting custom keymaps + opts.desc = "Finder" + keymap.set("n", "lf", ":Lspsaga finder", opts) -- go to definition + opts.desc = "Peek Definition (Lspsaga)" + keymap.set("n", "lp", ":Lspsaga peek_definition", opts) -- peak definition + opts.desc = "Goto Definition (Lspsaga)" + keymap.set("n", "lg", ":Lspsaga goto_definition", opts) -- go to definition + opts.desc = "Code Action (Lspsaga)" + keymap.set("n", "la", ":Lspsaga code_action", opts) -- see available code actions + opts.desc = "Rename (Lspsaga)" + keymap.set("n", "lr", ":Lspsaga rename", opts) -- smart rename + opts.desc = "Hover Documentation (Lspsaga)" + keymap.set("n", "lk", lsp.buf.hover, opts) -- show documentation for what is under cursor + opts.desc = "Outline (Lspsaga)" + keymap.set("n", "lo", ":Lspsaga outline", opts) -- show outline + opts.desc = "Diagnostic (Lspsaga)" + keymap.set("n", "ld", ":Lspsaga show_workspace_diagnostics", opts) -- show diagnostics - keymap.del("n", "K", { buffer = bufnr }) - - -- enable auto formatting on save - if client.supports_method("textDocument/formatting") then - vim.api.nvim_create_autocmd("BufWritePre", { - buffer = bufnr, - callback = function() - vim.lsp.buf.format({ async = true }) - end, - }) + -- enable auto formatting on save + if client ~= nil and client:supports_method("textDocument/formatting") then + vim.api.nvim_create_autocmd("BufWritePre", { + buffer = ev.buf, + callback = function() + lsp.buf.format({ async = true }) + end, + }) + end end - end + }) - -- efm server configuration - -- lspconfig.efm.setup({ - -- init_options = { - -- documentFormatting = true, - -- documentRangeFormatting = true, - -- hover = true, - -- documentSymbol = true, - -- codeAction = true, - -- completion = true, - -- }, - -- }) - -- clangd server configuration - lspconfig.clangd.setup({ - on_attach = on_attach, + vim.api.nvim_create_autocmd('LspDetach', { + callback = function(ev) + local client = lsp.get_client_by_id(ev.data.client_id) + local keymap = vim.keymap + keymap.del("n", "lf") + keymap.del("n", "lp") + keymap.del("n", "lg") + keymap.del("n", "la") + keymap.del("n", "lr") + keymap.del("n", "lk") + keymap.del("n", "lo") + keymap.del("n", "ld") + if client ~= nil and client:supports_method('textDocument/formatting') then + vim.api.nvim_clear_autocmds({ + event = 'BufWritePre', + buffer = ev.buf, + }) + end + end, + }) + + -- C/C++ + lsp.enable("clangd") + lsp.config("clangd", { + capabilities = capabilities, + }) + -- Rust + lsp.enable("rust_analyzer") + lsp.config("rust_analyzer", { capabilities = capabilities, }) - -- rust analyzer server configuration - lspconfig.rust_analyzer.setup({ - on_attach = on_attach, + -- Haskell + lsp.enable("hls") + lsp.config("hls", { capabilities = capabilities, + settings = { + ['haskell'] = { + cabalFormattingProvider = "cabal-fmt", + formattingProvider = "ormolu" + }, + }, }) - -- haskell-language-server configuration - lspconfig.hls.setup({ - on_attach = on_attach, + -- Lua + lsp.enable("lua_ls") + lsp.config("lua_ls", { capabilities = capabilities, }) - -- lua-language-server configuration - lspconfig.lua_ls.setup({ - on_attach = on_attach, + -- JavaScript/Typescript + lsp.enable("ts_ls") + lsp.config("ts_ls", { capabilities = capabilities, }) - lspconfig.ts_ls.setup({ - on_attach = on_attach, + -- CSS + lsp.enable("cssls") + lsp.config("cssls", { capabilities = capabilities, }) - -- cssls-language-server configuration - lspconfig.cssls.setup({ - on_attach = on_attach, + -- Meson + lsp.enable("mesonlsp") + lsp.config("mesonlsp", { capabilities = capabilities, }) - -- mesonlsp configuration - lspconfig.mesonlsp.setup({ - on_attach = on_attach, + -- Zig + lsp.enable("zls") + lsp.config("zls", { capabilities = capabilities, }) end -- cgit v1.2.3