return { { { 'VonHeikemen/lsp-zero.nvim', branch = 'v3.x', lazy = true, config = false, init = function() -- Disable automatic setup, we are doing it manually vim.g.lsp_zero_extend_cmp = 0 vim.g.lsp_zero_extend_lspconfig = 0 end }, { 'williamboman/mason.nvim', lazy = false, config = true }, -- Autocompletion { 'hrsh7th/nvim-cmp', event = 'InsertEnter', dependencies = { 'L3MON4D3/LuaSnip', 'hrsh7th/cmp-buffer', 'hrsh7th/cmp-path', 'hrsh7th/cmp-cmdline', 'hrsh7th/cmp-nvim-lsp-signature-help', 'saadparwaiz1/cmp_luasnip' }, config = function() local lsp_zero = require('lsp-zero') lsp_zero.extend_cmp() local cmp = require('cmp') cmp.setup({ sources = { { name = 'path' }, { name = 'nvim_lsp' }, { name = 'nvim_lua' }, { name = 'luasnip', keyword_length = 2 }, { name = 'buffer', keyword_length = 3 }, { name = 'nvim_lsp_signature_help' } }, formatting = lsp_zero.cmp_format(), mapping = cmp.mapping.preset.insert({ [''] = cmp.mapping.select_prev_item(cmp_select), [''] = cmp.mapping.select_next_item(cmp_select), [''] = cmp.mapping.confirm({ select = true }), [''] = cmp.mapping.complete() }), snippet = { expand = function(args) require('luasnip').lsp_expand(args.body) end } }) cmp.setup.filetype('gitcommit', { sources = cmp.config.sources({ { name = 'git' } }, { { 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' } }) }) end }, -- LSP { 'neovim/nvim-lspconfig', cmd = { 'LspInfo', 'LspInstall', 'LspStart' }, event = { 'BufReadPre', 'BufNewFile' }, dependencies = { 'hrsh7th/cmp-nvim-lsp', 'williamboman/mason-lspconfig.nvim', 'folke/trouble.nvim' -- required for the current config }, config = function() local lsp_zero = require('lsp-zero') lsp_zero.extend_lspconfig() lsp_zero.on_attach(function(client, bufnr) local opts = { buffer = bufnr, remap = false } vim.keymap.set("n", "gd", function() vim.lsp.buf.definition() end, opts) vim.keymap.set("n", "K", function() vim.lsp.buf.hover() end, opts) vim.keymap.set("n", "vws", function() vim.lsp.buf.workspace_symbol() end, opts) vim.keymap.set("n", "vd", function() vim.diagnostic.open_float() end, opts) vim.keymap.set("n", "[d", function() vim.diagnostic.goto_next() end, opts) vim.keymap.set("n", "]d", function() vim.diagnostic.goto_prev() end, opts) vim.keymap.set("n", "vca", function() vim.lsp.buf.code_action() end, opts) -- vim.keymap.set("n", "vrr", function() vim.lsp.buf.references() end, opts) vim.keymap.set("n", "vrr", "Trouble lsp_references", opts) vim.keymap.set("n", "vrn", function() vim.lsp.buf.rename() end, opts) vim.keymap.set("i", "", function() vim.lsp.buf.signature_help() end, opts) vim.keymap.set("n", "", function() vim.lsp.buf.code_action() end, opts) vim.keymap.set("i", "", function() vim.lsp.buf.code_action() end, opts) end) require('mason-lspconfig').setup({ ensure_installed = { 'clangd', 'pyright', 'cmake', 'texlab' }, handlers = { lsp_zero.default_setup, lua_ls = function() local lua_opts = lsp_zero.nvim_lua_ls() require('lspconfig').lua_ls.setup(lua_opts) end } }) require('lspconfig')['clangd'].setup { cmd = { "clangd", "--query-driver=/**/*g++", "--offset-encoding=utf-16" } } end } } }