summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorKevin Newton <kddnewton@gmail.com>2024-03-05 17:43:50 -0500
committergit <svn-admin@ruby-lang.org>2024-03-06 16:42:47 +0000
commit78fe61c95fecf8e7964337a067908976d9d4bfca (patch)
tree2b89ee32446dface2e47050b90aaa2d811f9694c /lib
parentc2d6bcc81a827786c2cffefbac0840cc1c9b42d5 (diff)
[ruby/prism] Implement fields for ripper translation
https://github.com/ruby/prism/commit/90f8b33fad
Diffstat (limited to 'lib')
-rw-r--r--lib/prism/translation/ripper.rb44
1 files changed, 26 insertions, 18 deletions
diff --git a/lib/prism/translation/ripper.rb b/lib/prism/translation/ripper.rb
index 5addc69318..ada44b81d6 100644
--- a/lib/prism/translation/ripper.rb
+++ b/lib/prism/translation/ripper.rb
@@ -556,29 +556,37 @@ module Prism
bounds(node.message_loc)
message = visit_token(node.message)
- arguments, block = visit_call_node_arguments(node.arguments, node.block)
- call =
- if node.opening_loc.nil?
- bounds(node.location)
+ if node.name.end_with?("=") && !node.message.end_with?("=") && !node.arguments.nil? && node.block.nil?
+ bounds(node.arguments.location)
+ value = visit(node.arguments.arguments.first)
- if !arguments || arguments.empty?
- on_call(receiver, call_operator, message)
+ bounds(node.location)
+ on_assign(on_field(receiver, call_operator, message), value)
+ else
+ arguments, block = visit_call_node_arguments(node.arguments, node.block)
+ call =
+ if node.opening_loc.nil?
+ bounds(node.location)
+
+ if !arguments || arguments.empty?
+ on_call(receiver, call_operator, message)
+ else
+ on_command_call(receiver, call_operator, message, arguments)
+ end
else
- on_command_call(receiver, call_operator, message, arguments)
+ bounds(node.opening_loc)
+ arguments = on_arg_paren(arguments)
+
+ bounds(node.location)
+ on_method_add_arg(on_call(receiver, call_operator, message), arguments)
end
- else
- bounds(node.opening_loc)
- arguments = on_arg_paren(arguments)
- bounds(node.location)
- on_method_add_arg(on_call(receiver, call_operator, message), arguments)
+ if block.nil?
+ call
+ else
+ bounds(node.block.location)
+ on_method_add_block(call, block)
end
-
- if block.nil?
- call
- else
- bounds(node.block.location)
- on_method_add_block(call, block)
end
end
end