about summary refs log tree commit diff
path: root/lib
diff options
context:
space:
mode:
authorRobert Hensing <roberth@users.noreply.github.com>2022-12-19 23:58:50 +0100
committerGitHub <noreply@github.com>2022-12-19 23:58:50 +0100
commit6db219730e6ab6405442e53de2b8acf3404fbdf7 (patch)
treea6137127846e89ed148cb6b0105680acbf41908f /lib
parentdb01e7b2207e0de45d9c346036f22322495ab249 (diff)
parent1a44080088c3a4384da7e4529928f7a0a7b1aa4e (diff)
Merge pull request #205563 from hercules-ci/lib-modules-doc-default-and-example-error-context
lib.modules: Add error context to rendered default and example attrs
Diffstat (limited to 'lib')
-rw-r--r--lib/generators.nix5
-rw-r--r--lib/options.nix17
2 files changed, 18 insertions, 4 deletions
diff --git a/lib/generators.nix b/lib/generators.nix
index c0fe69389e00d..4c9c2d1e98693 100644
--- a/lib/generators.nix
+++ b/lib/generators.nix
@@ -342,7 +342,10 @@ rec {
       else "{" + introSpace
           + libStr.concatStringsSep introSpace (libAttr.mapAttrsToList
               (name: value:
-                "${libStr.escapeNixIdentifier name} = ${go (indent + "  ") value};") v)
+                "${libStr.escapeNixIdentifier name} = ${
+                  builtins.addErrorContext "while evaluating an attribute `${name}`"
+                    (go (indent + "  ") value)
+                };") v)
         + outroSpace + "}"
     else abort "generators.toPretty: should never happen (v = ${v})";
   in go "";
diff --git a/lib/options.nix b/lib/options.nix
index b13687576e810..0fd5b64a65d14 100644
--- a/lib/options.nix
+++ b/lib/options.nix
@@ -221,9 +221,10 @@ rec {
   optionAttrSetToDocList' = _: options:
     concatMap (opt:
       let
+        name = showOption opt.loc;
         docOption = rec {
           loc = opt.loc;
-          name = showOption opt.loc;
+          inherit name;
           description = opt.description or null;
           declarations = filter (x: x != unknownModule) opt.declarations;
           internal = opt.internal or false;
@@ -234,8 +235,18 @@ rec {
           readOnly = opt.readOnly or false;
           type = opt.type.description or "unspecified";
         }
-        // optionalAttrs (opt ? example) { example = renderOptionValue opt.example; }
-        // optionalAttrs (opt ? default) { default = renderOptionValue (opt.defaultText or opt.default); }
+        // optionalAttrs (opt ? example) {
+          example =
+            builtins.addErrorContext "while evaluating the example of option `${name}`" (
+              renderOptionValue opt.example
+            );
+        }
+        // optionalAttrs (opt ? default) {
+          default =
+            builtins.addErrorContext "while evaluating the default value of option `${name}`" (
+              renderOptionValue (opt.defaultText or opt.default)
+            );
+        }
         // optionalAttrs (opt ? relatedPackages && opt.relatedPackages != null) { inherit (opt) relatedPackages; };
 
         subOptions =