[ruby-core:116786] [Ruby master Feature#20266] New syntax to escape embed strings in Regexp literal
From:
"shan (Shannon Skipper) via ruby-core" <ruby-core@...>
Date:
2024-02-15 23:05:08 UTC
List:
ruby-core #116786
Issue #20266 has been updated by shan (Shannon Skipper).
I wonder if `#{^foo}` might be a passable alternative for `#{=foo}` since "pinning" *almost* makes sense and and uptick is less likely to actually be intended than an equals sign to start a quoted interpolation?
----------------------------------------
Feature #20266: New syntax to escape embed strings in Regexp literal
https://bugs.ruby-lang.org/issues/20266#change-106810
* Author: usa (Usaku NAKAMURA)
* Status: Open
* Priority: Normal
----------------------------------------
# Premise
When using embed strings in Regexp literal, it is interpreted as a part of the Regexp.
```ruby
foo = "[a-z]"
p /#{foo}/ #=> /[a-z]/
```
So, currently we often have to escape the embed strings.
```ruby
foo = "[a-z]"
p /#{Regexp.quote(foo)}/ #=> /\[a\-z\]/
```
This is very long and painful to write every time.
So, I propose new syntax to escape embed strings automatically.
# Proposal
Adding new token `#{=` in Regexp literal:
```ruby
foo = "[a-z]"
p /#{=foo}/ #=> /\[a\-z\]/
```
When `#{=` is used instead of `#{`, ruby calls `Regexp.quote` internally.
# Compatibility
Current ruby causes syntax error when using `#{=`, then there is no incompatibilty.
# Out of scope of this proposal
I do not propose about `#{=` in another literals. They are out of scope of this proposal.
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/