diff --git a/lua/lazyvim/config/keymaps.lua b/lua/lazyvim/config/keymaps.lua index 574e77e2..8e60d2a9 100644 --- a/lua/lazyvim/config/keymaps.lua +++ b/lua/lazyvim/config/keymaps.lua @@ -164,6 +164,28 @@ if vim.lsp.inlay_hint then Snacks.toggle.inlay_hints():map("uh") end +if vim.fn.has("nvim-0.12") == 1 then + if Snacks.toggle.codelens then + Snacks.toggle.codelens():map("cC") + else + -- TODO: remove this after codelens toggler is added to Snacks + Snacks.toggle.new({ + id = "codelens", + name = "Codelens", + get = function() + return vim.lsp.codelens.is_enabled({ bufnr = 0 }) + end, + set = function(state) + vim.lsp.codelens.enable(state, { bufnr = 0 }) + end, + }):map("cC") + end +else + require("lazyvim.plugins.lsp.keymaps").set({}, { + { "cC", vim.lsp.codelens.refresh, desc = "Refresh & Display Codelens", mode = { "n" }, has = "codeLens" }, + }) +end + -- lazygit if vim.fn.executable("lazygit") == 1 then map("n", "gg", function() Snacks.lazygit( { cwd = LazyVim.root.git() }) end, { desc = "Lazygit (Root Dir)" }) diff --git a/lua/lazyvim/plugins/lsp/init.lua b/lua/lazyvim/plugins/lsp/init.lua index 490bec3c..641767be 100644 --- a/lua/lazyvim/plugins/lsp/init.lua +++ b/lua/lazyvim/plugins/lsp/init.lua @@ -45,6 +45,7 @@ return { -- provide the code lenses. codelens = { enabled = false, + exclude = {}, -- filetypes for which you don't want to enable codelens }, -- Enable this to enable the builtin LSP folding on Neovim. -- Be aware that you also will need to properly configure your LSP server to @@ -87,7 +88,6 @@ return { { "", function() return vim.lsp.buf.signature_help() end, mode = "i", desc = "Signature Help", has = "signatureHelp" }, { "ca", vim.lsp.buf.code_action, desc = "Code Action", mode = { "n", "x" }, has = "codeAction" }, { "cc", vim.lsp.codelens.run, desc = "Run Codelens", mode = { "n", "x" }, has = "codeLens" }, - { "cC", vim.lsp.codelens.refresh, desc = "Refresh & Display Codelens", mode = { "n" }, has = "codeLens" }, { "cR", function() Snacks.rename.rename_file() end, desc = "Rename File", mode ={"n"}, has = { "workspace/didRenameFiles", "workspace/willRenameFiles" } }, { "cr", vim.lsp.buf.rename, desc = "Rename", has = "rename" }, { "cA", LazyVim.lsp.action.source, desc = "Source Action", has = "codeAction" }, @@ -199,13 +199,23 @@ return { end -- code lens - if opts.codelens.enabled and vim.lsp.codelens then + if opts.codelens.enabled then Snacks.util.lsp.on({ method = "textDocument/codeLens" }, function(buffer) - vim.lsp.codelens.refresh() - vim.api.nvim_create_autocmd({ "BufEnter", "CursorHold", "InsertLeave" }, { - buffer = buffer, - callback = vim.lsp.codelens.refresh, - }) + if + vim.api.nvim_buf_is_valid(buffer) + and vim.bo[buffer].buftype == "" + and not vim.tbl_contains(opts.codelens.exclude, vim.bo[buffer].filetype) + then + if vim.fn.has("nvim-0.12") == 1 then + vim.lsp.codelens.enable(true, { bufnr = buffer }) + else + vim.lsp.codelens.refresh() + vim.api.nvim_create_autocmd({ "BufEnter", "CursorHold", "InsertLeave" }, { + buffer = buffer, + callback = vim.lsp.codelens.refresh, + }) + end + end end) end