diff options
| author | Earlopain <14981592+Earlopain@users.noreply.github.com> | 2025-03-30 13:28:36 +0200 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2025-04-02 20:51:54 +0000 |
| commit | 334c261cc9ee125c4c4bfc65dec2e571af8944a2 (patch) | |
| tree | 1189aaa43216b50dc44ac5922128072bc6a39e2d /lib | |
| parent | fe9ebb245644a38392fd26b5ec18efd8e549b154 (diff) | |
[ruby/prism] Fix parser translator when splatting in pattern matching pin
Because it ends up treating it as a local variable, and `a.x`
is not a valid local variable name.
I'm not big on pattern matching, but conceptually it makes sense to me
to treat anything inside ^() to not be
pattern matching syntax?
https://github.com/ruby/prism/commit/80dbd85c45
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/prism/translation/parser/compiler.rb | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/lib/prism/translation/parser/compiler.rb b/lib/prism/translation/parser/compiler.rb index acf4e77ee4..1beccc30a1 100644 --- a/lib/prism/translation/parser/compiler.rb +++ b/lib/prism/translation/parser/compiler.rb @@ -1481,7 +1481,8 @@ module Prism # foo => ^(bar) # ^^^^^^ def visit_pinned_expression_node(node) - expression = builder.begin(token(node.lparen_loc), visit(node.expression), token(node.rparen_loc)) + parts = node.expression.accept(copy_compiler(in_pattern: false)) # Don't treat * and similar as match_rest + expression = builder.begin(token(node.lparen_loc), parts, token(node.rparen_loc)) builder.pin(token(node.operator_loc), expression) end |
