mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 08:35:43 +02:00
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:
parent
66c8592b31
commit
54d118869b
2 changed files with 51 additions and 0 deletions
49
lib/deprecation.nix
Normal file
49
lib/deprecation.nix
Normal 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}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -9,6 +9,7 @@ let
|
||||||
nixvimTypes = import ./types.nix { inherit lib nixvimOptions; };
|
nixvimTypes = import ./types.nix { inherit lib nixvimOptions; };
|
||||||
nixvimUtils = import ./utils.nix { inherit lib nixvimTypes _nixvimTests; };
|
nixvimUtils = import ./utils.nix { inherit lib nixvimTypes _nixvimTests; };
|
||||||
nixvimOptions = import ./options.nix { inherit lib nixvimTypes nixvimUtils; };
|
nixvimOptions = import ./options.nix { inherit lib nixvimTypes nixvimUtils; };
|
||||||
|
nixvimDeprecation = import ./deprecation.nix { inherit lib; };
|
||||||
inherit (import ./to-lua.nix { inherit lib; }) toLuaObject;
|
inherit (import ./to-lua.nix { inherit lib; }) toLuaObject;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
@ -30,3 +31,4 @@ in
|
||||||
// nixvimUtils
|
// nixvimUtils
|
||||||
// nixvimOptions
|
// nixvimOptions
|
||||||
// nixvimBuilders
|
// nixvimBuilders
|
||||||
|
// nixvimDeprecation
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue