diff options
author | Kevin Newton <kddnewton@gmail.com> | 2024-03-05 06:42:57 -0500 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2024-03-06 16:42:38 +0000 |
commit | f44671b094566f159e61c381b2eabb150340f1c8 (patch) | |
tree | c8576c0ca4aefcd80407efd210ce2fb35afa31ee /lib/prism/translation/ripper.rb | |
parent | 862a188826d0967efd3d4dad397f786c00c43dc0 (diff) |
[ruby/prism] Implement local variable targets in ripper translation
https://github.com/ruby/prism/commit/4e64b9fc53
Diffstat (limited to 'lib/prism/translation/ripper.rb')
-rw-r--r-- | lib/prism/translation/ripper.rb | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/lib/prism/translation/ripper.rb b/lib/prism/translation/ripper.rb index 5b8f7f8fae..2d61320b4d 100644 --- a/lib/prism/translation/ripper.rb +++ b/lib/prism/translation/ripper.rb @@ -256,7 +256,21 @@ module Prism # foo => [bar] # ^^^^^ def visit_array_pattern_node(node) - raise NoMethodError, __method__ + constant = visit(node.constant) + requireds = visit_all(node.requireds) if node.requireds.any? + rest = + if !node.rest.nil? + if !node.rest.expression.nil? + visit(node.rest.expression) + else + bounds(node.rest.location) + on_var_field(nil) + end + end + posts = visit_all(node.posts) if node.posts.any? + + bounds(node.location) + on_aryptn(constant, requireds, rest, posts) end # foo(bar) @@ -492,7 +506,11 @@ module Prism # foo => bar => baz # ^^^^^^^^^^ def visit_capture_pattern_node(node) - raise NoMethodError, __method__ + value = visit(node.value) + target = visit(node.target) + + bounds(node.location) + on_binary(value, :"=>", target) end # case foo; when bar; end @@ -1208,7 +1226,8 @@ module Prism # foo, = bar # ^^^ def visit_local_variable_target_node(node) - raise NoMethodError, __method__ + bounds(node.location) + on_var_field(on_ident(node.name.to_s)) end # if /foo/ then end |