return { { "neovim/nvim-lspconfig", dependencies = { "hrsh7th/cmp-nvim-lsp", }, config = function() local capabilities = require("cmp_nvim_lsp").default_capabilities() local nvim_lsp = require("lspconfig") -- LUA nvim_lsp.lua_ls.setup({ capabilities = capabilities, settings = { Lua = { diagnostics = { globals = { "vim", "describe", "it" }, }, hint = { enable = true, }, }, }, }) -- RUST (in rust.lua) -- HTML nvim_lsp.html.setup({ capabilities = capabilities }) nvim_lsp.cssls.setup({ capabilities = capabilities, }) -- JS nvim_lsp.ts_ls.setup({ capabilities = capabilities }) -- CLANGD nvim_lsp.clangd.setup({ capabilities = capabilities }) nvim_lsp.ocamllsp.setup({ capabilities = capabilities }) nvim_lsp.r_language_server.setup({ capabilities = capabilities }) --vim.lsp.enable("r_language_server") vim.lsp.enable("metals") local hl_groups = { "DiagnosticUnderlineError", "DiagnosticUnderlineWarn", "DiagnosticUnderlineInfo", "DiagnosticUnderlineHint", } for _, hl in ipairs(hl_groups) do vim.cmd.highlight(hl .. " gui=undercurl") end vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, { virtual_text = true, signs = true, update_in_insert = false, show_diagnostic_autocmds = { "InsertLeave", "TextChanged" }, }) -- Not working for some weird reason ... vim.diagnostic.config({ virtual_text = false, float = { header = false, border = "rounded", focusable = true, }, }) -- Mappings vim.api.nvim_create_autocmd("LspAttach", { group = vim.api.nvim_create_augroup("UserLspConfig", {}), callback = function(ev) local opts = { buffer = ev.buf } vim.keymap.set("n", "t", vim.diagnostic.open_float) vim.keymap.set("n", "sr", vim.lsp.buf.rename) vim.keymap.set("n", "gD", vim.lsp.buf.declaration, opts) vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts) vim.keymap.set("n", "gi", vim.lsp.buf.implementation, opts) vim.keymap.set("n", "f", function() vim.lsp.buf.format({ async = true }) end, opts) vim.keymap.set("n", "K", vim.lsp.buf.hover, opts) end, }) end, }, }