aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorProfpatsch <mail@profpatsch.de>2017-06-12 07:07:59 +0200
committerProfpatsch <mail@profpatsch.de>2017-06-22 00:58:59 +0200
commit5cbc6ca9bb63f939dab2c2c82a63d72f1f30d9b7 (patch)
tree3e80385ca7d970dfca11cafe12be51e6ec0f08ec
parentfeb8cbdc38c6b10b2c66a96151d8d560e960c29f (diff)
lib/generators: put more information in toPretty lambdas
With `builtins.functionArgs` we can get some information if the first argument is an attrset and whether the contained fields have default values. Encode that into the pretty-printed lambda.
-rw-r--r--lib/generators.nix9
-rw-r--r--lib/tests/misc.nix2
2 files changed, 9 insertions, 2 deletions
diff --git a/lib/generators.nix b/lib/generators.nix
index 0e5ce864356..4419c3c8891 100644
--- a/lib/generators.nix
+++ b/lib/generators.nix
@@ -91,7 +91,6 @@ rec {
*/
toYAML = {}@args: toJSON args;
- # TODO we need some kind of pattern matching sometimes
/* Pretty print a value, akin to `builtins.trace`.
* Should probably be a builtin as well.
*/
@@ -105,7 +104,13 @@ rec {
else if isBool v then (if v == true then "true" else "false")
else if isString v then "\"" + v + "\""
else if null == v then "null"
- else if isFunction v then "<位>"
+ else if isFunction v then
+ let fna = functionArgs v;
+ showFnas = concatStringsSep "," (libAttr.mapAttrsToList
+ (name: hasDefVal: if hasDefVal then "(${name})" else name)
+ fna);
+ in if fna == {} then "<位>"
+ else "<位:{${showFnas}}>"
else if isList v then "[ "
+ libStr.concatMapStringsSep " " (toPretty args) v
+ " ]"
diff --git a/lib/tests/misc.nix b/lib/tests/misc.nix
index f40036274e8..4c4c06fe78d 100644
--- a/lib/tests/misc.nix
+++ b/lib/tests/misc.nix
@@ -292,6 +292,7 @@ runTests {
string = "fnord";
null_ = null;
function = x: x;
+ functionArgs = { arg ? 4, foo }: arg;
list = [ 3 4 function [ false ] ];
attrs = { foo = null; "foo bar" = "baz"; };
drv = derivation { name = "test"; system = builtins.currentSystem; };
@@ -302,6 +303,7 @@ runTests {
string = "\"fnord\"";
null_ = "null";
function = "<位>";
+ functionArgs = "<位:{(arg),foo}>";
list = "[ 3 4 ${function} [ false ] ]";
attrs = "{ \"foo\" = null; \"foo bar\" = \"baz\"; }";
drv = "<未>";