local M = {} local cmp_nvim_lsp = require 'cmp_nvim_lsp' M.capabilities = vim.lsp.protocol.make_client_capabilities() M.capabilities.textDocument.completion.completionItem.snippetSupport = true -- M.capabilities.offsetEncoding = { "utf-16" } M.capabilities = cmp_nvim_lsp.default_capabilities(M.capabilities) -- vim.cmd [[autocmd CursorHold,CursorHoldI * lua vim.diagnostic.open_float(nil, {focus=false, scope="cursor"})]] M.setup = function() local config = { virtual_text = true, signs = false, underline = true, update_in_insert = true, severity_sort = true, float = { focusable = true, style = 'minimal', border = 'rounded', source = 'always', header = '', prefix = '', }, } vim.diagnostic.config(config) vim.lsp.handlers['textDocument/hover'] = vim.lsp.with(vim.lsp.handlers.hover, { border = 'rounded', }) vim.lsp.handlers['textDocument/signatureHelp'] = vim.lsp.with(vim.lsp.handlers.signature_help, { border = 'rounded', }) --[[ local on_references = vim.lsp.handlers['textDocument/references'] ]] --[[ vim.lsp.handlers['textDocument/references'] = vim.lsp.with(on_references, { ]] --[[ -- Use location list instead of quickfix list ]] --[[ loclist = true, ]] --[[ }) ]] end local function lsp_keymaps(bufnr) local opts = { noremap = true, silent = true } local keymap = vim.api.nvim_buf_set_keymap keymap(bufnr, 'n', 'gD', 'lua vim.lsp.buf.declaration()', opts) keymap(bufnr, 'n', 'gd', 'lua vim.lsp.buf.definition()', opts) keymap(bufnr, 'n', 'K', 'lua vim.lsp.buf.hover()', opts) keymap(bufnr, 'n', 'gI', 'lua vim.lsp.buf.implementation()', opts) keymap(bufnr, 'n', 'gr', 'lua vim.lsp.buf.references()', opts) keymap(bufnr, 'n', 'gl', 'lua vim.diagnostic.open_float()', opts) keymap(bufnr, 'n', 'lf', 'lua vim.lsp.buf.format { async = true }', opts) keymap(bufnr, 'n', 'li', 'LspInfo', opts) keymap(bufnr, 'n', 'lI', 'LspInstallInfo', opts) keymap(bufnr, 'n', 'la', 'lua vim.lsp.buf.code_action()', opts) keymap(bufnr, 'n', 'lj', 'lua vim.diagnostic.goto_next({buffer=0})', opts) keymap(bufnr, 'n', 'lk', 'lua vim.diagnostic.goto_prev({buffer=0})', opts) keymap(bufnr, 'n', 'lr', 'lua vim.lsp.buf.rename()', opts) keymap(bufnr, 'n', 'ls', 'lua vim.lsp.buf.signature_help()', opts) keymap(bufnr, 'n', 'lq', 'lua vim.diagnostic.setloclist()', opts) keymap(bufnr, 'n', 'e', 'lua vim.diagnostic.open_float()', opts) end M.on_attach = function(client, bufnr) --[[ vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') ]] lsp_keymaps(bufnr) if client.name == 'sumneko_lua' then client.server_capabilities.documentFormattingProvider = false end if client.name == 'clangd' then client.server_capabilities.documentFormattingProvider = false end if client.name == 'gopls' then client.server_capabilities.documentFormattingProvider = false end if client.name == 'jdtls' then client.server_capabilities.documentFormattingProvider = false end if client.name == 'jdt.ls' then client.server_capabilities.documentFormattingProvider = false vim.lsp.codelens.refresh() if JAVA_DAP_ACTIVE then require('jdtls').setup_dap { hotcodereplace = 'auto' } require('jdtls.dap').setup_dap_main_class_configs() end end local ft = vim.api.nvim_buf_get_option(bufnr, 'filetype') local nls = require 'config.plugins.null-ls' local enable = false if nls.has_formatter(ft) then enable = client.name == 'null-ls' else enable = not (client.name == 'null-ls') end if client.name == 'tsserver' then enable = false end -- util.info(client.name .. " " .. (enable and "yes" or "no"), "format") client.server_capabilities.documentFormattingProvider = enable end return M