From 4420269a8c8d9d6baa6bc3a9ba355935f859b6d0 Mon Sep 17 00:00:00 2001 From: Toby Vincent Date: Fri, 14 Oct 2022 16:00:37 -0500 Subject: feat(nvim): add capability condition to lsp keymaps --- nvim/.config/nvim/lua/tobyvin/lsp/init.lua | 68 +++++++++++++++++++++--------- 1 file changed, 49 insertions(+), 19 deletions(-) (limited to 'nvim') diff --git a/nvim/.config/nvim/lua/tobyvin/lsp/init.lua b/nvim/.config/nvim/lua/tobyvin/lsp/init.lua index c5b4ff6..b1e46bd 100644 --- a/nvim/.config/nvim/lua/tobyvin/lsp/init.lua +++ b/nvim/.config/nvim/lua/tobyvin/lsp/init.lua @@ -8,30 +8,60 @@ local lsp = { } lsp.on_attach = function(client, bufnr) + local preview = lsp.handlers.preview + utils.keymap.group("n", "l", { desc = "LSP", buffer = bufnr }) + vim.keymap.set("n", "li", "LspInfo", { desc = "LSP info" }) + vim.keymap.set("n", "k", utils.documentation.open, { desc = "Documentation", buffer = bufnr }) + + if client.server_capabilities.hoverProvider then + vim.keymap.set("n", "K", vim.lsp.buf.hover, { desc = "Hover", buffer = bufnr }) + end + + if client.server_capabilities.signatureHelpProvider then + vim.keymap.set("n", "", vim.lsp.buf.signature_help, { desc = "Signature Help", buffer = bufnr }) + end + + if client.server_capabilities.hoverProvider then + vim.keymap.set("n", "K", vim.lsp.buf.hover, { desc = "Hover", buffer = bufnr }) + end + + if client.server_capabilities.codeActionProvider then + vim.keymap.set("n", "la", vim.lsp.buf.code_action, { desc = "Code Action", buffer = bufnr }) + end + + if client.server_capabilities.codeLensProvider then + vim.keymap.set("n", "ll", vim.lsp.codelens.run, { desc = "Codelens", buffer = bufnr }) + end + + if client.server_capabilities.renameProvider then + vim.keymap.set("n", "lr", vim.lsp.buf.rename, { desc = "Rename", buffer = bufnr }) + end + if client.server_capabilities.definitionProvider then vim.bo[bufnr].tagfunc = "v:lua.vim.lsp.tagfunc" + vim.keymap.set("n", "gd", vim.lsp.buf.definition, { desc = "Definition", buffer = bufnr }) + vim.keymap.set("n", "g", preview.definition, { desc = "Definition", buffer = bufnr }) end - vim.keymap.set("n", "K", vim.lsp.buf.hover, { desc = "Hover", buffer = bufnr }) - vim.keymap.set("n", "", vim.lsp.buf.signature_help, { desc = "Signature Help", buffer = bufnr }) - vim.keymap.set("n", "k", utils.documentation.open, { desc = "Documentation", buffer = bufnr }) - vim.keymap.set("n", "gd", vim.lsp.buf.definition, { desc = "Definition", buffer = bufnr }) - vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { desc = "Declaration", buffer = bufnr }) - vim.keymap.set("n", "gt", vim.lsp.buf.type_definition, { desc = "Type", buffer = bufnr }) - vim.keymap.set("n", "gi", vim.lsp.buf.implementation, { desc = "Implementation", buffer = bufnr }) - vim.keymap.set("n", "gr", vim.lsp.buf.references, { desc = "References", buffer = bufnr }) - - vim.keymap.set("n", "g", lsp.handlers.preview.definition, { desc = "Definition", buffer = bufnr }) - vim.keymap.set("n", "g", lsp.handlers.preview.declaration, { desc = "Declaration", buffer = bufnr }) - vim.keymap.set("n", "g", lsp.handlers.preview.type_definition, { desc = "Type", buffer = bufnr }) - vim.keymap.set("n", "g", lsp.handlers.preview.implementation, { desc = "Implementation", buffer = bufnr }) - vim.keymap.set("n", "g", lsp.handlers.preview.references, { desc = "References", buffer = bufnr }) + if client.server_capabilities.declarationProvider then + vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { desc = "Declaration", buffer = bufnr }) + vim.keymap.set("n", "g", preview.declaration, { desc = "Preview Declaration", buffer = bufnr }) + end - utils.keymap.group("n", "l", { desc = "LSP", buffer = bufnr }) - vim.keymap.set("n", "li", "LspInfo", { desc = "LSP info" }) - vim.keymap.set("n", "lr", vim.lsp.buf.rename, { desc = "Rename", buffer = bufnr }) - vim.keymap.set("n", "la", vim.lsp.buf.code_action, { desc = "Code Action", buffer = bufnr }) - vim.keymap.set("n", "ll", vim.lsp.codelens.run, { desc = "Codelens", buffer = bufnr }) + if client.server_capabilities.typeDefinitionProvider then + vim.keymap.set("n", "gt", vim.lsp.buf.type_definition, { desc = "Type", buffer = bufnr }) + vim.keymap.set("n", "g", preview.type_definition, { desc = "Preview Type", buffer = bufnr }) + end + + if client.server_capabilities.implementationProvider then + vim.keymap.set("n", "gi", vim.lsp.buf.implementation, { desc = "Implementation", buffer = bufnr }) + vim.keymap.set("n", "g", preview.implementation, { desc = "Preview Implementation", buffer = bufnr }) + end + + if client.server_capabilities.referencesProvider then + vim.keymap.set("n", "gr", vim.lsp.buf.references, { desc = "References", buffer = bufnr }) + vim.keymap.set("n", "g", preview.references, { desc = "Preview References", buffer = bufnr }) + end -- disabled in favor of https://github.com/nvim-treesitter/nvim-treesitter-refactor#highlight-definitions lsp.highlighting.on_attach(client, bufnr) -- cgit v1.2.3-70-g09d2