summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorSilvan Mosberger <contact@infinisil.com>2020-09-16 20:05:53 +0200
committerSilvan Mosberger <contact@infinisil.com>2020-09-21 18:24:52 +0200
commitbdfcee2590b9eca62cfa5c45b7b774846232ee2f (patch)
treecc0bbc87c7db06f688f59e318e4feba655032aa9 /lib
parent7c20e68f6be7b7421d8717cc8d0ad1dadef76c67 (diff)
lib/modules: Improve error messages using showDefs
Diffstat (limited to 'lib')
-rw-r--r--lib/modules.nix8
-rw-r--r--lib/options.nix12
2 files changed, 10 insertions, 10 deletions
diff --git a/lib/modules.nix b/lib/modules.nix
index 412c7f1df712..de6fadbcb91c 100644
--- a/lib/modules.nix
+++ b/lib/modules.nix
@@ -117,7 +117,7 @@ rec {
if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [] then
let
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
if attrNames options == [ "_module" ]
then throw ''
@@ -449,7 +449,7 @@ rec {
# Handle properties, check types, and merge everything together.
res =
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
mergeDefinitions loc opt.type defs';
@@ -497,8 +497,8 @@ rec {
mergedValue =
if isDefined then
if all (def: type.check def.value) defsFinal then type.merge loc defsFinal
- else let firstInvalid = findFirst (def: ! type.check def.value) null defsFinal;
- in throw "The option value `${showOption loc}' in `${firstInvalid.file}' is not of type `${type.description}'."
+ else let allInvalid = filter (def: ! type.check def.value) defsFinal;
+ in throw "A definition for option `${showOption loc}' is not of type `${type.description}'. Definition values:${showDefs allInvalid}"
else
# (nixos-option detects this specific error message and gives it special
# handling. If changed here, please change it there too.)
diff --git a/lib/options.nix b/lib/options.nix
index 73856573a5d1..5b7482c80937 100644
--- a/lib/options.nix
+++ b/lib/options.nix
@@ -96,12 +96,12 @@ rec {
else if all isBool list then foldl' lib.or false 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 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:
if defs == [] then abort "This case should never happen."
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;
/* "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
# to compare the first element with itself, which is false for functions
else if length defs == 1 then (elemAt defs 0).value
- else foldl' (val: def:
- if def.value != val then
- throw "The option `${showOption loc}' has conflicting definitions, in ${showFiles (getFiles defs)}."
+ else (foldl' (first: def:
+ if def.value != first.value then
+ throw "The option `${showOption loc}' has conflicting definition values:${showDefs [ first def ]}"
else
- val) (head defs).value defs;
+ first) (head defs) defs).value;
/* Extracts values of all "value" keys of the given list.