local lsp_status = require('lsp-status') lsp_status.register_progress() -- enable snippet support --local capabilities = vim.lsp.protocol.make_client_capabilities() --capabilities.textDocument.completion.completionItem.snippetSupport = true --capabilities.textDocument.completion.completionItem.resolveSupport = { -- properties = { -- 'documentation', -- 'detail', -- 'additionalTextEdits', -- } --} --capabilities = vim.tbl_extend('keep', capabilities or {}, lsp_status.capabilities) -- Use an on_attach function to only map the following keys -- after the language server attaches to the current buffer local on_attach = function(client, bufnr) local function buf_set_keymap(...) vim.keymap.set(...) end local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end --Enable completion triggered by vim.bo[bufnr].omnifunc = 'v:lua.vim.lsp.omnifunc' -- Mappings. local opts = { noremap=true, silent=true, buffer=bufnr } local loud = { noremap=true, buffer=bufnr } -- See `:help vim.lsp.*` for documentation on any of the below functions buf_set_keymap('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) buf_set_keymap('n', 'gd', 'lua vim.lsp.buf.definition()', opts) buf_set_keymap('n', 'K', 'lua vim.lsp.buf.hover()', opts) buf_set_keymap('v', 'K', 'lua vim.lsp.buf.hover()', opts) buf_set_keymap('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) buf_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', opts) buf_set_keymap('n', 'D', 'lua vim.lsp.buf.type_definition()', opts) buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', opts) buf_set_keymap('n', '', 'lua vim.lsp.buf.code_action()', loud) buf_set_keymap('n', '', 'lua vim.codelens.run()', loud) buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references()', opts) buf_set_keymap('n', '', 'lua vim.diagnostic.open_float()', opts) buf_set_keymap('n', '[d', 'lua vim.lsp.diagnostic.goto_prev()', opts) buf_set_keymap('n', ']d', 'lua vim.lsp.diagnostic.goto_next()', opts) buf_set_keymap('n', '', 'lua vim.lsp.diagnostic.set_loclist()', opts) buf_set_keymap("n", "f", "lua vim.lsp.buf.formatting()", opts) buf_set_keymap("n", "dc", function() require("dap").continue() end, opts) buf_set_keymap("n", "dr", function() require("dap").repl.toggle() end, opts) buf_set_keymap("n", "dK", function() require("dap.ui.widgets").hover() end, opts) buf_set_keymap("n", "dt", function() require("dap").toggle_breakpoint() end, opts) buf_set_keymap("n", "dso", function() require("dap").step_over() end, opts) buf_set_keymap("n", "dsi", function() require("dap").step_into() end, opts) buf_set_keymap("n", "dl", function() require("dap").run_last() end, opts) lsp_status.on_attach(client) --require'completion'.on_attach(client, bufnr) end require("lsp.metals")(on_attach) require("lsp.typescript")(on_attach) vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with( vim.lsp.diagnostic.on_publish_diagnostics, { virtual_text = false, underline = true, signs = true, } ) vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with( vim.lsp.handlers.signature_help, { silent = true, focusable = false } ) vim.cmd [[autocmd CursorHoldI * silent! lua vim.lsp.buf.signature_help()]] vim.cmd [[autocmd CursorHold * lua vim.diagnostic.open_float({max_width = 100, focusable = false})]]