mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 16:39:00 +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; };
|
||||
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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue