diff options
author | Silvan Mosberger <contact@infinisil.com> | 2020-09-17 17:58:04 +0200 |
---|---|---|
committer | Silvan Mosberger <contact@infinisil.com> | 2020-09-17 18:20:31 +0200 |
commit | 073e9b2aed0f855ce26bd3a26dab044c0c17c817 (patch) | |
tree | 6b0f3bae170b862c336d7820f4b3b2e38ca5f235 /lib/generators.nix | |
parent | 47f2eb89c16a74881c6e1a3b18290bf3d0f94a60 (diff) | |
download | nixpkgs-073e9b2aed0f855ce26bd3a26dab044c0c17c817.tar nixpkgs-073e9b2aed0f855ce26bd3a26dab044c0c17c817.tar.gz nixpkgs-073e9b2aed0f855ce26bd3a26dab044c0c17c817.tar.bz2 nixpkgs-073e9b2aed0f855ce26bd3a26dab044c0c17c817.tar.lz nixpkgs-073e9b2aed0f855ce26bd3a26dab044c0c17c817.tar.xz nixpkgs-073e9b2aed0f855ce26bd3a26dab044c0c17c817.tar.zst nixpkgs-073e9b2aed0f855ce26bd3a26dab044c0c17c817.zip |
lib/generators.toPretty: Improved string printing, handling newlines
Diffstat (limited to 'lib/generators.nix')
-rw-r--r-- | lib/generators.nix | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/generators.nix b/lib/generators.nix index 23a74c757f8..81bedd13d80 100644 --- a/lib/generators.nix +++ b/lib/generators.nix @@ -213,7 +213,19 @@ rec { outroSpace = if multiline then "\n${indent}" else " "; in if isInt 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 false == v then "false" else if null == v then "null" |