--[[ Settings for main nvim-lspconfg plugin --]] -- Setup language servers. local lspconfig = require('lspconfig') local luasnip = require('luasnip') lspconfig.pyright.setup {} lspconfig.tsserver.setup {} lspconfig.rust_analyzer.setup { -- Server-specific settings. See `:help lspconfig-setup` settings = { ['rust-analyzer'] = {}, }, } -- Global mappings. -- See `:help vim.diagnostic.*` for documentation on any of the below functions vim.keymap.set('n', 'ple', vim.diagnostic.open_float) vim.keymap.set('n', 'pln', vim.diagnostic.goto_prev) vim.keymap.set('n', 'pl?', vim.diagnostic.goto_next) vim.keymap.set('n', 'plq', vim.diagnostic.setloclist) -- Use LspAttach autocommand to only map the following keys -- after the language server attaches to the current buffer vim.api.nvim_create_autocmd('LspAttach', { group = vim.api.nvim_create_augroup('UserLspConfig', {}), callback = function(ev) -- Enable completion triggered by vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc' -- Buffer local mappings. -- See `:help vim.lsp.*` for documentation on any of the below functions local opts = { buffer = ev.buf } vim.keymap.set('n', 'plD', vim.lsp.buf.declaration, opts) vim.keymap.set('n', 'pld', vim.lsp.buf.definition, opts) vim.keymap.set('n', 'plh', vim.lsp.buf.hover, opts) vim.keymap.set('n', 'pli', vim.lsp.buf.implementation, opts) vim.keymap.set('n', 'pls', vim.lsp.buf.signature_help, opts) vim.keymap.set('n', 'plwa', vim.lsp.buf.add_workspace_folder, opts) vim.keymap.set('n', 'plwr', vim.lsp.buf.remove_workspace_folder, opts) vim.keymap.set('n', 'plwl', function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, opts) vim.keymap.set('n', 'plt', vim.lsp.buf.type_definition, opts) vim.keymap.set('n', 'plr', vim.lsp.buf.rename, opts) vim.keymap.set({ 'n', 'v' }, 'plca', vim.lsp.buf.code_action, opts) vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) vim.keymap.set('n', 'pll', function() vim.lsp.buf.format { async = true } end, opts) end, }) -- Add additional capabilities supported by nvim-cmp local capabilities = require("cmp_nvim_lsp").default_capabilities() local lspconfig = require('lspconfig') -- Enable some language servers with the additional completion capabilities offered by nvim-cmp local servers = { 'rust_analyzer', 'tsserver' } for _, lsp in ipairs(servers) do lspconfig[lsp].setup { -- on_attach = my_custom_on_attach, capabilities = capabilities, } end -- nvim-cmp setup local cmp = require 'cmp' cmp.setup { snippet = { expand = function(args) luasnip.lsp_expand(args.body) end, }, mapping = cmp.mapping.preset.insert({ [''] = cmp.mapping.scroll_docs(-4), -- Up [''] = cmp.mapping.scroll_docs(4), -- Down -- C-b (back) C-f (forward) for snippet placeholder navigation. [''] = cmp.mapping.complete(), [''] = cmp.mapping.confirm { behavior = cmp.ConfirmBehavior.Replace, 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' }), }), sources = { { name = 'nvim_lsp' }, { name = 'luasnip' }, }, }