lib: improve filterAttrs (#345547)
This commit is contained in:
commit
5690833b4f
@ -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 {
|
||||
@ -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
|
||||
|
@ -47,6 +47,7 @@ let
|
||||
evalModules
|
||||
extends
|
||||
filter
|
||||
filterAttrs
|
||||
fix
|
||||
fold
|
||||
foldAttrs
|
||||
@ -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…
Reference in New Issue
Block a user