return { { "neovim/nvim-lspconfig", dependencies = { "williamboman/mason.nvim", "williamboman/mason-lspconfig.nvim", }, priority = 500, opts = { diagnostics = { underline = true, update_in_insert = true, virtual_text = { spacing = 4, source = "if_many", prefix = "●", }, severity_sort = true, signs = { text = { [vim.diagnostic.severity.ERROR] = require("options").lsp.icons.Error, [vim.diagnostic.severity.WARN] = require("options").lsp.icons.Warn, [vim.diagnostic.severity.HINT] = require("options").lsp.icons.Hint, [vim.diagnostic.severity.INFO] = require("options").lsp.icons.Info, }, }, }, }, config = function(_, opts) local options = require("options") require("mason").setup() local coq = require('coq') local handlers = { -- The first entry (without a key) will be the default handler -- and will be called for each installed server that doesn't have -- a dedicated handler. function(server_name) -- default handler (optional) require("lspconfig")[server_name].setup(coq.lsp_ensure_capabilities({ on_attach = function(client, bufnr) -- setup lsp-format require("lsp-format").on_attach(client, bufnr) -- setup navic if client.server_capabilities["documentSymbolProvider"] then require("nvim-navic").attach(client, bufnr) end end })) end, } require("mason-lspconfig").setup({ handlers = handlers }) -- set custom icons for name, icon in pairs(options.lsp.icons) do name = "DiagnosticSign" .. name vim.fn.sign_define(name, { text = icon, texthl = name, numhl = "" }) end vim.diagnostic.config(vim.deepcopy(opts.diagnostics)) require("lspconfig").gdscript.setup({}) end, }, { 'lukas-reineke/lsp-format.nvim', } }