From: "mrkn (Kenta Murata) via ruby-core" <ruby-core@...>
Date: 2024-02-15T09:05:17+00:00
Subject: [ruby-core:116771] [Ruby master Feature#20266] New syntax to escape embed strings in Regexp literal

Issue #20266 has been updated by mrkn (Kenta Murata).


I agree with this proposal.  Even if Ruby enables `\Q` and `\E` features in Onigumo, they don't work as expected if the embedded string contains `\E`.  Therefore, it would be better for Ruby to have a short syntax for `#{Regexp.quote(str)}`.

----------------------------------------
Feature #20266: New syntax to escape embed strings in Regexp literal
https://bugs.ruby-lang.org/issues/20266#change-106794

* 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/