plugins/nvim-lsp: let keymaps actions be attrs

This commit is contained in:
Gaetan Lepage 2023-07-17 15:37:00 +02:00 committed by Gaétan Lepage
parent 54ebe3b0ee
commit 71c0b4cb59
2 changed files with 29 additions and 22 deletions

View file

@ -24,7 +24,7 @@ in {
};
diagnostic = mkOption {
type = types.attrsOf types.str;
type = with types; attrsOf (either str attrs);
description = "Mappings for `vim.diagnostic.<action>` functions.";
example = {
"<leader>k" = "goto_prev";
@ -34,7 +34,7 @@ in {
};
lspBuf = mkOption {
type = types.attrsOf types.str;
type = with types; attrsOf (either str attrs);
description = "Mappings for `vim.lsp.buf.<action>` functions.";
example = {
"gd" = "definition";
@ -111,27 +111,28 @@ in {
extraPlugins = [pkgs.vimPlugins.nvim-lspconfig];
maps.normal = let
diagnosticMaps =
mkMaps = prefix:
mapAttrs
(key: action: {
inherit (cfg.keymaps) silent;
action = "vim.diagnostic.${action}";
lua = true;
})
cfg.keymaps.diagnostic;
lspBuf =
mapAttrs
(key: action: {
inherit (cfg.keymaps) silent;
action = "vim.lsp.buf.${action}";
lua = true;
})
cfg.keymaps.lspBuf;
(key: action: let
actionStr =
if isString action
then action
else action.action;
actionProps =
if isString action
then {}
else filterAttrs (n: v: n != "action") action;
in
{
inherit (cfg.keymaps) silent;
action = prefix + actionStr;
lua = true;
}
// actionProps);
in
mkMerge [
diagnosticMaps
lspBuf
(mkMaps "vim.diagnostic." cfg.keymaps.diagnostic)
(mkMaps "vim.lsp.buf." cfg.keymaps.lspBuf)
];
# Enable all LSP servers

View file

@ -11,7 +11,10 @@
silent = true;
diagnostic = {
"<leader>k" = "goto_prev";
"<leader>j" = "goto_next";
"<leader>j" = {
action = "goto_next";
desc = "Go to next diagnostic";
};
};
lspBuf = {
@ -19,7 +22,10 @@
"gD" = "references";
"gt" = "type_definition";
"gi" = "implementation";
"K" = "hover";
"K" = {
action = "hover";
desc = "Hover";
};
};
};