diff options
author | Silvan Mosberger <contact@infinisil.com> | 2021-12-02 18:12:51 +0100 |
---|---|---|
committer | Silvan Mosberger <contact@infinisil.com> | 2022-03-18 00:05:08 +0100 |
commit | 71b130c581c81bf3bd2a3c777f7cc11d746327ae (patch) | |
tree | 9e30497b8edff6f64fe682150a1c5b57c7639831 /lib | |
parent | 671a068a0166a5474e51b4d151b64250f8feaec8 (diff) | |
download | nixpkgs-71b130c581c81bf3bd2a3c777f7cc11d746327ae.tar nixpkgs-71b130c581c81bf3bd2a3c777f7cc11d746327ae.tar.gz nixpkgs-71b130c581c81bf3bd2a3c777f7cc11d746327ae.tar.bz2 nixpkgs-71b130c581c81bf3bd2a3c777f7cc11d746327ae.tar.lz nixpkgs-71b130c581c81bf3bd2a3c777f7cc11d746327ae.tar.xz nixpkgs-71b130c581c81bf3bd2a3c777f7cc11d746327ae.tar.zst nixpkgs-71b130c581c81bf3bd2a3c777f7cc11d746327ae.zip |
lib.attrsets: Introduce showAttrPath
Diffstat (limited to 'lib')
-rw-r--r-- | lib/attrsets.nix | 16 | ||||
-rw-r--r-- | lib/default.nix | 2 | ||||
-rw-r--r-- | lib/tests/misc.nix | 22 |
3 files changed, 38 insertions, 2 deletions
diff --git a/lib/attrsets.nix b/lib/attrsets.nix index a88947b4585..7a3df9059c0 100644 --- a/lib/attrsets.nix +++ b/lib/attrsets.nix @@ -4,7 +4,7 @@ let inherit (builtins) head tail length; inherit (lib.trivial) id; - inherit (lib.strings) concatStringsSep sanitizeDerivationName; + inherit (lib.strings) concatStringsSep concatMapStringsSep escapeNixIdentifier sanitizeDerivationName; inherit (lib.lists) foldr foldl' concatMap concatLists elemAt all; in @@ -477,6 +477,20 @@ rec { overrideExisting = old: new: mapAttrs (name: value: new.${name} or value) old; + /* Turns a list of strings into a human-readable description of those + strings represented as an attribute path. The result of this function is + not intended to be machine-readable. + + Example: + showAttrPath [ "foo" "10" "bar" ] + => "foo.\"10\".bar" + showAttrPath [] + => "<root attribute path>" + */ + showAttrPath = path: + if path == [] then "<root attribute path>" + else concatMapStringsSep "." escapeNixIdentifier path; + /* Get a package output. If no output is found, fallback to `.out` and then to the default. diff --git a/lib/default.nix b/lib/default.nix index 3fead03a463..6e5465bc003 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -78,7 +78,7 @@ let mapAttrs' mapAttrsToList mapAttrsRecursive mapAttrsRecursiveCond genAttrs isDerivation toDerivation optionalAttrs zipAttrsWithNames zipAttrsWith zipAttrs recursiveUpdateUntil - recursiveUpdate matchAttrs overrideExisting getOutput getBin + recursiveUpdate matchAttrs overrideExisting showAttrPath getOutput getBin getLib getDev getMan chooseDevOutputs zipWithNames zip recurseIntoAttrs dontRecurseIntoAttrs cartesianProductOfSets; inherit (self.lists) singleton forEach foldr fold foldl foldl' imap0 imap1 diff --git a/lib/tests/misc.nix b/lib/tests/misc.nix index 5fa95828df6..c4a34369f50 100644 --- a/lib/tests/misc.nix +++ b/lib/tests/misc.nix @@ -761,4 +761,26 @@ runTests { { a = 3; b = 30; c = 300; } ]; }; + + # The example from the showAttrPath documentation + testShowAttrPathExample = { + expr = showAttrPath [ "foo" "10" "bar" ]; + expected = "foo.\"10\".bar"; + }; + + testShowAttrPathEmpty = { + expr = showAttrPath []; + expected = "<root attribute path>"; + }; + + testShowAttrPathVarious = { + expr = showAttrPath [ + "." + "foo" + "2" + "a2-b" + "_bc'de" + ]; + expected = "\".\".foo.\"2\".a2-b._bc'de"; + }; } |