Skip to content

Document that std.stripChars/lstripChars/rstripChars accept array as chars parameter #1325

@He-Pin

Description

@He-Pin

Summary

The documentation for std.stripChars, std.lstripChars, and std.rstripChars currently only shows string arguments for the chars parameter. However, the reference implementation in stdlib/std.jsonnet inherently supports arrays because it uses std.member(chars, str[0]), which works with both strings and arrays.

Current behavior

When chars is an array, std.member checks if the character is an element of the array. This means:

  • Single-character string elements are used as characters to strip
  • Multi-character strings, numbers, booleans, null, objects, arrays are silently ignored (they never match a single character)

Examples

// Works with string (documented)
std.lstripChars("aaabcdef", "a")  // "bcdef"

// Works with array (undocumented but functional)
std.lstripChars("forward", ["f", "o"])  // "rward"
std.stripChars("UwU Lel Stosh", ["h", "U", "s", {}, [], null, "w"])  // " Lel Sto"
std.lstripChars("123abc", [1, 2, 3])  // "123abc" (numbers ignored)
std.lstripChars("aabc", ["ab"])  // "aabc" (multi-char string ignored)

Cross-implementation verification

All major implementations support this behavior:

Expression cpp-jsonnet go-jsonnet sjsonnet jrsonnet
std.lstripChars("forward", ["f","o"]) "rward" "rward" "rward" "rward"
std.rstripChars("cool just cool", ["o","l"]) "cool just c" "cool just c" "cool just c" "cool just c"
std.stripChars("UwU Lel Stosh", ["h","U","s",{},[],null,"w"]) " Lel Sto" " Lel Sto" " Lel Sto" " Lel Sto"

Proposal

Document the array parameter support in doc/ref/stdlib.html for std.stripChars, std.lstripChars, and std.rstripChars, noting that:

  1. chars can be a string or an array
  2. When an array is provided, only single-character string elements are used as characters to strip
  3. Non-string and multi-character string elements are silently ignored

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions