From db53705acda9b733be7fdf71996143caf7c8ae7a Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Tue, 5 Mar 2024 20:43:23 -0500 Subject: [PATCH] [ruby/prism] Implement singleton methods for ripper translation https://github.com/ruby/prism/commit/b7cd5c8e74 --- lib/prism/translation/ripper.rb | 14 +++++++++++++- test/prism/ripper_test.rb | 15 --------------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/lib/prism/translation/ripper.rb b/lib/prism/translation/ripper.rb index 0c2496fe803d80..a08f39afbae2c7 100644 --- a/lib/prism/translation/ripper.rb +++ b/lib/prism/translation/ripper.rb @@ -1044,6 +1044,13 @@ def visit_constant_path_target_node(node) # def self.foo; end # ^^^^^^^^^^^^^^^^^ def visit_def_node(node) + receiver = visit(node.receiver) + operator = + if !node.operator_loc.nil? + bounds(node.operator_loc) + visit_token(node.operator) + end + bounds(node.name_loc) name = visit_token(node.name_loc.slice) @@ -1070,7 +1077,12 @@ def visit_def_node(node) on_bodystmt(body, nil, nil, nil) end - on_def(name, parameters, bodystmt) + bounds(node.location) + if receiver.nil? + on_def(name, parameters, bodystmt) + else + on_defs(receiver, operator, name, parameters, bodystmt) + end end # defined? a diff --git a/test/prism/ripper_test.rb b/test/prism/ripper_test.rb index 5616575deeced7..1e90681a55c1c5 100644 --- a/test/prism/ripper_test.rb +++ b/test/prism/ripper_test.rb @@ -30,7 +30,6 @@ class RipperTest < TestCase heredocs_nested.txt heredocs_with_ignored_newlines.txt if.txt - keyword_method_names.txt lambda.txt method_calls.txt methods.txt @@ -93,13 +92,6 @@ class RipperTest < TestCase seattlerb/defn_kwarg_lvar.txt seattlerb/defn_oneliner_eq2.txt seattlerb/defn_oneliner_rescue.txt - seattlerb/defns_reserved.txt - seattlerb/defs_as_arg_with_do_block_inside.txt - seattlerb/defs_comments.txt - seattlerb/defs_endless_command.txt - seattlerb/defs_endless_command_rescue.txt - seattlerb/defs_kwarg.txt - seattlerb/defs_oneliner.txt seattlerb/defs_oneliner_eq2.txt seattlerb/defs_oneliner_rescue.txt seattlerb/difficult2_.txt @@ -241,7 +233,6 @@ class RipperTest < TestCase unparser/corpus/literal/control.txt unparser/corpus/literal/def.txt unparser/corpus/literal/defined.txt - unparser/corpus/literal/defs.txt unparser/corpus/literal/dstr.txt unparser/corpus/literal/empty.txt unparser/corpus/literal/for.txt @@ -303,12 +294,7 @@ class RipperTest < TestCase whitequark/dedenting_interpolating_heredoc_fake_line_continuation.txt whitequark/dedenting_non_interpolating_heredoc_line_continuation.txt whitequark/def.txt - whitequark/defs.txt whitequark/empty_stmt.txt - whitequark/endless_method.txt - whitequark/endless_method_command_syntax.txt - whitequark/endless_method_with_rescue_mod.txt - whitequark/endless_method_without_args.txt whitequark/forward_arg.txt whitequark/forward_args_legacy.txt whitequark/forwarded_argument_with_kwrestarg.txt @@ -329,7 +315,6 @@ class RipperTest < TestCase whitequark/masgn_attr.txt whitequark/masgn_nested.txt whitequark/masgn_splat.txt - whitequark/method_definition_in_while_cond.txt whitequark/newline_in_hash_argument.txt whitequark/next_block.txt whitequark/numbered_args_after_27.txt