return { { "VonHeikemen/lsp-zero.nvim", branch = "v2.x", lazy = true, config = function() require("lsp-zero.settings").preset({}) end, }, { "hrsh7th/nvim-cmp", event = "InsertEnter", dependencies = { { "L3MON4D3/LuaSnip" }, }, config = function() require("lsp-zero.cmp").extend() local cmp = require("cmp") local cmp_action = require("lsp-zero.cmp").action() cmp.setup({ completion = { completeopt = "menu,menuone", }, mapping = { [""] = cmp.mapping.scroll_docs(-4), [""] = cmp.mapping.scroll_docs(4), [""] = cmp.mapping.complete(), [""] = cmp.mapping.close(), [""] = cmp.mapping.confirm { behavior = cmp.ConfirmBehavior.Insert, select = true, }, [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() elseif require("luasnip").expand_or_jumpable() then vim.fn.feedkeys(vim.api.nvim_replace_termcodes("luasnip-expand-or-jump", true, true, true), "") else fallback() end end, { "i", "s", }), [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_prev_item() elseif require("luasnip").jumpable(-1) then vim.fn.feedkeys(vim.api.nvim_replace_termcodes("luasnip-jump-prev", true, true, true), "") else fallback() end end, { "i", "s", }), }, sources = { { name = "nvim_lsp" }, { name = "luasnip" }, { name = "buffer" }, { name = "nvim_lua" }, { name = "path" }, }, }) end, }, -- LSP { "neovim/nvim-lspconfig", cmd = "LspInfo", event = { "BufReadPre", "BufNewFile" }, dependencies = { { "hrsh7th/cmp-nvim-lsp" }, { "williamboman/mason-lspconfig.nvim" }, { "williamboman/mason.nvim" }, }, config = function() require('mason').setup({}) require('mason-lspconfig').setup({ -- Replace the language servers listed here -- with the ones you want to install ensure_installed = { "lua_ls", "gopls", "pylsp", "tsserver", }, handlers = { function(server_name) require('lspconfig')[server_name].setup({}) end, } }) local lsp = require("lsp-zero") lsp.on_attach(function(client, bufnr) lsp.default_keymaps({ buffer = bufnr }) end) local nvim_lsp = require("lspconfig") nvim_lsp.lua_ls.setup(lsp.nvim_lua_ls()) nvim_lsp.gopls.setup({}) nvim_lsp.dartls.setup({}) nvim_lsp.tsserver.setup({}) nvim_lsp.pylsp.setup({ settings = { pylsp = { plugins = { black = { enabled = true }, isort = { enabled = true, profile = "black" }, }, }, }, }) lsp.setup() end, }, }