lib/generators.toPretty: Improved string printing, handling newlines
This commit is contained in:
parent
47f2eb89c1
commit
073e9b2aed
|
@ -213,7 +213,19 @@ rec {
|
||||||
outroSpace = if multiline then "\n${indent}" else " ";
|
outroSpace = if multiline then "\n${indent}" else " ";
|
||||||
in if isInt v then toString v
|
in if isInt v then toString v
|
||||||
else if isFloat v then "~${toString v}"
|
else if isFloat v then "~${toString v}"
|
||||||
else if isString v then ''"${libStr.escape [''"''] v}"''
|
else if isString v then
|
||||||
|
let
|
||||||
|
# Separate a string into its lines
|
||||||
|
newlineSplits = filter (v: ! isList v) (builtins.split "\n" v);
|
||||||
|
# For a '' string terminated by a \n, which happens when the closing '' is on a new line
|
||||||
|
multilineResult = "''" + introSpace + concatStringsSep introSpace (lib.init newlineSplits) + outroSpace + "''";
|
||||||
|
# For a '' string not terminated by a \n, which happens when the closing '' is not on a new line
|
||||||
|
multilineResult' = "''" + introSpace + concatStringsSep introSpace newlineSplits + "''";
|
||||||
|
# For single lines, replace all newlines with their escaped representation
|
||||||
|
singlelineResult = "\"" + libStr.escape [ "\"" ] (concatStringsSep "\\n" newlineSplits) + "\"";
|
||||||
|
in if multiline && length newlineSplits > 1 then
|
||||||
|
if lib.last newlineSplits == "" then multilineResult else multilineResult'
|
||||||
|
else singlelineResult
|
||||||
else if true == v then "true"
|
else if true == v then "true"
|
||||||
else if false == v then "false"
|
else if false == v then "false"
|
||||||
else if null == v then "null"
|
else if null == v then "null"
|
||||||
|
|
|
@ -450,7 +450,9 @@ runTests {
|
||||||
int = 42;
|
int = 42;
|
||||||
float = 0.1337;
|
float = 0.1337;
|
||||||
bool = true;
|
bool = true;
|
||||||
|
emptystring = "";
|
||||||
string = ''fno"rd'';
|
string = ''fno"rd'';
|
||||||
|
newlinestring = "\n";
|
||||||
path = /. + "/foo";
|
path = /. + "/foo";
|
||||||
null_ = null;
|
null_ = null;
|
||||||
function = x: x;
|
function = x: x;
|
||||||
|
@ -463,7 +465,9 @@ runTests {
|
||||||
int = "42";
|
int = "42";
|
||||||
float = "~0.133700";
|
float = "~0.133700";
|
||||||
bool = "true";
|
bool = "true";
|
||||||
|
emptystring = ''""'';
|
||||||
string = ''"fno\"rd"'';
|
string = ''"fno\"rd"'';
|
||||||
|
newlinestring = "\"\\n\"";
|
||||||
path = "/foo";
|
path = "/foo";
|
||||||
null_ = "null";
|
null_ = "null";
|
||||||
function = "<λ>";
|
function = "<λ>";
|
||||||
|
@ -478,6 +482,16 @@ runTests {
|
||||||
expr = mapAttrs (const (generators.toPretty { })) rec {
|
expr = mapAttrs (const (generators.toPretty { })) rec {
|
||||||
list = [ 3 4 [ false ] ];
|
list = [ 3 4 [ false ] ];
|
||||||
attrs = { foo = null; bar.foo = "baz"; };
|
attrs = { foo = null; bar.foo = "baz"; };
|
||||||
|
newlinestring = "\n";
|
||||||
|
multilinestring = ''
|
||||||
|
hello
|
||||||
|
there
|
||||||
|
test
|
||||||
|
'';
|
||||||
|
multilinestring' = ''
|
||||||
|
hello
|
||||||
|
there
|
||||||
|
test'';
|
||||||
};
|
};
|
||||||
expected = rec {
|
expected = rec {
|
||||||
list = ''
|
list = ''
|
||||||
|
@ -495,6 +509,19 @@ runTests {
|
||||||
};
|
};
|
||||||
foo = null;
|
foo = null;
|
||||||
}'';
|
}'';
|
||||||
|
newlinestring = "''\n \n''";
|
||||||
|
multilinestring = ''
|
||||||
|
'''
|
||||||
|
hello
|
||||||
|
there
|
||||||
|
test
|
||||||
|
''''';
|
||||||
|
multilinestring' = ''
|
||||||
|
'''
|
||||||
|
hello
|
||||||
|
there
|
||||||
|
test''''';
|
||||||
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue