summaryrefslogtreecommitdiff
path: root/lib/prism/translation/ripper.rb
diff options
context:
space:
mode:
authorKevin Newton <kddnewton@gmail.com>2024-03-05 09:43:43 -0500
committergit <svn-admin@ruby-lang.org>2024-03-06 16:42:45 +0000
commitb0ee9c8f28249b3de644383901bb637b8eb7275b (patch)
tree22079a1bd7bb639c41e170dac7bc94e123b6f1b1 /lib/prism/translation/ripper.rb
parent7bcca7177d6c42891004899d63e13ef47d78a337 (diff)
[ruby/prism] Implement index nodes for ripper translation
https://github.com/ruby/prism/commit/3fd962f2d3
Diffstat (limited to 'lib/prism/translation/ripper.rb')
-rw-r--r--lib/prism/translation/ripper.rb42
1 files changed, 38 insertions, 4 deletions
diff --git a/lib/prism/translation/ripper.rb b/lib/prism/translation/ripper.rb
index 89f793cb70..d92ff83ed3 100644
--- a/lib/prism/translation/ripper.rb
+++ b/lib/prism/translation/ripper.rb
@@ -1208,25 +1208,59 @@ module Prism
# foo[bar] += baz
# ^^^^^^^^^^^^^^^
def visit_index_operator_write_node(node)
- raise NoMethodError, __method__
+ receiver = visit(node.receiver)
+ arguments = visit(node.arguments)
+
+ bounds(node.location)
+ target = on_aref_field(receiver, arguments)
+
+ bounds(node.operator_loc)
+ operator = on_op("#{node.operator}=")
+
+ value = visit(node.value)
+ on_opassign(target, operator, value)
end
# foo[bar] &&= baz
# ^^^^^^^^^^^^^^^^
def visit_index_and_write_node(node)
- raise NoMethodError, __method__
+ receiver = visit(node.receiver)
+ arguments = visit(node.arguments)
+
+ bounds(node.location)
+ target = on_aref_field(receiver, arguments)
+
+ bounds(node.operator_loc)
+ operator = on_op("&&=")
+
+ value = visit(node.value)
+ on_opassign(target, operator, value)
end
# foo[bar] ||= baz
# ^^^^^^^^^^^^^^^^
def visit_index_or_write_node(node)
- raise NoMethodError, __method__
+ receiver = visit(node.receiver)
+ arguments = visit(node.arguments)
+
+ bounds(node.location)
+ target = on_aref_field(receiver, arguments)
+
+ bounds(node.operator_loc)
+ operator = on_op("||=")
+
+ value = visit(node.value)
+ on_opassign(target, operator, value)
end
# foo[bar], = 1
# ^^^^^^^^
def visit_index_target_node(node)
- raise NoMethodError, __method__
+ receiver = visit(node.receiver)
+ arguments = visit(node.arguments)
+
+ bounds(node.location)
+ on_aref_field(receiver, arguments)
end
# @foo