return { -- lspconfig { "neovim/nvim-lspconfig", ---@class PluginLspOpts -- init = function () local keys = require("lazyvim.plugins.lsp.keymaps").get() -- TODO: setup a new mapping for this -- { "gr", "Telescope lsp_references", desc = "References" }, keys[#keys+1] = { "gr", false } end, opts = { diagnostics = { underline = true, update_in_insert = false, virtual_text = { spacing = 4, source = "if_mani", prefix = "●", }, severity_sort = true, signs = { text = { [vim.diagnostic.severity.ERROR] = " ", [vim.diagnostic.severity.WARN] = " ", [vim.diagnostic.severity.HINT] = " ", [vim.diagnostic.severity.INFO] = " ", }, }, }, inlay_hints = { enabled = false, }, codelens = { enabled = false, }, document_highlight = { enabled = true, }, capabilities = { workspace = { fileOperations = { didRename = true, willRename = true, }, }, }, format = { formatting_options = nil, timeout_ms = nil, }, -- Automatically format on save -- autoformat = false, -- LSP Server Settings ---@type lspconfig.options servers = { lua_ls = { settings = { Lua = { workspace = { checkThirdParty = false, }, codeLens = { enable = true, }, completion = { callSnippet = "Replace", }, doc = { privateName = { "^_" }, }, hint = { enable = true, setType = false, paramType = true, paramName = "Disable", semicolon = "Disable", arrayIndex = "Disable", }, diagnostics = { disable = { "missing-fields", }, }, }, }, }, -- Add clangd extensions -- https://github.com/p00f/clangd_extensions.nvim }, -- you can do any additional lsp server setup here -- return true if you don't want this server to be setup with lspconfig ---@type table setup = { -- example to setup with typescript.nvim -- tsserver = function(_, opts) -- require("typescript").setup({ server = opts }) -- return true -- end, -- Specify * to use this function as a fallback for any server -- ["*"] = function(server, opts) end, }, }, }, -- cmdline tools and lsp servers { "williamboman/mason.nvim", cmd = "Mason", keys = { { "cm", "Mason", desc = "Mason" } }, opts = { ensure_installed = { "stylua", "shfmt", -- "flake8", }, }, ---@param opts MasonSettings | {ensure_installed: string[]} config = function(_, opts) require("mason").setup(opts) local mr = require("mason-registry") local function ensure_installed() for _, tool in ipairs(opts.ensure_installed) do local p = mr.get_package(tool) if not p:is_installed() then p:install() end end end if mr.refresh then mr.refresh(ensure_installed) else ensure_installed() end end, }, }