lib/modules: Improve error messages using showDefs
This commit is contained in:
parent
7c20e68f6b
commit
bdfcee2590
@ -117,7 +117,7 @@ rec {
|
|||||||
if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [] then
|
if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [] then
|
||||||
let
|
let
|
||||||
firstDef = head merged.unmatchedDefns;
|
firstDef = head merged.unmatchedDefns;
|
||||||
baseMsg = "The option `${showOption (prefix ++ firstDef.prefix)}' defined in `${firstDef.file}' does not exist.";
|
baseMsg = "The option `${showOption (prefix ++ firstDef.prefix)}' does not exist. Definition values:${showDefs [ firstDef ]}";
|
||||||
in
|
in
|
||||||
if attrNames options == [ "_module" ]
|
if attrNames options == [ "_module" ]
|
||||||
then throw ''
|
then throw ''
|
||||||
@ -449,7 +449,7 @@ rec {
|
|||||||
# Handle properties, check types, and merge everything together.
|
# Handle properties, check types, and merge everything together.
|
||||||
res =
|
res =
|
||||||
if opt.readOnly or false && length defs' > 1 then
|
if opt.readOnly or false && length defs' > 1 then
|
||||||
throw "The option `${showOption loc}' is read-only, but it's set multiple times."
|
throw "The option `${showOption loc}' is read-only, but it's set multiple times. Definition values:${showDefs defs'}"
|
||||||
else
|
else
|
||||||
mergeDefinitions loc opt.type defs';
|
mergeDefinitions loc opt.type defs';
|
||||||
|
|
||||||
@ -497,8 +497,8 @@ rec {
|
|||||||
mergedValue =
|
mergedValue =
|
||||||
if isDefined then
|
if isDefined then
|
||||||
if all (def: type.check def.value) defsFinal then type.merge loc defsFinal
|
if all (def: type.check def.value) defsFinal then type.merge loc defsFinal
|
||||||
else let firstInvalid = findFirst (def: ! type.check def.value) null defsFinal;
|
else let allInvalid = filter (def: ! type.check def.value) defsFinal;
|
||||||
in throw "The option value `${showOption loc}' in `${firstInvalid.file}' is not of type `${type.description}'."
|
in throw "A definition for option `${showOption loc}' is not of type `${type.description}'. Definition values:${showDefs allInvalid}"
|
||||||
else
|
else
|
||||||
# (nixos-option detects this specific error message and gives it special
|
# (nixos-option detects this specific error message and gives it special
|
||||||
# handling. If changed here, please change it there too.)
|
# handling. If changed here, please change it there too.)
|
||||||
|
@ -96,12 +96,12 @@ rec {
|
|||||||
else if all isBool list then foldl' lib.or false list
|
else if all isBool list then foldl' lib.or false list
|
||||||
else if all isString list then lib.concatStrings list
|
else if all isString list then lib.concatStrings list
|
||||||
else if all isInt list && all (x: x == head list) list then head list
|
else if all isInt list && all (x: x == head list) list then head list
|
||||||
else throw "Cannot merge definitions of `${showOption loc}' given in ${showFiles (getFiles defs)}.";
|
else throw "Cannot merge definitions of `${showOption loc}'. Definition values:${showDefs defs}";
|
||||||
|
|
||||||
mergeOneOption = loc: defs:
|
mergeOneOption = loc: defs:
|
||||||
if defs == [] then abort "This case should never happen."
|
if defs == [] then abort "This case should never happen."
|
||||||
else if length defs != 1 then
|
else if length defs != 1 then
|
||||||
throw "The unique option `${showOption loc}' is defined multiple times, in:\n - ${concatStringsSep "\n - " (getFiles defs)}."
|
throw "The unique option `${showOption loc}' is defined multiple times. Definition values:${showDefs defs}"
|
||||||
else (head defs).value;
|
else (head defs).value;
|
||||||
|
|
||||||
/* "Merge" option definitions by checking that they all have the same value. */
|
/* "Merge" option definitions by checking that they all have the same value. */
|
||||||
@ -111,11 +111,11 @@ rec {
|
|||||||
# This also makes it work for functions, because the foldl' below would try
|
# This also makes it work for functions, because the foldl' below would try
|
||||||
# to compare the first element with itself, which is false for functions
|
# to compare the first element with itself, which is false for functions
|
||||||
else if length defs == 1 then (elemAt defs 0).value
|
else if length defs == 1 then (elemAt defs 0).value
|
||||||
else foldl' (val: def:
|
else (foldl' (first: def:
|
||||||
if def.value != val then
|
if def.value != first.value then
|
||||||
throw "The option `${showOption loc}' has conflicting definitions, in ${showFiles (getFiles defs)}."
|
throw "The option `${showOption loc}' has conflicting definition values:${showDefs [ first def ]}"
|
||||||
else
|
else
|
||||||
val) (head defs).value defs;
|
first) (head defs) defs).value;
|
||||||
|
|
||||||
/* Extracts values of all "value" keys of the given list.
|
/* Extracts values of all "value" keys of the given list.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user