local lsp = require("lsp-zero") lsp.preset("recommended") require("mason").setup({}) require("mason-lspconfig").setup({ ensure_installed = { "ts_ls", "eslint", "lua_ls", "rust_analyzer", "ast_grep" }, handlers = { function(server_name) require("lspconfig")[server_name].setup({}) 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_prev_item(), [''] = cmp.mapping.select_next_item(), [''] = cmp.mapping.confirm({ select = true }), [""] = cmp.mapping.complete(), }), snippet = { expand = function(args) require('luasnip').lsp_expand(args.body) end, }, }) lsp.extend_lspconfig() lsp.set_preferences({ sign_icons = {} }) lsp.on_attach(function(client, bufnr) lsp.default_keymaps({ buffer = bufnr }) local opts = { buffer = bufnr, remap = false } local builtin = require('telescope.builtin') vim.keymap.set("n", "K", function() vim.lsp.buf.hover() end, opts) vim.keymap.set("n", "gd", builtin.lsp_definitions, {}) vim.keymap.set("n", "gd", builtin.lsp_definitions, {}) vim.keymap.set('n', 'cf', builtin.lsp_incoming_calls) vim.keymap.set("n", "vws", function() vim.lsp.buf.workspace_symbol() end, opts) vim.keymap.set("n", "vd", function() vim.diagnostic.open_float() end, opts) vim.keymap.set("n", "[d", function() vim.diagnostic.goto_next() end, opts) vim.keymap.set("n", "]d", function() vim.diagnostic.goto_prev() end, opts) vim.keymap.set("n", "vca", function() vim.lsp.buf.code_action() end, opts) vim.keymap.set("n", "vrn", function() vim.lsp.buf.rename() end, opts) vim.keymap.set("i", "", function() vim.lsp.buf.signature_help() end, opts) end) lsp.setup() -- Function to restart all active LSP clients local function restart_lsp() for _, client in pairs(vim.lsp.get_active_clients()) do client.stop() end vim.cmd("edit") -- Reload the current buffer to reattach the LSP clients end -- Create a Neovim command to restart LSP vim.api.nvim_create_user_command('LspRestart', restart_lsp, {})