add std/strings.nix
This commit is contained in:
parent
f6c33420ea
commit
6c70ee589e
2 changed files with 40 additions and 0 deletions
38
nib/std/strings.nix
Normal file
38
nib/std/strings.nix
Normal 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
|
||||
);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue