lib/modules: Improve error messages using showDefs

gstqt5
Silvan Mosberger 2020-09-16 20:05:53 +02:00
parent 7c20e68f6b
commit bdfcee2590
No known key found for this signature in database
GPG Key ID: E8F1E9EAD284E17D
2 changed files with 10 additions and 10 deletions

View File

@ -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.)

View File

@ -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.