* Add a function to replace "pkgs.checker". The function checkModule does a
traversal of all definitions and also check definitions contained inside sub-modules. svn path=/nixpkgs/trunk/; revision=18241
This commit is contained in:
parent
233d72e4fb
commit
88f113d032
|
@ -238,6 +238,7 @@ rec {
|
||||||
|
|
||||||
result =
|
result =
|
||||||
if isOption then value
|
if isOption then value
|
||||||
|
else if !hasOptions then {}
|
||||||
else if all isAttrs values then recurse
|
else if all isAttrs values then recurse
|
||||||
else
|
else
|
||||||
throw "${eol
|
throw "${eol
|
||||||
|
@ -323,4 +324,28 @@ rec {
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
# Visit all definitions to raise errors related to undeclared options.
|
||||||
|
checkModule = path: {config, options, ...}@m:
|
||||||
|
let
|
||||||
|
eol = "\n";
|
||||||
|
addName = name:
|
||||||
|
if path == "" then name else path + "." + name;
|
||||||
|
in
|
||||||
|
if lib.isOption options then
|
||||||
|
if options ? options then
|
||||||
|
options.type.fold
|
||||||
|
(cfg: res: res && checkModule (options.type.docPath path) cfg._args)
|
||||||
|
true config
|
||||||
|
else
|
||||||
|
true
|
||||||
|
else if isAttrs options && lib.attrNames m.options != [] then
|
||||||
|
all (name:
|
||||||
|
lib.addErrorContext "${eol
|
||||||
|
}while checking the attribute '${addName name}'.${eol
|
||||||
|
}" (checkModule (addName name) (selectModule name m))
|
||||||
|
) (lib.attrNames m.config)
|
||||||
|
else
|
||||||
|
builtins.trace "try to evaluate config ${lib.showVal config}."
|
||||||
|
false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue