AST regression for foo.~@ bar in Prism 1.7.0 (translation Parser33):
Expected Behavior
Prism 1.6.0 returns "~@":
$ bundle exec ruby -rprism -rprism/translation/parser33 -ve 'p Prism::Translation::Parser33.parse("foo.~@ bar")'
ruby 4.0.0dev (2025-11-08T11:52:39Z master 4365c4fb6b) +PRISM [arm64-darwin24]
s(:send,
s(:send, nil, :foo), :"~@",
s(:send, nil, :bar))
and Parser gem returns "~@" too:
$ bundle exec ruby -rparser/ruby33 -ve 'p Parser::Ruby33.parse("foo.~@ bar")'
ruby 4.0.0dev (2025-11-08T11:52:39Z master 4365c4fb6b) +PRISM [arm64-darwin24]
s(:send,
s(:send, nil, :foo), :"~@",
s(:send, nil, :bar))
Actual Behavior
Prism 1.7.0 returns "~":
$ bundle exec ruby -rprism -rprism/translation/parser33 -ve 'p Prism::Translation::Parser33.parse("foo.~@ bar")'
ruby 4.0.0dev (2025-11-08T11:52:39Z master 4365c4fb6b) +PRISM [arm64-darwin24]
s(:send,
s(:send, nil, :foo), :~,
s(:send, nil, :bar))
This breaks compatibility with Parser's AST for unary ~@ calls. And "foo.!@ bar" has the same issue as "foo.~@ bar".
AST regression for
foo.~@ barin Prism 1.7.0 (translation Parser33):Expected Behavior
Prism 1.6.0 returns
"~@":and Parser gem returns
"~@"too:Actual Behavior
Prism 1.7.0 returns
"~":This breaks compatibility with Parser's AST for unary
~@calls. And"foo.!@ bar"has the same issue as"foo.~@ bar".