Sorry, I got so wrapped up on the proposal that I forgot about your example. :D
We can make replace_leading/trailing/prefix/suffix accept t | [t] and that would solve your use case. We already accept only this subset on starts_with? / ends_with?, so I think it is a natural extension here. Then it will automatically work on trim_leading/trim_trailing, since those just use the replace equivalents. Shall we go this route for now? Please open up an issue and feel free to submit a PR. :) I am not convinced on trim_prefix/trim_suffix yet though, but you can use the replace functions to achieve the same. On Wed, Mar 2, 2022 at 7:11 PM 'eksperimental' via elixir-lang-core < elixir-lang-core@googlegroups.com> wrote: > > So unless there is a strong > > reason for adding this, rather than consistency, I would not go this > > route. > > Personally I don't think it is an inconsistency because there is no > equivalent of String.trim_leading/1 (or the equivalent makes no sense, > or hardly has any use). > > The need for String.trim_prefix/2 is because what actually solves the > problem (my use case) that I initially shows. > > String.trim_leading could be considered an addition for consistency, > but I guess it could still be useful in some cases but its > implementation would not be as optimal as Sting.trim_prefix/2' s. > > > On Wed, 2 Mar 2022 14:56:19 +0100 > José Valim <jose.va...@dashbit.co> wrote: > > > Thanks for the proposal. I believe we don't support all patterns > > because it will be inefficient, especially the suffix/trailing > > functions. It is not necessarily trivial to implement it for regexes > > either (and regexes have their own mechanism to represent > > prefixes/suffixes). > > > > The reason we don't have "trim_prefix" and "trim_suffix" is because > > there is no reasonable implementation of trim_prefix/1 and > > trim_suffix/1 - where no pattern to trim on is given (for example, it > > it to the behaviour of trim_leading/1 and trim_trailing/1). So we > > could add trim_prefix/2 and trim_suffix/2, but then it is > > inconsistent with other trim* functions. So unless there is a strong > > reason for adding this, rather than consistency, I would not go this > > route. > > > > > > > > On Wed, Mar 2, 2022 at 2:25 PM 'eksperimental' via elixir-lang-core < > > elixir-lang-core@googlegroups.com> wrote: > > > > > When starting to work in this implementation was wondering what > > > should be the return value of > > > > > > String.trim_leading("--__--abc", [" ", "-", "_"]) > > > > > > > > > and I realized that it should mimic String.replace_leading/3 > > > Therefore it should returning "abc" > > > > > > Which leads me to think we should introduce String.trim_prefix/2, > > > in order to be consistent with String.replace_prefix/3 > > > where the same input as above should behave like this: > > > > > > iex> String.trim_prefix("--__--abc", [" ", "-", "_"]) > > > "__--abc" > > > > > > Which also makes me think that String.replace_prefix should also > > > behave like String.replace/3 where the second argument (match) is a > > > pattern, not a string (ie. a string, list of strings, or a compiled > > > search pattern). By introducing this last consistency change, the > > > implementation of the consistency changes for the other functions > > > mentioned above is straight-forward. > > > > > > So in short this consistency proposals suggests some functions to > > > support t:String.pattern/0 which could be a string, a list of > > > strings, or a compiled search pattern. > > > > > > 1. `String.replace_{leading, prefix, suffix, trailing}/3` to > > > support in its second argument (match) t:String.pattern/0. Current > > > String.replace/4 supports t:String.pattern/0 | t:Regex.t/0, but for > > > the sake of simplifying this proposal I would leave out > > > Regexes out of the equation for now. > > > > > > 2. Introduce String.trim_{prefix, suffix}/2 which will support > > > t:String.pattern/0 as a its second arguments. These functions should > > > mimic String.replace_{prefix, suffix}/2 > > > > > > 3. Add support for t:String.pattern/0 for String.{trim, > > > trim_leading, trim_trailing}/2 to support t:String.pattern/0 as its > > > second argument. These functions should mimic String.{replace, > > > replace_leading, replace_trailing}/3 > > > > > > Please let me know what you think. > > > > > > -- > > > You received this message because you are subscribed to the Google > > > Groups "elixir-lang-core" group. > > > To unsubscribe from this group and stop receiving emails from it, > > > send an email to elixir-lang-core+unsubscr...@googlegroups.com. > > > To view this discussion on the web visit > > > > https://groups.google.com/d/msgid/elixir-lang-core/621f703a.1c69fb81.2b06.fa97SMTPIN_ADDED_MISSING%40gmr-mx.google.com > > > . > > > > > > > -- > You received this message because you are subscribed to the Google Groups > "elixir-lang-core" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to elixir-lang-core+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/elixir-lang-core/621fb346.1c69fb81.37fc8.dec4SMTPIN_ADDED_MISSING%40gmr-mx.google.com > . > -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to elixir-lang-core+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4%2B%2BvOh9dLro3H%2BMg9pXpy5fMDx1YofsVf2NTcuFCnVr4Q%40mail.gmail.com.