return { { "VonHeikemen/lsp-zero.nvim", branch = "v4.x", lazy = true, config = false, }, { "williamboman/mason.nvim", lazy = false, config = true, }, -- Autocompletion { "hrsh7th/nvim-cmp", event = "InsertEnter", dependencies = { { "L3MON4D3/LuaSnip" }, }, config = function() local cmp = require('cmp') cmp.setup({ sources = { { name = "nvim_lsp" }, }, mapping = cmp.mapping.preset.insert({ [''] = cmp.mapping.complete(), }), snippet = { expand = function(args) vim.snippet.expand(args.body) end, }, }) end }, -- LSP { "neovim/nvim-lspconfig", cmd = { 'LspInfo', 'LspInstall', 'LspStart' }, event = { 'BufReadPre', 'BufNewFile' }, dependencies = { { "hrsh7th/cmp-nvim-lsp" }, { "williamboman/mason.nvim" }, { "williamboman/mason-lspconfig.nvim" }, }, config = function() local lsp_zero = require('lsp-zero') -- lsp_attach is where you enable features that only work -- if there is a language server active in the file local lsp_attach = function(client, bufnr) local opts = { buffer = bufnr } vim.keymap.set('n', 'K', 'lua vim.lsp.buf.hover()', opts) vim.keymap.set('n', 'gd', 'lua vim.lsp.buf.definition()', opts) vim.keymap.set('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) vim.keymap.set('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) vim.keymap.set('n', 'go', 'lua vim.lsp.buf.type_definition()', opts) vim.keymap.set('n', 'gr', 'lua vim.lsp.buf.references()', opts) vim.keymap.set('n', 'gs', 'lua vim.lsp.buf.signature_help()', opts) vim.keymap.set('n', '', 'lua vim.lsp.buf.rename()', opts) vim.keymap.set({ 'n', 'x' }, '', 'lua vim.lsp.buf.format({async = true})', opts) vim.keymap.set('n', '', 'lua vim.lsp.buf.code_action()', opts) end lsp_zero.extend_lspconfig({ sign_text = true, lsp_attach = lsp_attach, capabilities = require('cmp_nvim_lsp').default_capabilities() }) require('mason-lspconfig').setup({ ensure_installed = {}, handlers = { function(server_name) require('lspconfig')[server_name].setup({}) end, lua_ls = function() require('lspconfig').lua_ls.setup({ settings = { Lua = { runtime = { version = 'LuaJIT', path = vim.split(package.path, ';'), }, diagnostics = { globals = { 'vim' }, }, workspace = { library = { [vim.fn.expand('$VIMRUNTIME/lua')] = true, [vim.fn.expand('$VIMRUNTIME/lua/vim/lsp')] = true, }, }, }, }, }) end, } }) end } }