From df7c827b8fd460a11a4529fe501b299cbbc9d8ff Mon Sep 17 00:00:00 2001 From: Toby Vincent Date: Wed, 13 Jul 2022 14:29:10 -0500 Subject: refactor(nvim): move group name param into group_opts in create_map_group --- nvim/.config/nvim/lua/tobyvin/lsp/formatting.lua | 5 +++-- nvim/.config/nvim/lua/tobyvin/lsp/init.lua | 5 +++-- nvim/.config/nvim/lua/tobyvin/plugins.lua | 2 +- .../nvim/lua/tobyvin/plugins/bufferline.lua | 2 +- nvim/.config/nvim/lua/tobyvin/plugins/diffview.lua | 2 +- nvim/.config/nvim/lua/tobyvin/plugins/gitsigns.lua | 2 +- .../.config/nvim/lua/tobyvin/plugins/lspconfig.lua | 2 +- nvim/.config/nvim/lua/tobyvin/plugins/neogen.lua | 2 +- nvim/.config/nvim/lua/tobyvin/plugins/neogit.lua | 2 +- nvim/.config/nvim/lua/tobyvin/plugins/notify.lua | 2 +- .../nvim/lua/tobyvin/plugins/refactoring.lua | 5 +++-- .../.config/nvim/lua/tobyvin/plugins/telescope.lua | 8 ++++---- nvim/.config/nvim/lua/tobyvin/utils.lua | 24 +++++++++++++++++----- 13 files changed, 40 insertions(+), 23 deletions(-) (limited to 'nvim/.config') diff --git a/nvim/.config/nvim/lua/tobyvin/lsp/formatting.lua b/nvim/.config/nvim/lua/tobyvin/lsp/formatting.lua index 4bdb487..467c0d6 100644 --- a/nvim/.config/nvim/lua/tobyvin/lsp/formatting.lua +++ b/nvim/.config/nvim/lua/tobyvin/lsp/formatting.lua @@ -8,8 +8,7 @@ M.toggle_format = function() end M.on_attach = function(client, bufnr) - local nmap = require("tobyvin.utils").create_map_group("n", "l", "LSP", { buffer = bufnr }) - local vmap = require("tobyvin.utils").create_map_group("v", "l", "LSP", { buffer = bufnr }) + local nmap = require("tobyvin.utils").create_map_group("n", "l", { name = "LSP", buffer = bufnr }) if client.server_capabilities.documentFormattingProvider then vim.b.auto_format = true @@ -38,6 +37,8 @@ M.on_attach = function(client, bufnr) }) end + local vmap = require("tobyvin.utils").create_map_group("v", "l", { name = "LSP", buffer = bufnr }) + if client.server_capabilities.documentRangeFormattingProvider then vim.api.nvim_buf_create_user_command( bufnr, diff --git a/nvim/.config/nvim/lua/tobyvin/lsp/init.lua b/nvim/.config/nvim/lua/tobyvin/lsp/init.lua index a1a12c3..6e1a282 100644 --- a/nvim/.config/nvim/lua/tobyvin/lsp/init.lua +++ b/nvim/.config/nvim/lua/tobyvin/lsp/init.lua @@ -1,8 +1,7 @@ local M = {} M.on_attach = function(client, bufnr) - local nmap = require("tobyvin.utils").create_map_group("n", "l", "LSP", { buffer = bufnr }) - local nmap_goto = require("tobyvin.utils").create_map_group("n", "lg", "Goto", { buffer = bufnr }) + local nmap = require("tobyvin.utils").create_map_group("n", "l", { name = "LSP", buffer = bufnr }) nmap("a", vim.lsp.buf.code_action, { desc = "Code Action" }) nmap("d", "TroubleToggle document_diagnostics", { desc = "Document Diagnostics" }) @@ -19,6 +18,8 @@ M.on_attach = function(client, bufnr) nmap("s", "Telescope lsp_document_symbols", { desc = "Document Symbols" }) nmap("S", "Telescope lsp_dynamic_workspace_symbols", { desc = "Workspace Symbols" }) nmap("w", "Telescope lsp_workspace_diagnostics", { desc = "Workspace Diagnostics" }) + + local nmap_goto = require("tobyvin.utils").create_map_group("n", "lg", { name = "Goto", buffer = bufnr }) nmap_goto("d", vim.lsp.buf.definition, { desc = "Definition" }) nmap_goto("D", vim.lsp.buf.declaration, { desc = "Declaration" }) nmap_goto("i", vim.lsp.buf.implementation, { desc = "Implementation" }) diff --git a/nvim/.config/nvim/lua/tobyvin/plugins.lua b/nvim/.config/nvim/lua/tobyvin/plugins.lua index b7419c8..f4feae3 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins.lua @@ -488,7 +488,7 @@ M.setup = function() desc = "Reload packer config on write", }) - local nmap = utils.create_map_group("n", "p", "Packer") + local nmap = utils.create_map_group("n", "p", { name = "Packer" }) nmap("c", packer.compile, { desc = "Compile" }) nmap("C", packer.clean, { desc = "Clean" }) diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/bufferline.lua b/nvim/.config/nvim/lua/tobyvin/plugins/bufferline.lua index 12787ee..06f9404 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/bufferline.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/bufferline.lua @@ -35,7 +35,7 @@ M.setup = function() }, }) - local nmap = utils.create_map_group("n", "b", "Buffers") + local nmap = utils.create_map_group("n", "b", { name = "Buffers" }) nmap("c", bufferline.close_with_pick, { desc = "Close Buffer" }) nmap("b", bufferline.pick_buffer, { desc = "Pick Buffer" }) end diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/diffview.lua b/nvim/.config/nvim/lua/tobyvin/plugins/diffview.lua index 055941c..b822848 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/diffview.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/diffview.lua @@ -10,7 +10,7 @@ M.setup = function() diffview.setup() - local nmap = utils.create_map_group("n", "g", "Git") + local nmap = utils.create_map_group("n", "g", { name = "Git" }) nmap("d", diffview.open, { desc = "Diffview" }) end diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/gitsigns.lua b/nvim/.config/nvim/lua/tobyvin/plugins/gitsigns.lua index f9c1ff6..1b59f3b 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/gitsigns.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/gitsigns.lua @@ -7,7 +7,7 @@ M.setup = function() return end - local nmap = require("tobyvin.utils").create_map_group("n", "g", "Git") + local nmap = require("tobyvin.utils").create_map_group("n", "g", { name = "Git" }) gitsigns.setup({ signs = { diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/lspconfig.lua b/nvim/.config/nvim/lua/tobyvin/plugins/lspconfig.lua index 916a638..6e7fa69 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/lspconfig.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/lspconfig.lua @@ -97,7 +97,7 @@ M.setup = function() }, }) - local nmap = utils.create_map_group("n", "l", "LSP") + local nmap = utils.create_map_group("n", "l", { name = "LSP" }) nmap("i", "LspInfo", { desc = "LSP info" }) nmap("I", "LspInstallInfo", { desc = "LSP installer info" }) end diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/neogen.lua b/nvim/.config/nvim/lua/tobyvin/plugins/neogen.lua index 78416e0..b83cb28 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/neogen.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/neogen.lua @@ -7,7 +7,7 @@ M.setup = function() return end - local nmap = require("tobyvin.utils").create_map_group("n", "s", "Snippets") + local nmap = require("tobyvin.utils").create_map_group("n", "s", { name = "Snippets" }) neogen.setup({ snippet_engine = "luasnip" }) diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/neogit.lua b/nvim/.config/nvim/lua/tobyvin/plugins/neogit.lua index 762999e..a2f8a2e 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/neogit.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/neogit.lua @@ -17,7 +17,7 @@ M.setup = function() -- kind = "replace", }) - local nmap = utils.create_map_group("n", "g", "git") + local nmap = utils.create_map_group("n", "g", { name = "git" }) nmap("g", neogit.open, { desc = "Neogit" }) end diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/notify.lua b/nvim/.config/nvim/lua/tobyvin/plugins/notify.lua index fdb22d8..945b572 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/notify.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/notify.lua @@ -17,7 +17,7 @@ M.setup = function() local telescope_ok, telescope = pcall(require, "telescope") if telescope_ok then telescope.load_extension("notify") - local nmap = utils.create_map_group("n", "f", "Find") + local nmap = utils.create_map_group("n", "f", { name = "Find" }) nmap("n", telescope.extensions.notify.notify, { desc = "Notifications" }) end end diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/refactoring.lua b/nvim/.config/nvim/lua/tobyvin/plugins/refactoring.lua index 70f3ad9..5cca39c 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/refactoring.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/refactoring.lua @@ -10,7 +10,7 @@ M.setup = function() refactoring.setup() - local nmap = utils.create_map_group("n", "r", "Refactor") + local nmap = utils.create_map_group("n", "r", { name = "Refactor" }) nmap("b", function() refactoring.refactor("Extract Block") end, { desc = "Extract Block" }) @@ -21,7 +21,8 @@ M.setup = function() refactoring.refactor("Inline Variable") end, { desc = "Inline Variable" }) - local vmap = utils.create_map_group("v", "r", "Refactor") + -- TODO: Fix needing to exit visual mode + local vmap = utils.create_map_group("v", "r", { name = "Refactor" }) vmap("e", function() refactoring.refactor("Extract Function") end, { desc = "Extract Function" }) diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/telescope.lua b/nvim/.config/nvim/lua/tobyvin/plugins/telescope.lua index 7c88372..49f7c54 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/telescope.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/telescope.lua @@ -72,7 +72,7 @@ M.setup = function() local builtins = require("telescope.builtin") - local nmap_find = require("tobyvin.utils").create_map_group("n", "f", "Find") + local nmap_find = require("tobyvin.utils").create_map_group("n", "f", { name = "Find" }) nmap_find("b", builtins.buffers, { desc = "Buffers" }) nmap_find("c", builtins.command_history, { desc = "Command History" }) nmap_find("C", builtins.commands, { desc = "Commands" }) @@ -88,16 +88,16 @@ M.setup = function() nmap_find("e", telescope.extensions.frecency.frecency, { desc = "Frecency" }) nmap_find("p", telescope.extensions.packer.packer, { desc = "Packer" }) - local nmap_git = require("tobyvin.utils").create_map_group("n", "g", "Git") + local nmap_git = require("tobyvin.utils").create_map_group("n", "g", { name = "Git" }) nmap_git("b", builtins.git_branches, { desc = "Checkout branch" }) nmap_git("c", builtins.git_commits, { desc = "Checkout commit" }) nmap_git("o", builtins.git_status, { desc = "Open changed file" }) - local nmap_git_wt = require("tobyvin.utils").create_map_group("n", "gw", "Worktree") + local nmap_git_wt = require("tobyvin.utils").create_map_group("n", "gw", { name = "Worktree" }) nmap_git_wt("s", telescope.extensions.git_worktree.git_worktrees, { desc = "Switch worktree" }) nmap_git_wt("c", telescope.extensions.git_worktree.create_git_worktree, { desc = "Create worktree" }) - local nmap_git_gh = require("tobyvin.utils").create_map_group("n", "gG", "Github") + local nmap_git_gh = require("tobyvin.utils").create_map_group("n", "gG", { name = "Github" }) nmap_git_gh("i", telescope.extensions.gh.issues, { desc = "Issues" }) nmap_git_gh("p", telescope.extensions.gh.pull_request, { desc = "Pull request" }) nmap_git_gh("g", telescope.extensions.gh.gist, { desc = "Gist" }) diff --git a/nvim/.config/nvim/lua/tobyvin/utils.lua b/nvim/.config/nvim/lua/tobyvin/utils.lua index 35c5f32..d053a9b 100644 --- a/nvim/.config/nvim/lua/tobyvin/utils.lua +++ b/nvim/.config/nvim/lua/tobyvin/utils.lua @@ -15,16 +15,30 @@ setmetatable(M.diagnostic_signs, { end, }) -M.create_map_group = function(mode, prefix, name, g_opts) - g_opts = g_opts or {} +--- Helper function to create a group of keymaps that share a common prefix and/or options. If which-key is installed +--- and group_opts.name is set, it will also create a corresponding named group. +---@param mode string|table Same mode short names as vim.keymap.set(). A list will create the group on all modes. +---@param prefix string Prefix to prepend to the lhs of all keymaps in the group. +---@param group_opts ?table Options to apply to all keymaps in this group. +---In addition to the options listed in vim.keymap.set, this table also accepts the following: +--- - name: Name of the group to create in which-key. If which-key is not installed, this does nothing. +---@return function Function to create mapping using the groups defaults. +-- TODO: Possibly add memoization to groups/subgroups using the __call metatable attribute +M.create_map_group = function(mode, prefix, group_opts) + group_opts = group_opts or {} + + local name = group_opts.name + group_opts.name = nil local status_ok, which_key = pcall(require, "which-key") - if status_ok and name then - which_key.register({ [prefix] = { name = name } }, vim.tbl_extend("force", { mode = mode }, g_opts)) + if status_ok and name ~= nil then + for _, m in pairs(vim.tbl_flatten({ mode })) do + which_key.register({ [prefix] = { name = name } }, vim.tbl_extend("force", { mode = m }, group_opts)) + end end return function(lhs, rhs, opts) - vim.keymap.set(mode, prefix .. lhs, rhs, vim.tbl_deep_extend("force", g_opts, opts or {})) + vim.keymap.set(mode, prefix .. lhs, rhs, vim.tbl_deep_extend("keep", opts or {}, group_opts)) end end -- cgit v1.2.3-70-g09d2