aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorToby Vincent <tobyv13@gmail.com>2022-10-14 16:00:37 -0500
committerToby Vincent <tobyv13@gmail.com>2022-10-14 16:00:37 -0500
commit4420269a8c8d9d6baa6bc3a9ba355935f859b6d0 (patch)
treea10681e23536971dc4c9321b04c31a9b424e949f
parent6254720bd6ff09926199701bec4afece70baa16b (diff)
feat(nvim): add capability condition to lsp keymaps
-rw-r--r--nvim/.config/nvim/lua/tobyvin/lsp/init.lua68
1 files changed, 49 insertions, 19 deletions
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", "<leader>l", { desc = "LSP", buffer = bufnr })
+ vim.keymap.set("n", "<leader>li", "<CMD>LspInfo<CR>", { desc = "LSP info" })
+ vim.keymap.set("n", "<leader>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", "<C-k>", 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", "<leader>la", vim.lsp.buf.code_action, { desc = "Code Action", buffer = bufnr })
+ end
+
+ if client.server_capabilities.codeLensProvider then
+ vim.keymap.set("n", "<leader>ll", vim.lsp.codelens.run, { desc = "Codelens", buffer = bufnr })
+ end
+
+ if client.server_capabilities.renameProvider then
+ vim.keymap.set("n", "<leader>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<C-d>", preview.definition, { desc = "Definition", buffer = bufnr })
end
- vim.keymap.set("n", "K", vim.lsp.buf.hover, { desc = "Hover", buffer = bufnr })
- vim.keymap.set("n", "<C-k>", vim.lsp.buf.signature_help, { desc = "Signature Help", buffer = bufnr })
- vim.keymap.set("n", "<leader>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<C-d>", lsp.handlers.preview.definition, { desc = "Definition", buffer = bufnr })
- vim.keymap.set("n", "g<CS-D>", lsp.handlers.preview.declaration, { desc = "Declaration", buffer = bufnr })
- vim.keymap.set("n", "g<C-t>", lsp.handlers.preview.type_definition, { desc = "Type", buffer = bufnr })
- vim.keymap.set("n", "g<C-i>", lsp.handlers.preview.implementation, { desc = "Implementation", buffer = bufnr })
- vim.keymap.set("n", "g<C-r>", 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<CS-D>", preview.declaration, { desc = "Preview Declaration", buffer = bufnr })
+ end
- utils.keymap.group("n", "<leader>l", { desc = "LSP", buffer = bufnr })
- vim.keymap.set("n", "<leader>li", "<CMD>LspInfo<CR>", { desc = "LSP info" })
- vim.keymap.set("n", "<leader>lr", vim.lsp.buf.rename, { desc = "Rename", buffer = bufnr })
- vim.keymap.set("n", "<leader>la", vim.lsp.buf.code_action, { desc = "Code Action", buffer = bufnr })
- vim.keymap.set("n", "<leader>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<C-t>", 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<C-i>", 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<C-r>", 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)