about summary refs log tree commit diff
path: root/lib
diff options
context:
space:
mode:
authorNaïm Favier <n@monade.li>2022-12-10 15:56:30 +0100
committerNaïm Favier <n@monade.li>2022-12-10 15:56:30 +0100
commited0b8c26f127525a9ee66f895bdc894cdaa5d685 (patch)
tree608169ac5743d8693a16f34cb8206a62f243f3db /lib
parentf8fc2323e9ba9d25aebef0a15cec5ca5cabdc495 (diff)
lib/strings: add `concatLines`
Like `unlines` from Haskell.

The aim is to replace the `concatStringsSep "\n"` pattern for generated
files, which doesn't add a final newline.
Diffstat (limited to 'lib')
-rw-r--r--lib/default.nix2
-rw-r--r--lib/strings.nix11
-rw-r--r--lib/tests/misc.nix5
3 files changed, 17 insertions, 1 deletions
diff --git a/lib/default.nix b/lib/default.nix
index 68e5b8dea1eb8..48d066e17cccd 100644
--- a/lib/default.nix
+++ b/lib/default.nix
@@ -93,7 +93,7 @@ let
       subtractLists mutuallyExclusive groupBy groupBy';
     inherit (self.strings) concatStrings concatMapStrings concatImapStrings
       intersperse concatStringsSep concatMapStringsSep
-      concatImapStringsSep makeSearchPath makeSearchPathOutput
+      concatImapStringsSep concatLines makeSearchPath makeSearchPathOutput
       makeLibraryPath makeBinPath optionalString
       hasInfix hasPrefix hasSuffix stringToCharacters stringAsChars escape
       escapeShellArg escapeShellArgs isValidPosixName toShellVar toShellVars
diff --git a/lib/strings.nix b/lib/strings.nix
index 9a4f29380d0de..32132e83b242c 100644
--- a/lib/strings.nix
+++ b/lib/strings.nix
@@ -127,6 +127,17 @@ rec {
     # List of input strings
     list: concatStringsSep sep (lib.imap1 f list);
 
+  /* Concatenate a list of strings, adding a newline at the end of each one.
+     Defined as `concatMapStrings (s: s + "\n")`.
+
+     Type: concatLines :: [string] -> string
+
+     Example:
+       concatLines [ "foo" "bar" ]
+       => "foo\nbar\n"
+  */
+  concatLines = concatMapStrings (s: s + "\n");
+
   /* Construct a Unix-style, colon-separated search path consisting of
      the given `subDir` appended to each of the given paths.
 
diff --git a/lib/tests/misc.nix b/lib/tests/misc.nix
index 648c05ab35720..7cd6dd182f47c 100644
--- a/lib/tests/misc.nix
+++ b/lib/tests/misc.nix
@@ -153,6 +153,11 @@ runTests {
     expected = "a,b,c";
   };
 
+  testConcatLines = {
+    expr = concatLines ["a" "b" "c"];
+    expected = "a\nb\nc\n";
+  };
+
   testSplitStringsSimple = {
     expr = strings.splitString "." "a.b.c.d";
     expected = [ "a" "b" "c" "d" ];