query
On this page

removeSuffix

lib.removeSuffix

Docs pulled from | This Revision | 10 minutes ago


Return a string without the specified suffix, if the suffix matches.

Inputs

suffix
Suffix to remove if it matches
str
Input string

Type

removeSuffix :: string -> string -> string

Examples

lib.strings.removeSuffix usage example

removeSuffix "front" "homefront"
=> "home"
removeSuffix "xxx" "homefront"
=> "homefront"
(lib.strings.removeSuffix)

Noogle detected

Aliases

Implementation

The following is the current implementation of this function.

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
      );