mirror of
https://github.com/nix-community/nixvim.git
synced 2025-11-26 04:01:03 +01:00
modules/keymaps: fix lua option deprecation warning
The deprecation warning for the keymap-submocule `lua` option relied on `getSubOptions`, however this is fundamentally flawed because that function returns uses a different module eval from the one that merges submodule definitions. Since definitions are not used by `getSubOptions`, `options.lua.isDefined` will never be true. Instead, we have two choices: 1. Add a `luaIsDefined` option to the keymap submodule 2. Use the new v2 merge's `valueMeta` to access the actual module eval
This commit is contained in:
parent
d73eb6f142
commit
d0b0b75a13
2 changed files with 88 additions and 23 deletions
|
|
@ -54,32 +54,42 @@ in
|
||||||
# TODO remove entirely in 25.05?
|
# TODO remove entirely in 25.05?
|
||||||
warnings =
|
warnings =
|
||||||
let
|
let
|
||||||
# All keymap options that have historically supported the `lua` sub-option
|
keymapsUsingLua =
|
||||||
keymapOptions = [
|
lib.pipe
|
||||||
options.keymaps
|
# All keymap options that have historically supported the `lua` sub-option
|
||||||
options.keymapsOnEvents
|
[
|
||||||
# NOTE: lsp `diagnostic` and `lspBuf` don't use `mapOptionSubmodule` yet
|
options.keymaps.valueMeta.list
|
||||||
# So we only need `lua` deprecation in lsp's `extra` option
|
(lib.concatMap (ev: ev.list) (lib.attrValues options.keymapsOnEvents.valueMeta.attrs))
|
||||||
options.plugins.lsp.keymaps.extra
|
|
||||||
# NOTE: tmux-navigator added `mapOptionSubmodule` support _after_ branching off 24.05
|
# NOTE: lsp `diagnostic` and `lspBuf` don't use `mapOptionSubmodule` yet
|
||||||
options.plugins.tmux-navigator.keymaps
|
# So we only need `lua` deprecation in lsp's `extra` option
|
||||||
]
|
options.plugins.lsp.keymaps.extra.valueMeta.list
|
||||||
# NOTE: barbar added `mapOptionSubmodule` support shortly _before_ branching off 24.05
|
|
||||||
++ builtins.attrValues (builtins.removeAttrs options.plugins.barbar.keymaps [ "silent" ]);
|
# NOTE: tmux-navigator added `mapOptionSubmodule` support _after_ branching off 24.05
|
||||||
|
options.plugins.tmux-navigator.keymaps.valueMeta.list
|
||||||
|
|
||||||
|
# NOTE: barbar added `mapOptionSubmodule` support shortly _before_ branching off 24.05
|
||||||
|
# FIXME: types.nullOr doesn't propagate valueMeta as it doesn't implement v2 check+merge
|
||||||
|
(lib.mapAttrsToList (name: opt: opt.valueMeta) (
|
||||||
|
builtins.removeAttrs options.plugins.barbar.keymaps [ "silent" ]
|
||||||
|
))
|
||||||
|
]
|
||||||
|
[
|
||||||
|
lib.concatLists
|
||||||
|
(lib.filter (meta: meta.configuration.options.lua.isDefined or false))
|
||||||
|
(map (meta: meta.configuration.options))
|
||||||
|
];
|
||||||
in
|
in
|
||||||
lib.pipe keymapOptions [
|
lib.optional (keymapsUsingLua != [ ]) ''
|
||||||
(map (opt: (opt.type.getSubOptions opt.loc).lua))
|
The `lua` keymap option is deprecated and will be removed in 26.05.
|
||||||
(lib.filter (opt: opt.isDefined))
|
|
||||||
(map (opt: ''
|
|
||||||
${"\n"}
|
|
||||||
The `${lib.showOption opt.loc}' option is deprecated and will be removed in 24.11.
|
|
||||||
|
|
||||||
You should use a "raw" `action` instead;
|
You should use a "raw" `action` instead;
|
||||||
e.g. `action.__raw = "<lua code>"` or `action = lib.nixvim.mkRaw "<lua code>"`.
|
e.g. `action.__raw = "<lua code>"` or `action = lib.nixvim.mkRaw "<lua code>"`.
|
||||||
|
|
||||||
${lib.options.showDefs opt.definitionsWithLocations}
|
${lib.concatMapStringsSep "\n" (
|
||||||
''))
|
m: "- `${m.lua}' is defined in " + lib.options.showFiles m.lua.files
|
||||||
];
|
) keymapsUsingLua}
|
||||||
|
'';
|
||||||
|
|
||||||
extraConfigLua = lib.mkIf (config.keymaps != [ ]) ''
|
extraConfigLua = lib.mkIf (config.keymaps != [ ]) ''
|
||||||
-- Set up keybinds {{{
|
-- Set up keybinds {{{
|
||||||
|
|
|
||||||
|
|
@ -92,4 +92,59 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
luaWarning = {
|
||||||
|
imports = [
|
||||||
|
(lib.modules.setDefaultModuleLocation "test-module" {
|
||||||
|
keymaps = [
|
||||||
|
{
|
||||||
|
lua = true;
|
||||||
|
key = "a";
|
||||||
|
action = "function() print('keymaps') end";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
keymapsOnEvents.InsertEnter = [
|
||||||
|
{
|
||||||
|
lua = true;
|
||||||
|
key = "a";
|
||||||
|
action = "function() print('keymap on InsertEnter') end";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
plugins.lsp.keymaps.extra = [
|
||||||
|
{
|
||||||
|
lua = true;
|
||||||
|
key = "a";
|
||||||
|
action = "function() print('plugins.lsp.keymaps.extra') end";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
plugins.tmux-navigator.keymaps = [
|
||||||
|
{
|
||||||
|
lua = true;
|
||||||
|
key = "a";
|
||||||
|
action = "function() print('plugins.tmux-navigator.keymaps') end";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
plugins.barbar.keymaps.first = {
|
||||||
|
lua = true;
|
||||||
|
key = "a";
|
||||||
|
action = "function() print('plugins.barbar.keymaps') end";
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
test.warnings = expect: [
|
||||||
|
(expect "count" 1)
|
||||||
|
(expect "any" "The `lua` keymap option is deprecated and will be removed")
|
||||||
|
(expect "any" "You should use a \"raw\" `action` instead;")
|
||||||
|
(expect "any" "e.g. `action.__raw = \"<lua code>\"` or `action = lib.nixvim.mkRaw \"<lua code>\"`.")
|
||||||
|
(expect "any" "- `keymaps.\"[definition 1-entry 1]\".lua' is defined in `test-module'")
|
||||||
|
(expect "any" "- `keymapsOnEvents.InsertEnter.\"[definition 1-entry 1]\".lua' is defined in `test-module'")
|
||||||
|
(expect "any" "- `plugins.lsp.keymaps.extra.\"[definition 1-entry 1]\".lua' is defined in `test-module'")
|
||||||
|
(expect "any" "- `plugins.tmux-navigator.keymaps.\"[definition 1-entry 1]\".lua' is defined in `test-module'")
|
||||||
|
# FIXME: nullOr breaks our warning
|
||||||
|
# (expect "any" "- `plugins.barbar.keymaps.first.lua' is defined in `test-module'")
|
||||||
|
];
|
||||||
|
|
||||||
|
test.runNvim = false;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue