return { "VonHeikemen/lsp-zero.nvim", dependencies = { {'williamboman/mason.nvim'}, {'williamboman/mason-lspconfig.nvim'}, {'neovim/nvim-lspconfig'}, {'hrsh7th/nvim-cmp'}, {'hrsh7th/cmp-nvim-lsp'}, }, config = function() -- "Avoids annoying layout shift in the screen" vim.opt.signcolumn = 'yes' -- Adds cmp_nvim_lsp capabilities settings to lspconfig local lspconfig_defaults = require('lspconfig').util.default_config lspconfig_defaults.capabilities = vim.tbl_deep_extend( 'force', lspconfig_defaults.capabilities, require('cmp_nvim_lsp').default_capabilities() ) -- This is where you enable features that only work -- if there is a language server active in the file vim.api.nvim_create_autocmd('LspAttach', { desc = 'LSP actions', callback = function(event) local opts = {buffer = event.buf} 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, }) -- to learn how to use mason.nvim -- read this: https://github.com/VonHeikemen/lsp-zero.nvim/blob/v3.x/doc/md/guides/integrate-with-mason-nvim.md require('mason').setup({}) require('mason-lspconfig').setup({ ensure_installed = {}, handlers = { function(server_name) require('lspconfig')[server_name].setup({}) end, }, }) require('lspconfig').harper_ls.setup { settings = { ["harper-ls"] = { linters = { spell_check = false, spelled_numbers = false, an_a = true, sentence_capitalization = false, unclosed_quotes = true, wrong_quotes = false, long_sentences = false, repeated_words = false, spaces = true, matcher = true, correct_number_suffix = true, number_suffix_capitalization = true, multiple_sequential_pronouns = true, linking_verbs = false, avoid_curses = false, terminating_conjunctions = true } } }, } local cmp = require('cmp') cmp.setup({ sources = { {name = 'nvim_lsp'}, }, snippet = { expand = function(args) -- You need Neovim v0.10 to use vim.snippet vim.snippet.expand(args.body) end, }, -- mapping = cmp.mapping.preset.insert({}), mapping = { [""] = cmp.mapping.select_next_item(), [""] = cmp.mapping.select_prev_item(), [""] = cmp.mapping.complete(), } }) end, -- "VonHeikemen/lsp-zero.nvim", -- dependencies = { -- {'williamboman/mason.nvim'}, -- {'williamboman/mason-lspconfig.nvim'}, -- -- {'neovim/nvim-lspconfig'}, -- {'hrsh7th/nvim-cmp'}, -- {'hrsh7th/cmp-nvim-lsp'}, -- -- {'L3MON4D3/LuaSnip'}, -- }, -- -- config = function() -- local lsp_zero = require('lsp-zero') -- -- lsp_zero.on_attach(function(client, bufnr) -- -- see :help lsp-zero-keybindings -- -- to learn the available actions -- lsp_zero.default_keymaps({buffer = bufnr}) -- end) -- -- -- -- to learn how to use mason.nvim -- -- read this: https://github.com/VonHeikemen/lsp-zero.nvim/blob/v3.x/doc/md/guides/integrate-with-mason-nvim.md -- require('mason').setup({}) -- -- require('mason-lspconfig').setup({ -- ensure_installed = {}, -- handlers = { -- function(server_name) -- require('lspconfig')[server_name].setup({}) -- end, -- }, -- }) -- -- require('lspconfig').harper_ls.setup { -- settings = { -- ["harper-ls"] = { -- linters = { -- spell_check = false, -- spelled_numbers = false, -- an_a = true, -- sentence_capitalization = false, -- unclosed_quotes = true, -- wrong_quotes = false, -- long_sentences = false, -- repeated_words = false, -- spaces = true, -- matcher = true, -- correct_number_suffix = true, -- number_suffix_capitalization = true, -- multiple_sequential_pronouns = true, -- linking_verbs = false, -- avoid_curses = false, -- terminating_conjunctions = true -- } -- } -- }, -- } -- end }