about summary refs log tree commit diff
path: root/lib
diff options
context:
space:
mode:
authorRobert Hensing <robert@roberthensing.nl>2024-04-04 10:29:56 +0200
committerRobert Hensing <robert@roberthensing.nl>2024-04-04 12:00:54 +0200
commit47e4a18d018be9efaa93a199e24fbeedc80f14be (patch)
treeb28f1ba748adbcaed1e509701a691ce1bea4ff30 /lib
parent1465777b63d38988d5ecd81683d2975321e59d1a (diff)
types.attrTagWith: remove
Keep it simple for now.
Diffstat (limited to 'lib')
-rwxr-xr-xlib/tests/modules.sh2
-rw-r--r--lib/types.nix28
2 files changed, 19 insertions, 11 deletions
diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh
index f5f7e907d277a..750b1d025e026 100755
--- a/lib/tests/modules.sh
+++ b/lib/tests/modules.sh
@@ -113,7 +113,7 @@ checkConfigError 'A definition for option .intStrings\.mergeError. is not of typ
 checkConfigError 'A definition for option .intStrings\.badTagError. is not of type .attribute-tagged union' config.intStrings.badTagError ./types-attrTag.nix
 checkConfigError 'A definition for option .intStrings\.badTagTypeError\.left. is not of type .signed integer.' config.intStrings.badTagTypeError.left ./types-attrTag.nix
 checkConfigError 'A definition for option .nested\.right\.left. is not of type .signed integer.' config.nested.right.left ./types-attrTag.nix
-checkConfigError 'In attrTag/attrTagWith, each tag value must be an option, but tag int was a bare type, not wrapped in mkOption.' config.opt.int ./types-attrTag-wrong-decl.nix
+checkConfigError 'In attrTag, each tag value must be an option, but tag int was a bare type, not wrapped in mkOption.' config.opt.int ./types-attrTag-wrong-decl.nix
 
 # types.pathInStore
 checkConfigOutput '".*/store/0lz9p8xhf89kb1c1kk6jxrzskaiygnlh-bash-5.2-p15.drv"' config.pathInStore.ok1 ./types.nix
diff --git a/lib/types.nix b/lib/types.nix
index a77a8ef112440..2e44dd5472ee6 100644
--- a/lib/types.nix
+++ b/lib/types.nix
@@ -620,16 +620,15 @@ rec {
       nestedTypes.elemType = elemType;
     };
 
-    attrTag = tags: attrTagWith { inherit tags; };
-
-    attrTagWith = args@{ tags }:
+    attrTag = tags:
+      let tags_ = tags; in
       let
         tags =
           mapAttrs
             (n: opt:
-              builtins.addErrorContext "while checking that attrTag tag ${lib.strings.escapeNixIdentifier n} is an option with a type${inAttrPosSuffix args.tags n}" (
+              builtins.addErrorContext "while checking that attrTag tag ${lib.strings.escapeNixIdentifier n} is an option with a type${inAttrPosSuffix tags_ n}" (
                 throwIf (opt._type or null != "option")
-                  "In attrTag/attrTagWith, each tag value must be an option, but tag ${lib.strings.escapeNixIdentifier n} ${
+                  "In attrTag, each tag value must be an option, but tag ${lib.strings.escapeNixIdentifier n} ${
                     if opt?_type then
                       if opt._type == "option-type"
                       then "was a bare type, not wrapped in mkOption."
@@ -637,16 +636,16 @@ rec {
                     else "was not."}"
                 opt // {
                   declarations = opt.declarations or (
-                    let pos = builtins.unsafeGetAttrPos n args.tags;
+                    let pos = builtins.unsafeGetAttrPos n tags_;
                     in if pos == null then [] else [ pos.file ]
                   );
                   declarationPositions = opt.declarationPositions or (
-                    let pos = builtins.unsafeGetAttrPos n args.tags;
+                    let pos = builtins.unsafeGetAttrPos n tags_;
                     in if pos == null then [] else [ pos ]
                   );
                 }
               ))
-            args.tags;
+            tags_;
         choicesStr = concatMapStringsSep ", " lib.strings.escapeNixIdentifier (attrNames tags);
       in
       mkOptionType {
@@ -663,7 +662,15 @@ rec {
                 };
             })
             tags;
-        substSubModules = m: attrTagWith { tags = mapAttrs (n: opt: opt // { type = (opt.type or types.unspecified).substSubModules m; }) tags; };
+        substSubModules = m:
+          attrTag
+            (mapAttrs
+              (n: opt:
+                opt // {
+                  type = (opt.type or types.unspecified).substSubModules m;
+                }
+              )
+              tags);
         check = v: isAttrs v && length (attrNames v) == 1 && tags?${head (attrNames v)};
         merge = loc: defs:
           let
@@ -687,7 +694,8 @@ rec {
               }
             else throw "The option `${showOption loc}` is defined as ${lib.strings.escapeNixIdentifier choice}, but ${lib.strings.escapeNixIdentifier choice} is not among the valid choices (${choicesStr}). Value ${choice} was defined in ${showFiles (getFiles defs)}.";
         nestedTypes = tags;
-        functor = (defaultFunctor "attrTagWith") // {
+        functor = defaultFunctor "attrTag" // {
+          type = { tags, ... }: types.attrTag tags;
           payload = { inherit tags; };
           binOp =
             let