summary refs log tree commit diff
path: root/lib/modules.nix
diff options
context:
space:
mode:
authorRobert Hensing <robert@roberthensing.nl>2022-12-02 10:49:10 +0000
committerRobert Hensing <robert@roberthensing.nl>2022-12-02 11:06:53 +0000
commit6110a6009fc77348e9c47e0801a9b884dc76c730 (patch)
tree40963b832551c478c0cb2c24d6364173cdd67dd2 /lib/modules.nix
parente76c78d20685a043d23f5f9e0ccd2203997f1fb1 (diff)
downloadnixpkgs-6110a6009fc77348e9c47e0801a9b884dc76c730.tar
nixpkgs-6110a6009fc77348e9c47e0801a9b884dc76c730.tar.gz
nixpkgs-6110a6009fc77348e9c47e0801a9b884dc76c730.tar.bz2
nixpkgs-6110a6009fc77348e9c47e0801a9b884dc76c730.tar.lz
nixpkgs-6110a6009fc77348e9c47e0801a9b884dc76c730.tar.xz
nixpkgs-6110a6009fc77348e9c47e0801a9b884dc76c730.tar.zst
nixpkgs-6110a6009fc77348e9c47e0801a9b884dc76c730.zip
lib/modules: Add context to the "option does not exist" error
Add trace items that provide context for a failed definition that
can not be caught within the Nix language.

This also adds a test for the `tryEval` behavior of `showDefs`.
Diffstat (limited to 'lib/modules.nix')
-rw-r--r--lib/modules.nix13
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/modules.nix b/lib/modules.nix
index 204a2cc1ac1..23e531de5c3 100644
--- a/lib/modules.nix
+++ b/lib/modules.nix
@@ -284,7 +284,18 @@ rec {
         if config._module.check && config._module.freeformType == null && merged.unmatchedDefns != [] then
           let
             firstDef = head merged.unmatchedDefns;
-            baseMsg = "The option `${showOption (prefix ++ firstDef.prefix)}' does not exist. Definition values:${showDefs [ firstDef ]}";
+            baseMsg =
+              let
+                optText = showOption (prefix ++ firstDef.prefix);
+                defText =
+                  builtins.addErrorContext
+                    "while evaluating the error message for definitions for `${optText}', which is an option that does not exist"
+                    (builtins.addErrorContext
+                      "while evaluating a definition from `${firstDef.file}'"
+                      ( showDefs [ firstDef ])
+                    );
+              in
+                "The option `${optText}' does not exist. Definition values:${defText}";
           in
             if attrNames options == [ "_module" ]
               then