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.

Changed files
+9 -2
lib
+7 -2
lib/generators.nix
···
*/
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.
*/
···
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
+ " ]"
+2
lib/tests/misc.nix
···
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; };
···
string = "\"fnord\"";
null_ = "null";
function = "<λ>";
+
functionArgs = "<λ:{(arg),foo}>";
list = "[ 3 4 ${function} [ false ] ]";
attrs = "{ \"foo\" = null; \"foo bar\" = \"baz\"; }";
drv = "<δ>";