diff --git a/lib/prism/translation/ripper.rb b/lib/prism/translation/ripper.rb index 5b8f7f8fae4..2d61320b4d4 100644 --- a/lib/prism/translation/ripper.rb +++ b/lib/prism/translation/ripper.rb @@ -256,7 +256,21 @@ def visit_array_node(node) # 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 @@ def visit_call_target_node(node) # 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 @@ def visit_local_variable_or_write_node(node) # 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