forked from mirrors/nixpkgs
lib/modules: handle typeless options in mergeModules
mkOption does not require a `type` argument and does not set the resulting attribute if it is not given. Consequently, we need to be prepared to merge options that have no type information.
This commit is contained in:
parent
8ef139fe52
commit
9c35f44999
|
@ -624,7 +624,7 @@ let
|
||||||
unmatchedDefns = [];
|
unmatchedDefns = [];
|
||||||
}
|
}
|
||||||
else if optionDecls != [] then
|
else if optionDecls != [] then
|
||||||
if all (x: x.options.type.name == "submodule") optionDecls
|
if all (x: x.options.type.name or null == "submodule") optionDecls
|
||||||
# Raw options can only be merged into submodules. Merging into
|
# Raw options can only be merged into submodules. Merging into
|
||||||
# attrsets might be nice, but ambiguous. Suppose we have
|
# attrsets might be nice, but ambiguous. Suppose we have
|
||||||
# attrset as a `attrsOf submodule`. User declares option
|
# attrset as a `attrsOf submodule`. User declares option
|
||||||
|
|
|
@ -365,6 +365,9 @@ checkConfigError \
|
||||||
config.set \
|
config.set \
|
||||||
./declare-set.nix ./declare-enable-nested.nix
|
./declare-set.nix ./declare-enable-nested.nix
|
||||||
|
|
||||||
|
# Check that that merging of option collisions doesn't depend on type being set
|
||||||
|
checkConfigError 'The option .group..*would be a parent of the following options, but its type .<no description>. does not support nested options.\n\s*- option.s. with prefix .group.enable..*' config.group.enable ./merge-typeless-option.nix
|
||||||
|
|
||||||
# Test that types.optionType merges types correctly
|
# Test that types.optionType merges types correctly
|
||||||
checkConfigOutput '^10$' config.theOption.int ./optionTypeMerging.nix
|
checkConfigOutput '^10$' config.theOption.int ./optionTypeMerging.nix
|
||||||
checkConfigOutput '^"hello"$' config.theOption.str ./optionTypeMerging.nix
|
checkConfigOutput '^"hello"$' config.theOption.str ./optionTypeMerging.nix
|
||||||
|
|
25
lib/tests/modules/merge-typeless-option.nix
Normal file
25
lib/tests/modules/merge-typeless-option.nix
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{ lib, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
typeless =
|
||||||
|
{ lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
options.group = lib.mkOption { };
|
||||||
|
};
|
||||||
|
childOfTypeless =
|
||||||
|
{ lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
options.group.enable = lib.mkEnableOption "nothing";
|
||||||
|
};
|
||||||
|
in
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
typeless
|
||||||
|
childOfTypeless
|
||||||
|
];
|
||||||
|
|
||||||
|
config.group.enable = false;
|
||||||
|
}
|
Loading…
Reference in a new issue