return { "neovim/nvim-lspconfig", event = { "BufReadPre", "BufNewFile" }, dependencies = { { "saghen/blink.cmp" }, { "antosha417/nvim-lsp-file-operations", config = true }, { "williamboman/mason.nvim", config = true }, { "williamboman/mason-lspconfig.nvim" }, { "WhoIsSethDaniel/mason-tool-installer.nvim" }, { "j-hui/fidget.nvim", opts = {} }, { "folke/neodev.nvim", opts = {} }, { 'dmmulroy/ts-error-translator.nvim', opts = {} }, }, config = function() local lspconfig = require("lspconfig") local utils = require("lsp.utils") vim.api.nvim_create_autocmd("LspAttach", { group = vim.api.nvim_create_augroup("lsp-attach", { clear = true }), callback = function(event) -- Use the utility function to setup keymaps utils.setup_lsp_keymaps(event.buf) local client = vim.lsp.get_client_by_id(event.data.client_id) if client and client.server_capabilities.documentHighlightProvider then vim.api.nvim_create_autocmd("LspDetach", { group = vim.api.nvim_create_augroup("lsp-detach", { clear = true }), callback = function() vim.lsp.buf.clear_references() end, }) end end, }) vim.diagnostic.config({ virtual_text = { prefix = "●", source = "if_many", }, float = { border = "rounded", }, signs = true, underline = true, update_in_insert = false, severity_sort = true, }) local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities = vim.tbl_deep_extend( "force", capabilities, require('blink.cmp').get_lsp_capabilities() ) -- Load server configurations from separate files local servers_path = vim.fn.stdpath("config") .. "/lua/lsp/servers" local server_files = vim.fn.glob(servers_path .. "/*.lua", false, true) local servers = {} for _, file in ipairs(server_files) do local server_name = vim.fn.fnamemodify(file, ":t:r") local ok, server_config = pcall(require, "lsp.servers." .. server_name) if ok then servers[server_name] = server_config else vim.notify("Failed to load server config: " .. server_name, vim.log.levels.WARN) end end -- Setup all servers for server_name, server in pairs(servers) do server.capabilities = vim.tbl_deep_extend("force", {}, capabilities, server.capabilities or {}) lspconfig[server_name].setup(server) end end, }