local lspconfig = require('lspconfig') local on_attach = function(client, bufnr) local opts = { noremap = true, silent = true } local function key(mode, keys, cmd) vim.api.nvim_buf_set_keymap(bufnr, mode, keys, cmd, opts) end local function opt(...) vim.api.nvim_buf_set_option(bufnr, ...) end -- Enable completion opt('omnifunc', 'v:lua.vim.lsp.omnifunc') -- Mappings key('n', 'cD', 'lua vim.lsp.buf.declaration()') key('n', 'cd', 'lua vim.lsp.buf.definition()') key('n', 'ch', 'lua vim.lsp.buf.hover()') key('n', 'ci', 'lua vim.lsp.buf.implementation()') key('n', 'sh', 'lua vim.lsp.buf.signature_help()') key('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()') key('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()') key('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))') key('n', 'D', 'lua vim.lsp.buf.type_definition()') key('n', 'rn', 'lua vim.lsp.buf.rename()') key('n', 'ca', 'lua vim.lsp.buf.code_action()') key('n', 'cr', 'lua vim.lsp.buf.references()') key('n', 'f', 'lua vim.lsp.buf.formatting()') key('n', 'cs', 'lua vim.diagnostic.open_float()') end local coq = require('coq') lspconfig.ccls.setup(coq.lsp_ensure_capabilities{ on_attach = on_attach, capabilities = capabilities, init_options = { cache = { directory = vim.fn.expand("$HOME/.cache/ccls/") } } }) lspconfig.rust_analyzer.setup(coq.lsp_ensure_capabilities{ on_attach = on_attach, capabilities = capabilities, settings = { ["rust-analyzer"] = { checkOnSave = { command = "clippy" }, diagnostics = { disabled = { "mismatched-arg-count" } } } } }) lspconfig.tsserver.setup { on_attach = on_attach, capabilities = capabilities } lspconfig.tsserver.setup(coq.lsp_ensure_capabilities()) lspconfig.java_language_server.setup(coq.lsp_ensure_capabilities{ on_attach = on_attach, capabilities = capabilities, cmd = { "/usr/share/java/java-language-server/lang_server_linux.sh" } }) lspconfig.vuels.setup { on_attach = on_attach, capabilities = capabilities } lspconfig.vuels.setup(coq.lsp_ensure_capabilities()) lspconfig.racket_langserver.setup {}