return { { "neovim/nvim-lspconfig", dependencies = { "williamboman/mason.nvim", "williamboman/mason-lspconfig.nvim" }, 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 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 {} 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 } }