mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-10 03:23:29 +03:00
lib/types: Introduce mkOptionType occurringTypes argument
This will be used to issue deprecation warnings recursively in the next commit In addition, this allows easily getting nested types of other options, which is useful when you want to create an option that aliases a part of another one.
This commit is contained in:
parent
f7906ec8b2
commit
68955fe612
1 changed files with 18 additions and 1 deletions
|
@ -147,9 +147,13 @@ rec {
|
||||||
, # The deprecation message to display when this type is used by an option
|
, # The deprecation message to display when this type is used by an option
|
||||||
# If null, the type isn't deprecated
|
# If null, the type isn't deprecated
|
||||||
deprecationMessage ? null
|
deprecationMessage ? null
|
||||||
|
, # The types that occur in the definition of this type. This is used to
|
||||||
|
# issue deprecation warnings recursively. Can also be used to reuse
|
||||||
|
# nested types
|
||||||
|
nestedTypes ? {}
|
||||||
}:
|
}:
|
||||||
{ _type = "option-type";
|
{ _type = "option-type";
|
||||||
inherit name check merge emptyValue getSubOptions getSubModules substSubModules typeMerge functor deprecationMessage;
|
inherit name check merge emptyValue getSubOptions getSubModules substSubModules typeMerge functor deprecationMessage nestedTypes;
|
||||||
description = if description == null then name else description;
|
description = if description == null then name else description;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -365,6 +369,7 @@ rec {
|
||||||
getSubModules = elemType.getSubModules;
|
getSubModules = elemType.getSubModules;
|
||||||
substSubModules = m: listOf (elemType.substSubModules m);
|
substSubModules = m: listOf (elemType.substSubModules m);
|
||||||
functor = (defaultFunctor name) // { wrapped = elemType; };
|
functor = (defaultFunctor name) // { wrapped = elemType; };
|
||||||
|
nestedTypes.elemType = elemType;
|
||||||
};
|
};
|
||||||
|
|
||||||
nonEmptyListOf = elemType:
|
nonEmptyListOf = elemType:
|
||||||
|
@ -389,6 +394,7 @@ rec {
|
||||||
getSubModules = elemType.getSubModules;
|
getSubModules = elemType.getSubModules;
|
||||||
substSubModules = m: attrsOf (elemType.substSubModules m);
|
substSubModules = m: attrsOf (elemType.substSubModules m);
|
||||||
functor = (defaultFunctor name) // { wrapped = elemType; };
|
functor = (defaultFunctor name) // { wrapped = elemType; };
|
||||||
|
nestedTypes.elemType = elemType;
|
||||||
};
|
};
|
||||||
|
|
||||||
# A version of attrsOf that's lazy in its values at the expense of
|
# A version of attrsOf that's lazy in its values at the expense of
|
||||||
|
@ -413,6 +419,7 @@ rec {
|
||||||
getSubModules = elemType.getSubModules;
|
getSubModules = elemType.getSubModules;
|
||||||
substSubModules = m: lazyAttrsOf (elemType.substSubModules m);
|
substSubModules = m: lazyAttrsOf (elemType.substSubModules m);
|
||||||
functor = (defaultFunctor name) // { wrapped = elemType; };
|
functor = (defaultFunctor name) // { wrapped = elemType; };
|
||||||
|
nestedTypes.elemType = elemType;
|
||||||
};
|
};
|
||||||
|
|
||||||
# TODO: drop this in the future:
|
# TODO: drop this in the future:
|
||||||
|
@ -421,6 +428,7 @@ rec {
|
||||||
deprecationMessage = "Mixing lists with attribute values is no longer"
|
deprecationMessage = "Mixing lists with attribute values is no longer"
|
||||||
+ " possible; please use `types.attrsOf` instead. See"
|
+ " possible; please use `types.attrsOf` instead. See"
|
||||||
+ " https://github.com/NixOS/nixpkgs/issues/1800 for the motivation.";
|
+ " https://github.com/NixOS/nixpkgs/issues/1800 for the motivation.";
|
||||||
|
nestedTypes.elemType = elemType;
|
||||||
};
|
};
|
||||||
|
|
||||||
# Value of given type but with no merging (i.e. `uniq list`s are not concatenated).
|
# Value of given type but with no merging (i.e. `uniq list`s are not concatenated).
|
||||||
|
@ -433,6 +441,7 @@ rec {
|
||||||
getSubModules = elemType.getSubModules;
|
getSubModules = elemType.getSubModules;
|
||||||
substSubModules = m: uniq (elemType.substSubModules m);
|
substSubModules = m: uniq (elemType.substSubModules m);
|
||||||
functor = (defaultFunctor name) // { wrapped = elemType; };
|
functor = (defaultFunctor name) // { wrapped = elemType; };
|
||||||
|
nestedTypes.elemType = elemType;
|
||||||
};
|
};
|
||||||
|
|
||||||
# Null or value of ...
|
# Null or value of ...
|
||||||
|
@ -451,6 +460,7 @@ rec {
|
||||||
getSubModules = elemType.getSubModules;
|
getSubModules = elemType.getSubModules;
|
||||||
substSubModules = m: nullOr (elemType.substSubModules m);
|
substSubModules = m: nullOr (elemType.substSubModules m);
|
||||||
functor = (defaultFunctor name) // { wrapped = elemType; };
|
functor = (defaultFunctor name) // { wrapped = elemType; };
|
||||||
|
nestedTypes.elemType = elemType;
|
||||||
};
|
};
|
||||||
|
|
||||||
functionTo = elemType: mkOptionType {
|
functionTo = elemType: mkOptionType {
|
||||||
|
@ -535,6 +545,9 @@ rec {
|
||||||
substSubModules = m: submoduleWith (attrs // {
|
substSubModules = m: submoduleWith (attrs // {
|
||||||
modules = m;
|
modules = m;
|
||||||
});
|
});
|
||||||
|
nestedTypes = lib.optionalAttrs (freeformType != null) {
|
||||||
|
freeformType = freeformType;
|
||||||
|
};
|
||||||
functor = defaultFunctor name // {
|
functor = defaultFunctor name // {
|
||||||
type = types.submoduleWith;
|
type = types.submoduleWith;
|
||||||
payload = {
|
payload = {
|
||||||
|
@ -596,6 +609,8 @@ rec {
|
||||||
then functor.type mt1 mt2
|
then functor.type mt1 mt2
|
||||||
else null;
|
else null;
|
||||||
functor = (defaultFunctor name) // { wrapped = [ t1 t2 ]; };
|
functor = (defaultFunctor name) // { wrapped = [ t1 t2 ]; };
|
||||||
|
nestedTypes.left = t1;
|
||||||
|
nestedTypes.right = t2;
|
||||||
};
|
};
|
||||||
|
|
||||||
# Any of the types in the given list
|
# Any of the types in the given list
|
||||||
|
@ -627,6 +642,8 @@ rec {
|
||||||
substSubModules = m: coercedTo coercedType coerceFunc (finalType.substSubModules m);
|
substSubModules = m: coercedTo coercedType coerceFunc (finalType.substSubModules m);
|
||||||
typeMerge = t1: t2: null;
|
typeMerge = t1: t2: null;
|
||||||
functor = (defaultFunctor name) // { wrapped = finalType; };
|
functor = (defaultFunctor name) // { wrapped = finalType; };
|
||||||
|
nestedTypes.coercedType = coercedType;
|
||||||
|
nestedTypes.finalType = finalType;
|
||||||
};
|
};
|
||||||
|
|
||||||
# Obsolete alternative to configOf. It takes its option
|
# Obsolete alternative to configOf. It takes its option
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue