lib/deprecation: init with mkDeprecatedSubOptionModule

Similar to `lib.mkRemovedOptionModule` but tweaked to work with
sub-options (e.g. settings options).

Also uses warnings instead of assertions.
This commit is contained in:
Matt Sturgeon 2024-06-24 12:16:54 +01:00
parent 66c8592b31
commit 54d118869b
No known key found for this signature in database
GPG key ID: 4F91844CED1A8299
2 changed files with 51 additions and 0 deletions

49
lib/deprecation.nix Normal file
View file

@ -0,0 +1,49 @@
{ lib, ... }:
with lib;
rec {
# Get a (sub)option by walking the path,
# checking for submodules along the way
getOptionRecursive =
opt: prefix: optionPath:
if optionPath == [ ] then
opt
else if isOption opt then
getOptionRecursive (opt.type.getSubOptions prefix) prefix optionPath
else
let
name = head optionPath;
opt' = getAttr name opt;
prefix' = prefix ++ [ name ];
optionPath' = drop 1 optionPath;
in
getOptionRecursive opt' prefix' optionPath';
# Like mkRemovedOptionModule, but has support for nested sub-options
# and uses warnings instead of assertions.
mkDeprecatedSubOptionModule =
optionPath: replacementInstructions:
{ options, ... }:
{
options = setAttrByPath optionPath (mkOption {
# When (e.g.) `mkAttrs` is used on a submodule, this option will be evaluated.
# Therefore we have to apply _something_ (null) when there's no definition.
apply =
v:
let
# Avoid "option used but not defined" errors
res = builtins.tryEval v;
in
if res.success then res.value else null;
visible = false;
});
config.warnings =
let
opt = getOptionRecursive options [ ] optionPath;
in
optional opt.isDefined ''
The option definition `${showOption optionPath}' in ${showFiles opt.files} is deprecated.
${replacementInstructions}
'';
};
}

View file

@ -9,6 +9,7 @@ let
nixvimTypes = import ./types.nix { inherit lib nixvimOptions; };
nixvimUtils = import ./utils.nix { inherit lib nixvimTypes _nixvimTests; };
nixvimOptions = import ./options.nix { inherit lib nixvimTypes nixvimUtils; };
nixvimDeprecation = import ./deprecation.nix { inherit lib; };
inherit (import ./to-lua.nix { inherit lib; }) toLuaObject;
in
{
@ -30,3 +31,4 @@ in
// nixvimUtils
// nixvimOptions
// nixvimBuilders
// nixvimDeprecation