Some backslashes are dropped from heredocs
Hi Markus,
When there is an interpolation in the heredoc, it comes out underescaped.
require 'unparser'
ast = Unparser.parse(<<~'OUTER')
<<~RUBY
validates :#{field_sid}, format: {
with: /\\A\\-+(\\w+\\-+)|(\\w+\\.)\\Z/i
}
RUBY
OUTER
p ast
puts Unparser.unparse(ast)
s(:dstr,
s(:str, "validates :"),
s(:begin,
s(:send, nil, :field_sid)),
s(:str, ", format: {\n"),
s(:str, " with: /\\A\\-+(\\w+\\-+)|(\\w+\\.)\\Z/i\n"),
s(:str, " }\n"))
<<-HEREDOC
validates :#{field_sid}, format: {
with: /\A\-+(\w+\-+)|(\w+\.)\Z/i
}
HEREDOC
All the backslashes should be doubled. And they are if I remove the interpolation.
Cheers!
Its very likely this is solved by #366, will test it. Sadly #366 is not ready yet as its a deeper refactor.
Fixed with #366 which just got merged.
🎉🙏
@akimd Also released as 0.7.0. This was as significant blob of work. And more work is to come to support 3.4 correctly as parser is being deprecated in favor of prism. Feel free to reach out in private should your org be able to support this efforts.