return { { "neovim/nvim-lspconfig", config = function() --local capabilities = require("cmp_nvim_lsp").default_capabilities() -- local nvim_lsp = require("lspconfig") vim.lsp.log.set_level(vim.log.levels.OFF) -- LUA vim.lsp.config("lua_ls", { 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.enable("clangd") -- 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, -- init_options = { -- statusBarProvider = "off", -- }, -- }) -- vim.lsp.enable("metals") --vim.lsp.config("asm_lsp", { capabilities = capabilities }) vim.lsp.enable("asm_lsp") vim.lsp.config("slangd", { flags = { allow_incremental_sync = true } }) vim.lsp.enable("slangd") --vim.lsp.config("tinymist", { capabilities = capabilities }) vim.lsp.enable("tinymist") --vim.lsp.config("wgsl_analyzer", { capabilities = capabilities }) vim.lsp.enable("wgsl_analyzer") vim.lsp.enable("prolog_ls") vim.lsp.config("hls", { filetypes = { "haskell", "lhaskell", "cabal" }, }) vim.lsp.enable("hls") 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", "ca", vim.lsp.buf.code_action, opts) vim.keymap.set("v", "ca", vim.lsp.buf.code_action, 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, }, }