local lspconfig = require('lspconfig') local opts = { noremap = true, silent = true } local on_attach = function(client, bufnr) -- Enable completion vim.api.nvim_buf_set_option(bufnr, 'omnifunc') -- Mappings vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gD', 'lua vim.lsp.buf.declaration()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', 'lua vim.lsp.buf.definition()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', 'lua vim.lsp.buf.hover()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gi', 'lua vim.lsp.buf.implementation()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', '', 'lua vim.lsp.buf.signature_help()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'D', 'lua vim.lsp.buf.type_definition()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'rn', 'lua vim.lsp.buf.rename()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'ca', 'lua vim.lsp.buf.code_action()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gr', 'lua vim.lsp.buf.references()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'f', 'lua vim.lsp.buf.formatting()', opts) end local capabilities = require("cmp_nvim_lsp").update_capabilities(vim.lsp.protocol.make_client_capabilities()) lspconfig.ccls.setup { on_attach = on_attach, capabilities = capabilities, init_options = { cache = { directory = vim.fn.expand("$HOME/.cache/ccls/") } } } lspconfig.rust_analyzer.setup { 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.java_language_server.setup { 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.racket_langserver.setup {}