-- neovim/neovim-lspconfig local function on_attach(client, bufnr) local opts = { silent = true, noremap = true, } local function buf_nmap(mapping, cmd) vim.api.nvim_buf_set_keymap(bufnr, "n", mapping, cmd, opts) end -- Jump to definition buf_nmap("gd", "lua vim.lsp.buf.definition()") -- Format current buffer on write vim.api.nvim_command([[autocmd BufWritePre lua vim.lsp.buf.format()]]) -- Show diagnostics for current line buf_nmap("dd", "lua vim.diagnostic.open_float()") -- Jump between diagnostic messages buf_nmap("dj", "lua vim.diagnostic.goto_next()") buf_nmap("dk", "lua vim.diagnostic.goto_prev()") -- Rename symbol under cursor buf_nmap("dr", "lua vim.lsp.buf.rename()") -- Show hover info buf_nmap("df", "lua vim.lsp.buf.hover()") buf_nmap("du", "lua vim.lsp.buf.references()") buf_nmap("da", "lua vim.lsp.buf.code_action()") end -- For cmp autocomplete local capabilities = require('cmp_nvim_lsp').default_capabilities() -- Comes with clang vim.lsp.config('clangd', { on_attach = on_attach, capabilities = capabilities }) vim.lsp.enable('clangd') -- NPM: dockerfile-language-server-nodejs -- vim.lsp.config('dockerls', { -- capabilities = capabilities -- }) -- vim.lsp.enable('dockerls') -- Pacman: haskell-language-server -- AUR: haskell-language-server-bin -- GH: https://github.com/haskell/haskell-language-server -- vim.lsp.config('hls', { -- on_attach = on_attach, -- settings = { -- haskell = { -- formattingProvider = "stylish-haskell" -- } -- }, -- capabilities = capabilities -- }) -- Pacman: vieter-vls (requires my Vieter repository) -- GH: https://github.com/vlang/vls -- require'lspconfig'.vls.setup{ -- cmd = {'vls'}, -- filetypes = {'v'}, -- on_attach = on_attach -- } -- Pacman: rust-analyzer -- GH: https://github.com/rust-analyzer/rust-analyzer vim.lsp.config('rust_analyzer', { on_attach = on_attach, capabilities = capabilities }) vim.lsp.enable('rust_analyzer') -- Installed using R shell: -- `install.packages('languageserver')` -- GH: https://github.com/REditorSupport/languageserver -- vim.lsp.config('r_language_server', { -- capabilities = capabilities -- }) -- Installed using Go CLI: -- go install github.com/nametake/golangci-lint-langserver@latest -- go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest vim.lsp.config('gopls', { on_attach = on_attach, capabilities = capabilities }) vim.lsp.enable('gopls') vim.lsp.config('texlab', { on_attach = on_attach, capabilities = capabilities }) vim.lsp.enable('texlab') vim.lsp.config('ltex_plus', { on_attach = on_attach, capabilities = capabilities }) vim.lsp.enable('ltex_plus') -- Fix that stops rust-analyzer interrupting typing when a request is cancelled for _, method in ipairs({ 'textDocument/diagnostic', 'workspace/diagnostic' }) do local default_diagnostic_handler = vim.lsp.handlers[method] vim.lsp.handlers[method] = function(err, result, context, config) if err ~= nil and err.code == -32802 then return end return default_diagnostic_handler(err, result, context, config) end end