diff --git a/nib/std/strings.nix b/nib/std/strings.nix index f6de047..6060416 100644 --- a/nib/std/strings.nix +++ b/nib/std/strings.nix @@ -2,6 +2,7 @@ inherit (builtins) isPath + genList replaceStrings substring stringLength @@ -19,6 +20,21 @@ in rec { stringLength ; + escape = list: replaceStrings list (map (c: "\\${c}") list); + + escapeRegex = escape (stringToCharacters "\\[{()^$?*+|."); + + hasInfix = infix: content: + # Before 23.05, paths would be copied to the store before converting them + # to strings and comparing. This was surprising and confusing. + warnIf (isPath infix) + '' + lib.strings.hasInfix: The first argument (${toString infix}) is a path value, but only strings are supported. + There is almost certainly a bug in the calling code, since this function always returns `false` in such a case. + This function also copies the path to the Nix store, which may not be what you want. + This behavior is deprecated and will throw an error in the future.'' + (builtins.match ".*${escapeRegex infix}.*" "${content}" != null); + removeSuffix = suffix: str: # Before 23.05, paths would be copied to the store before converting them # to strings and comparing. This was surprising and confusing. @@ -37,4 +53,6 @@ in rec { then substring 0 (sLen - sufLen) str else str ); + + stringToCharacters = s: genList (p: substring p 1 s) (stringLength s); }