Loading lib/attrsets.nix +2 −3 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ let inherit (builtins) head length; inherit (lib.trivial) oldestSupportedReleaseIsAtLeast mergeAttrs warn warnIf; inherit (lib.strings) concatStringsSep concatMapStringsSep escapeNixIdentifier sanitizeDerivationName; inherit (lib.lists) foldr foldl' concatMap elemAt all partition groupBy take foldl; inherit (lib.lists) filter foldr foldl' concatMap elemAt all partition groupBy take foldl; in rec { Loading Loading @@ -644,8 +644,7 @@ rec { filterAttrs = pred: set: listToAttrs (concatMap (name: let v = set.${name}; in if pred name v then [(nameValuePair name v)] else []) (attrNames set)); removeAttrs set (filter (name: ! pred name set.${name}) (attrNames set)); /** Filter an attribute set recursively by removing all attributes for Loading lib/tests/misc.nix +20 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ let evalModules extends filter filterAttrs fix fold foldAttrs Loading Loading @@ -1102,6 +1103,25 @@ runTests { }; }; testFilterAttrs = { expr = filterAttrs (n: v: n != "a" && (v.hello or false) == true) { a.hello = true; b.hello = true; c = { hello = true; world = false; }; d.hello = false; }; expected = { b.hello = true; c = { hello = true; world = false; }; }; }; # code from example testFoldlAttrs = { expr = { Loading Loading
lib/attrsets.nix +2 −3 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ let inherit (builtins) head length; inherit (lib.trivial) oldestSupportedReleaseIsAtLeast mergeAttrs warn warnIf; inherit (lib.strings) concatStringsSep concatMapStringsSep escapeNixIdentifier sanitizeDerivationName; inherit (lib.lists) foldr foldl' concatMap elemAt all partition groupBy take foldl; inherit (lib.lists) filter foldr foldl' concatMap elemAt all partition groupBy take foldl; in rec { Loading Loading @@ -644,8 +644,7 @@ rec { filterAttrs = pred: set: listToAttrs (concatMap (name: let v = set.${name}; in if pred name v then [(nameValuePair name v)] else []) (attrNames set)); removeAttrs set (filter (name: ! pred name set.${name}) (attrNames set)); /** Filter an attribute set recursively by removing all attributes for Loading
lib/tests/misc.nix +20 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ let evalModules extends filter filterAttrs fix fold foldAttrs Loading Loading @@ -1102,6 +1103,25 @@ runTests { }; }; testFilterAttrs = { expr = filterAttrs (n: v: n != "a" && (v.hello or false) == true) { a.hello = true; b.hello = true; c = { hello = true; world = false; }; d.hello = false; }; expected = { b.hello = true; c = { hello = true; world = false; }; }; }; # code from example testFoldlAttrs = { expr = { Loading