add std/strings.nix

This commit is contained in:
Emile Clark-Boman 2026-01-15 13:34:07 +10:00
parent f6c33420ea
commit 6c70ee589e
2 changed files with 40 additions and 0 deletions

38
nib/std/strings.nix Normal file
View file

@ -0,0 +1,38 @@
{nib, ...}: let
inherit
(builtins)
isPath
substring
stringLength
;
inherit
(nib.trivial)
warnIf
;
in rec {
# re-export builtin string methods
inherit
substring
stringLength
;
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.
warnIf (isPath suffix)
''
lib.strings.removeSuffix: The first argument (${toString suffix}) is a path value, but only strings are supported.
There is almost certainly a bug in the calling code, since this function never removes any suffix 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.''
(
let
sufLen = stringLength suffix;
sLen = stringLength str;
in
if sufLen <= sLen && suffix == substring (sLen - sufLen) sufLen str
then substring 0 (sLen - sufLen) str
else str
);
}