return { 'neovim/nvim-lspconfig', config = function () local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities.textDocument.completion.completionItem.snippetSupport = true vim.diagnostic.config ({ virtual_text = { source = 'always', }, severity_sort = true, float = { source = 'always' } }) vim.lsp.config('*', { capabilities = capabilities, -- TODO: Does this do anything? }) -- Auto set keymaps and other settings on LSP attach vim.api.nvim_create_autocmd('LspAttach', { group = vim.api.nvim_create_augroup('my.lsp', {}), callback = function(args) local bufnr = args.buf -- TODO: Does this do anything? vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') -- Keyboard Mappings local bufopts = { noremap = true, silent = true, buffer = bufnr } vim.keymap.set('n', '', vim.diagnostic.goto_prev, bufopts) vim.keymap.set('n', '', vim.diagnostic.goto_next, bufopts) -- vim.keymap.set('n', 'gl', vim.diagnostic.open_float, bufopts) vim.keymap.set('n', 'ga', vim.lsp.buf.code_action, bufopts) vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts) vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts) vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts) vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts) vim.keymap.set('n', 'gs', vim.lsp.buf.signature_help, bufopts) vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, bufopts) vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts) vim.keymap.set('n', 'f', function() vim.lsp.buf.format { async = true } end, bufopts) vim.keymap.set('n', 'r', vim.lsp.buf.rename, bufopts) end, }) vim.lsp.enable('gdscript') end }