summaryrefslogtreecommitdiff
path: root/lib/prism/translation/ripper.rb
diff options
context:
space:
mode:
authorKevin Newton <kddnewton@gmail.com>2024-03-05 06:42:57 -0500
committergit <svn-admin@ruby-lang.org>2024-03-06 16:42:38 +0000
commitf44671b094566f159e61c381b2eabb150340f1c8 (patch)
treec8576c0ca4aefcd80407efd210ce2fb35afa31ee /lib/prism/translation/ripper.rb
parent862a188826d0967efd3d4dad397f786c00c43dc0 (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.rb25
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