local lsp_list = { -- Python "ruff", "zuban", "djlsp", "basedpyright", -- Javascript / Typescript "eslint", "ts_ls", -- JSON "jsonls", -- Lua "lua_ls", -- Zig "zls", -- Rust "rust_analyzer", -- Go "gopls", -- SASS "somesass_ls", -- HTML "html", "emmet_language_server", -- Bash "bashls", -- TOML "taplo", -- YAML "yamlls", -- Markdown "marksman", -- Docker "dockerls", "docker_compose_language_service", -- Terraform "terraformls", -- Helm "helm_ls", } local tools_list = { -- C# "roslyn-nightly", "netcoredbg", } local ts_parser_list = { "bash", "c", "c_sharp", "cpp", "css", "dockerfile", "go", "gomod", "gosum", "gotmpl", "gowork", "helm", "html", "htmldjango", "http", "javascript", "json", "lua", "markdown", "markdown_inline", "python", "razor", "regex", "rust", "terraform", "toml", "typescript", "vim", "vimdoc", "yaml", "zig", } return { -- Language server installer { "mason-org/mason.nvim", opts = { registries = { "github:mason-org/mason-registry", "github:Crashdummyy/mason-registry", }, ui = { border = "rounded", icons = { package_installed = "✓", package_pending = "➜", package_uninstalled = "✗" } } }, }, -- Language server configuration { "mason-org/mason-lspconfig.nvim", dependencies = { "mason-org/mason.nvim", "neovim/nvim-lspconfig", }, opts = { ensure_installed = lsp_list, automatic_enable = lsp_list, auto_install = true, }, }, -- Language tools installer { "WhoIsSethDaniel/mason-tool-installer.nvim", dependencies = { "mason-org/mason.nvim", "neovim/nvim-lspconfig", }, config = function() require("mason-tool-installer").setup { ensure_installed = tools_list, } end, }, -- Code highlight { "romus204/tree-sitter-manager.nvim", dependencies = {}, -- tree-sitter CLI must be installed system-wide config = function() require("tree-sitter-manager").setup({ ensure_installed = ts_parser_list, border = "rounded", }) end }, -- Code snippets { "L3MON4D3/LuaSnip", dependencies = { "saadparwaiz1/cmp_luasnip", "rafamadriz/friendly-snippets", }, }, { "hrsh7th/nvim-cmp", dependencies = { "hrsh7th/cmp-buffer", "hrsh7th/cmp-cmdline", "hrsh7th/cmp-nvim-lsp", "hrsh7th/cmp-path", }, config = function() local cmp, luasnip = require("cmp"), require("luasnip") require("luasnip.loaders.from_vscode").lazy_load() cmp.setup({ snippet = { expand = function(args) require("luasnip").lsp_expand(args.body) end, }, window = { completion = cmp.config.window.bordered(), documentation = cmp.config.window.bordered(), }, mapping = cmp.mapping.preset.insert({ [""] = cmp.mapping.scroll_docs(-4), [""] = cmp.mapping.scroll_docs(4), [""] = cmp.mapping.complete(), [""] = cmp.mapping.abort(), [""] = cmp.mapping(function(fallback) if cmp.visible() and luasnip.expandable() then luasnip.expand() elseif cmp.visible() and cmp.get_selected_entry() then cmp.confirm({ select = true, }) else fallback() end end), [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() elseif luasnip.locally_jumpable(1) then luasnip.jump(1) else fallback() end end, { "i", "s" }), [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_prev_item() elseif luasnip.locally_jumpable(-1) then luasnip.jump(-1) else fallback() end end, { "i", "s" }), }), sources = cmp.config.sources({ { name = "nvim_lsp" }, { name = "luasnip" }, { name = "render-markdown" } }, { { name = "buffer" }, }), }) cmp.setup.cmdline({ "/", "?" }, { mapping = cmp.mapping.preset.cmdline(), sources = { { name = "buffer" } } }) cmp.setup.cmdline(":", { mapping = cmp.mapping.preset.cmdline(), sources = cmp.config.sources({ { name = "path" } }, { { name = "cmdline" } }), matching = { disallow_symbol_nonprefix_matching = false } }) end, }, -- Python specific { "Vimjas/vim-python-pep8-indent", }, -- C# specific { "seblyng/roslyn.nvim", ft = { "cs", "razor" } }, }