vim.diagnostic.config({ virtual_text = true, signs = true, underline = true, }) local servers = { ts_ls = {}, eslint = {}, lua_ls = { cmd = { "lua-language-server" }, filetypes = { "lua" } }, rust_analyzer = {}, ast_grep = {}, } ---@type lsp.ClientCapabilities local capabilities = require("cmp_nvim_lsp").default_capabilities() for server, config in pairs(servers) do servers[server].capabilities = capabilities vim.lsp.config(server, config) vim.lsp.enable(server) end vim.api.nvim_create_autocmd("LspAttach", { callback = function(args) local opts = { buffer = args.buf } vim.keymap.set("n", "K", vim.lsp.buf.hover, opts) vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts) vim.keymap.set("n", "rn", vim.lsp.buf.rename, opts) vim.keymap.set("n", "ca", vim.lsp.buf.code_action, opts) -- vim.keymap.set("n", "[d", function() vim.diagnostic.jump({ count = 1, float = true }) end, opts) -- vim.keymap.set("n", "]d", function() vim.diagnostic.jump({ count = -1, float = true }) end, opts) vim.keymap.set("n", "d", vim.diagnostic.open_float, opts) end }) local cmp = require("cmp") cmp.setup({ window = { completion = cmp.config.window.bordered(), documentation = cmp.config.window.bordered(), }, mapping = cmp.mapping.preset.insert({ [""] = cmp.mapping.select_next_item(), [""] = cmp.mapping.select_prev_item(), [""] = cmp.mapping.confirm(), }), sources = { { name = "nvim_lsp" }, { name = "luasnip" }, } }) require("mason").setup() local ensure_installed = { "ast-grep", "clangd", "diagnostic-languageserver", "eslint-lsp", "jdtls", "json-lsp", "lua-language-server", "python-lsp-server", "some-sass-language-server", "tombi", "rust-analyzer", "typescript-language-server", "yaml-language-server", "jinja-lsp" } vim.api.nvim_create_user_command("MasonInstallAll", function() local packages = table.concat(ensure_installed, " ") vim.cmd("MasonInstall " .. packages) end, {})