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 vim.lsp.config("lua_ls", { capabilities = capabilities, settings = { Lua = { diagnostics = { globals = { "vim", "describe", "it" }, }, hint = { enable = true, }, }, }, }) -- RUST (in rust.lua) -- HTML vim.lsp.config("html", { capabilities = capabilities }) vim.lsp.config("cssls", { capabilities = capabilities, }) -- JS vim.lsp.config("ts_ls", { capabilities = capabilities }) -- CLANGD vim.lsp.config("clangd", { capabilities = capabilities }) vim.lsp.config("ocamllsp", { capabilities = capabilities }) vim.lsp.config("r_language_server", { capabilities = capabilities }) --vim.lsp.enable("r_language_server") vim.lsp.config("metals", { capabilities = capabilities }) 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, }, }