return { { "mason-org/mason.nvim", opts = { ui = { icons = { package_installed = "✓", package_pending = "➜", package_uninstalled = "✗", }, }, ensure_installed = { -- LSP servers "clangd", -- C / C++ "gopls", -- Go "python-lsp-server", -- Python "bash-language-server", -- Bash "zls", -- Zig "lua-language-server", -- Lua -- Formatters / Linters "stylua", -- Lua formatter "shfmt", -- Shell formatter "black", -- Python formatter "clang-format", -- C/C++ formatter "goimports", -- Go formatter }, }, }, { "hrsh7th/nvim-cmp", dependencies = { "hrsh7th/cmp-nvim-lsp", "hrsh7th/cmp-buffer", "hrsh7th/cmp-path", "hrsh7th/cmp-nvim-lua", "saadparwaiz1/cmp_luasnip", "L3MON4D3/LuaSnip", "onsails/lspkind.nvim", -- icone carine nel completamento }, opts = function(_, opts) local cmp = require("cmp") local luasnip = require("luasnip") local lspkind = require("lspkind") -- Carica snippet require("luasnip.loaders.from_vscode").lazy_load() opts.snippet = { expand = function(args) luasnip.lsp_expand(args.body) end, } opts.mapping = vim.tbl_extend("force", opts.mapping, { [""] = cmp.mapping.complete(), [""] = cmp.mapping.confirm({ select = true }), [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() elseif luasnip.expand_or_jumpable() then luasnip.expand_or_jump() else fallback() end end, { "i", "s" }), [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_prev_item() elseif luasnip.jumpable(-1) then luasnip.jump(-1) else fallback() end end, { "i", "s" }), }) opts.sources = cmp.config.sources({ { name = "nvim_lsp" }, { name = "luasnip" }, { name = "nvim_lua" }, { name = "buffer" }, { name = "path" }, }) opts.formatting = { format = lspkind.cmp_format({ mode = "symbol_text", maxwidth = 50, ellipsis_char = "...", }), } return opts end, }, }