about summary refs log tree commit diff
path: root/lib
diff options
context:
space:
mode:
authorSilvan Mosberger <contact@infinisil.com>2020-03-14 17:53:47 +0100
committerSilvan Mosberger <contact@infinisil.com>2020-04-13 17:27:04 +0200
commitf9eb3d158a47dccb1e4762f3ed91f224fc96dc7e (patch)
tree46d7c72348f9dd4a95a7d25ad31fabc7c4ceea61 /lib
parentf9e94b9ffee57a20841dbf35d1e96c22cfbcc56e (diff)
downloadnixlib-f9eb3d158a47dccb1e4762f3ed91f224fc96dc7e.tar
nixlib-f9eb3d158a47dccb1e4762f3ed91f224fc96dc7e.tar.gz
nixlib-f9eb3d158a47dccb1e4762f3ed91f224fc96dc7e.tar.bz2
nixlib-f9eb3d158a47dccb1e4762f3ed91f224fc96dc7e.tar.lz
nixlib-f9eb3d158a47dccb1e4762f3ed91f224fc96dc7e.tar.xz
nixlib-f9eb3d158a47dccb1e4762f3ed91f224fc96dc7e.tar.zst
nixlib-f9eb3d158a47dccb1e4762f3ed91f224fc96dc7e.zip
lib/strings: Introduce escapeNixIdentifier
Diffstat (limited to 'lib')
-rw-r--r--lib/strings.nix15
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/strings.nix b/lib/strings.nix
index 7ecd6b143ee8..74e3eaa0722d 100644
--- a/lib/strings.nix
+++ b/lib/strings.nix
@@ -315,6 +315,21 @@ rec {
   */
   escapeNixString = s: escape ["$"] (builtins.toJSON s);
 
+  /* Quotes a string if it can't be used as an identifier directly.
+
+     Type: string -> string
+
+     Example:
+       escapeNixIdentifier "hello"
+       => "hello"
+       escapeNixIdentifier "0abc"
+       => "\"0abc\""
+  */
+  escapeNixIdentifier = s:
+    # Regex from https://github.com/NixOS/nix/blob/d048577909e383439c2549e849c5c2f2016c997e/src/libexpr/lexer.l#L91
+    if builtins.match "[a-zA-Z_][a-zA-Z0-9_'-]*" s != null
+    then s else escapeNixString s;
+
   # Obsolete - use replaceStrings instead.
   replaceChars = builtins.replaceStrings or (
     del: new: s: