diff options
| author | Kevin Newton <kddnewton@gmail.com> | 2024-03-05 07:56:13 -0500 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2024-03-06 16:42:42 +0000 |
| commit | c21a50e59656cf36a95e1d7ac8f3c86398e88aae (patch) | |
| tree | 8ce551dab01c522060768c29ca1c6331ed0105c2 | |
| parent | 5422b584571c7715b77cc3083d73e49536e06b1a (diff) | |
[ruby/prism] Implement def for ripper translation
https://github.com/ruby/prism/commit/a3c8c27c20
| -rw-r--r-- | lib/prism/translation/ripper.rb | 34 | ||||
| -rw-r--r-- | test/prism/ripper_test.rb | 46 |
2 files changed, 34 insertions, 46 deletions
diff --git a/lib/prism/translation/ripper.rb b/lib/prism/translation/ripper.rb index 692d3f3723..6bbc8e286c 100644 --- a/lib/prism/translation/ripper.rb +++ b/lib/prism/translation/ripper.rb @@ -781,7 +781,39 @@ module Prism # def self.foo; end # ^^^^^^^^^^^^^^^^^ def visit_def_node(node) - raise NoMethodError, __method__ + bounds(node.name_loc) + name = visit_token(node.name_loc.slice) + + parameters = + if node.parameters.nil? + bounds(node.location) + on_params(nil, nil, nil, nil, nil, nil, nil) + else + visit(node.parameters) + end + + if !node.lparen_loc.nil? + bounds(node.lparen_loc) + parameters = on_paren(parameters) + end + + bodystmt = + case node.body + when nil + bounds(node.location) + on_bodystmt(visit_statements_node_body([nil]), nil, nil, nil) + when StatementsNode + body = visit(node.body) + + bounds(node.body.location) + on_bodystmt(body, nil, nil, nil) + when BeginNode + visit_begin_node_clauses(node.body) + else + raise + end + + on_def(name, parameters, bodystmt) end # defined? a diff --git a/test/prism/ripper_test.rb b/test/prism/ripper_test.rb index ecd709dbc3..9e19c5aaa6 100644 --- a/test/prism/ripper_test.rb +++ b/test/prism/ripper_test.rb @@ -299,7 +299,6 @@ module Prism heredocs_nested.txt heredocs_with_ignored_newlines.txt if.txt - indented_file_end.txt keyword_method_names.txt lambda.txt method_calls.txt @@ -317,15 +316,12 @@ module Prism return.txt seattlerb/TestRubyParserShared.txt seattlerb/and_multi.txt - seattlerb/args_kw_block.txt seattlerb/array_lits_trailing_calls.txt seattlerb/attr_asgn_colon_id.txt seattlerb/attrasgn_primary_dot_constant.txt seattlerb/begin_rescue_else_ensure_bodies.txt seattlerb/begin_rescue_else_ensure_no_bodies.txt - seattlerb/block_arg__bare.txt seattlerb/block_break.txt - seattlerb/block_call_defn_call_block_call.txt seattlerb/block_call_dot_op2_brace_block.txt seattlerb/block_call_dot_op2_cmd_args_do_block.txt seattlerb/block_call_operation_colon.txt @@ -345,7 +341,6 @@ module Prism seattlerb/bug190.txt seattlerb/bug191.txt seattlerb/bug236.txt - seattlerb/bug_187.txt seattlerb/bug_215.txt seattlerb/bug_249.txt seattlerb/bug_args__19.txt @@ -404,33 +399,18 @@ module Prism seattlerb/const_op_asgn_and1.txt seattlerb/const_op_asgn_and2.txt seattlerb/const_op_asgn_or.txt - seattlerb/defn_arg_asplat_arg.txt seattlerb/defn_arg_forward_args.txt seattlerb/defn_args_forward_args.txt - seattlerb/defn_comments.txt seattlerb/defn_endless_command.txt seattlerb/defn_endless_command_rescue.txt seattlerb/defn_forward_args.txt seattlerb/defn_forward_args__no_parens.txt - seattlerb/defn_kwarg_env.txt - seattlerb/defn_kwarg_kwarg.txt - seattlerb/defn_kwarg_kwsplat.txt - seattlerb/defn_kwarg_kwsplat_anon.txt seattlerb/defn_kwarg_lvar.txt - seattlerb/defn_kwarg_no_parens.txt - seattlerb/defn_kwarg_val.txt - seattlerb/defn_no_kwargs.txt seattlerb/defn_oneliner.txt seattlerb/defn_oneliner_eq2.txt seattlerb/defn_oneliner_noargs.txt seattlerb/defn_oneliner_noargs_parentheses.txt seattlerb/defn_oneliner_rescue.txt - seattlerb/defn_opt_last_arg.txt - seattlerb/defn_opt_reg.txt - seattlerb/defn_opt_splat_arg.txt - seattlerb/defn_powarg.txt - seattlerb/defn_reg_opt_reg.txt - seattlerb/defn_splat_arg.txt seattlerb/defn_unary_not.txt seattlerb/defns_reserved.txt seattlerb/defs_as_arg_with_do_block_inside.txt @@ -458,8 +438,6 @@ module Prism seattlerb/difficult6__8.txt seattlerb/difficult7_.txt seattlerb/do_lambda.txt - seattlerb/f_kw.txt - seattlerb/f_kw__required.txt seattlerb/heredoc__backslash_dos_format.txt seattlerb/heredoc_backslash_nl.txt seattlerb/heredoc_bad_hex_escape.txt @@ -523,12 +501,9 @@ module Prism seattlerb/op_asgn_primary_colon_identifier1.txt seattlerb/op_asgn_primary_colon_identifier_command_call.txt seattlerb/op_asgn_val_dot_ident_command_call.txt - seattlerb/parse_def_special_name.txt seattlerb/parse_if_not_canonical.txt seattlerb/parse_if_not_noncanonical.txt seattlerb/parse_line_defn_complex.txt - seattlerb/parse_line_defn_no_parens.txt - seattlerb/parse_line_defn_no_parens_args.txt seattlerb/parse_line_dstr_escaped_newline.txt seattlerb/parse_line_dstr_soft_newline.txt seattlerb/parse_line_evstr_after_break.txt @@ -567,7 +542,6 @@ module Prism seattlerb/read_escape_unicode_h4.txt seattlerb/regexp_esc_C_slash.txt seattlerb/regexp_escape_extended.txt - seattlerb/required_kwarg_no_value.txt seattlerb/rescue_do_end_ensure_result.txt seattlerb/rescue_do_end_no_raise.txt seattlerb/rescue_do_end_raised.txt @@ -645,7 +619,6 @@ module Prism unparser/corpus/literal/while.txt unparser/corpus/literal/yield.txt unparser/corpus/semantic/block.txt - unparser/corpus/semantic/def.txt unparser/corpus/semantic/dstr.txt unparser/corpus/semantic/kwbegin.txt unparser/corpus/semantic/literal.txt @@ -658,9 +631,6 @@ module Prism whitequark/and_asgn.txt whitequark/and_or_masgn.txt whitequark/anonymous_blockarg.txt - whitequark/arg.txt - whitequark/arg_duplicate_ignored.txt - whitequark/arg_label.txt whitequark/arg_scope.txt whitequark/args.txt whitequark/args_args_assocs.txt @@ -681,7 +651,6 @@ module Prism whitequark/array_words_empty.txt whitequark/array_words_interp.txt whitequark/asgn_mrhs.txt - whitequark/blockarg.txt whitequark/blockargs.txt whitequark/break_block.txt whitequark/bug_435.txt @@ -689,12 +658,9 @@ module Prism whitequark/bug_452.txt whitequark/bug_466.txt whitequark/bug_480.txt - whitequark/bug_481.txt whitequark/bug_ascii_8bit_in_literal.txt whitequark/bug_cmd_string_lookahead.txt whitequark/bug_cmdarg.txt - whitequark/bug_def_no_paren_eql_begin.txt - whitequark/bug_do_block_in_call_args.txt whitequark/bug_do_block_in_cmdarg.txt whitequark/bug_do_block_in_hash_brace.txt whitequark/bug_heredoc_do.txt @@ -737,13 +703,9 @@ module Prism whitequark/if_elsif.txt whitequark/if_masgn__24.txt whitequark/interp_digit_var.txt - whitequark/kwarg.txt whitequark/kwbegin_compstmt.txt whitequark/kwnilarg.txt - whitequark/kwoptarg.txt whitequark/kwoptarg_with_kwrestarg_and_forwarded_args.txt - whitequark/kwrestarg_named.txt - whitequark/kwrestarg_unnamed.txt whitequark/lbrace_arg_after_command_args.txt whitequark/lparenarg_after_lvar__since_25.txt whitequark/lvar_injecting_match.txt @@ -767,10 +729,8 @@ module Prism whitequark/op_asgn_cmd.txt whitequark/op_asgn_index.txt whitequark/op_asgn_index_cmd.txt - whitequark/optarg.txt whitequark/or_asgn.txt whitequark/parser_bug_272.txt - whitequark/parser_bug_490.txt whitequark/parser_bug_507.txt whitequark/parser_bug_525.txt whitequark/parser_bug_604.txt @@ -790,8 +750,6 @@ module Prism whitequark/rescue_in_lambda_block.txt whitequark/rescue_mod_masgn.txt whitequark/rescue_without_begin_end.txt - whitequark/restarg_named.txt - whitequark/restarg_unnamed.txt whitequark/return.txt whitequark/return_block.txt whitequark/ruby_bug_10653.txt @@ -808,7 +766,6 @@ module Prism whitequark/ruby_bug_13547.txt whitequark/ruby_bug_14690.txt whitequark/ruby_bug_15789.txt - whitequark/ruby_bug_9669.txt whitequark/send_attr_asgn.txt whitequark/send_attr_asgn_conditional.txt whitequark/send_block_chain_cmd.txt @@ -841,11 +798,10 @@ module Prism whitequark/ternary_ambiguous_symbol.txt whitequark/trailing_forward_arg.txt whitequark/unless_else.txt - whitequark/var_op_asgn.txt whitequark/when_splat.txt whitequark/yield.txt xstring.txt - yield.txt + yield.txt ] relatives.each do |relative| |
