return { { "nvimdev/lspsaga.nvim", config = function() require("lspsaga").setup({}) end, dependencies = { "nvim-treesitter/nvim-treesitter", "nvim-tree/nvim-web-devicons", }, }, { "VonHeikemen/lsp-zero.nvim", branch = "v2.x", lazy = true, config = function() require("lsp-zero.settings").preset({}) end, }, { "neovim/nvim-lspconfig", cmd = "LspInfo", event = { "BufReadPre", "BufNewFile", }, dependencies = { "folke/neodev.nvim", "hrsh7th/cmp-nvim-lsp", { "williamboman/mason-lspconfig.nvim" }, { "williamboman/mason.nvim", build = ":MasonUpdate", }, }, config = function() local lsp = require("lsp-zero") lsp.on_attach(function(_) vim.keymap.set("n", "rn", vim.lsp.buf.rename, { desc = "[R]e[N]ame" }) vim.keymap.set("n", "ca", vim.lsp.buf.code_action, { desc = "[C]ode [A]ction" }) vim.keymap.set("n", "gd", vim.lsp.buf.definition, { desc = "[G]oto [D]efinition" }) vim.keymap.set( "n", "gr", require("telescope.builtin").lsp_references, { desc = "[G]oto [R]eference" } ) vim.keymap.set("n", "gI", vim.lsp.buf.implementation, { desc = "[G]oto [I]mplementation" }) vim.keymap.set("n", "K", vim.lsp.buf.hover, { desc = "Hover Documentation" }) vim.keymap.set("n", "", vim.lsp.buf.signature_help, { desc = "Hover Documentation" }) end) lsp.ensure_installed({ "lua_ls", "gopls", "yamlls", }) local lspconfig = require("lspconfig") local util = require("lspconfig/util") lspconfig.lua_ls.setup(lsp.nvim_lua_ls()) lspconfig.gopls.setup({ cmd = { "gopls" }, filetypes = { "go", "gomod", "gowork", "gotmpl", }, root_dir = util.root_pattern("go.work", "go.mod", ".git"), }) lsp.setup() end, }, { "pmizio/typescript-tools.nvim", dependencies = { "nvim-lua/plenary.nvim", "neovim/nvim-lspconfig" }, config = function() require("typescript-tools").setup({}) vim.keymap.set( "n", "toi", "TSToolsOrganizeImports", { desc = "[T]ypescript [O]rganize [I]mports" } ) end, }, { "folke/neodev.nvim", opts = {}, }, }