diff options
| author | Kevin Newton <kddnewton@gmail.com> | 2024-03-05 21:06:52 -0500 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2024-03-06 16:42:49 +0000 |
| commit | 7ee404a24a2a74a1e78666c31cffc2f18607e51f (patch) | |
| tree | 5636749ec495ed634b7195d98c7b996f94d6ae92 | |
| parent | 7273c4dd60aa8e61e29053042d085cabc3246e23 (diff) | |
[ruby/prism] Implement special array literals for ripper translation
https://github.com/ruby/prism/commit/a5c3d634ef
| -rw-r--r-- | lib/prism/translation/ripper.rb | 61 | ||||
| -rw-r--r-- | test/prism/ripper_test.rb | 26 |
2 files changed, 60 insertions, 27 deletions
diff --git a/lib/prism/translation/ripper.rb b/lib/prism/translation/ripper.rb index 1d16ca1ca8..bda6478bf2 100644 --- a/lib/prism/translation/ripper.rb +++ b/lib/prism/translation/ripper.rb @@ -239,7 +239,66 @@ module Prism # [] # ^^ def visit_array_node(node) - elements = visit_arguments(node.elements) unless node.elements.empty? + bounds(node.location) + elements = + case node.opening + when /^%w/ + node.elements.inject(on_qwords_new) do |qwords, element| + bounds(element.location) + on_qwords_add(qwords, on_tstring_content(element.content)) + end + when /^%i/ + node.elements.inject(on_qsymbols_new) do |qsymbols, element| + bounds(element.location) + on_qsymbols_add(qsymbols, on_tstring_content(element.value)) + end + when /^%W/ + node.elements.inject(on_words_new) do |words, element| + bounds(element.location) + word = + if element.is_a?(StringNode) + on_word_add(on_word_new, on_tstring_content(element.content)) + else + element.parts.inject(on_word_new) do |word, part| + word_part = + if part.is_a?(StringNode) + bounds(part.location) + on_tstring_content(part.content) + else + visit(part) + end + + on_word_add(word, word_part) + end + end + + on_words_add(words, word) + end + when /^%I/ + node.elements.inject(on_symbols_new) do |symbols, element| + bounds(element.location) + symbol = + if element.is_a?(SymbolNode) + on_word_add(on_word_new, on_tstring_content(element.value)) + else + element.parts.inject(on_word_new) do |word, part| + word_part = + if part.is_a?(StringNode) + bounds(part.location) + on_tstring_content(part.content) + else + visit(part) + end + + on_word_add(word, word_part) + end + end + + on_symbols_add(symbols, symbol) + end + else + visit_arguments(node.elements) unless node.elements.empty? + end bounds(node.location) on_array(elements) diff --git a/test/prism/ripper_test.rb b/test/prism/ripper_test.rb index 00a3056b94..86c7b3b027 100644 --- a/test/prism/ripper_test.rb +++ b/test/prism/ripper_test.rb @@ -43,7 +43,6 @@ module Prism rescue.txt return.txt seattlerb/TestRubyParserShared.txt - seattlerb/array_lits_trailing_calls.txt seattlerb/begin_rescue_else_ensure_bodies.txt seattlerb/begin_rescue_else_ensure_no_bodies.txt seattlerb/block_break.txt @@ -115,8 +114,6 @@ module Prism seattlerb/heredoc_with_only_carriage_returns.txt seattlerb/heredoc_with_only_carriage_returns_windows.txt seattlerb/if_elsif.txt - seattlerb/interpolated_symbol_array_line_breaks.txt - seattlerb/interpolated_word_array_line_breaks.txt seattlerb/lambda_do_vs_brace.txt seattlerb/lasgn_middle_splat.txt seattlerb/magic_encoding_comment.txt @@ -141,8 +138,6 @@ module Prism seattlerb/mlhs_mid_anonsplat.txt seattlerb/mlhs_mid_splat.txt seattlerb/module_comments.txt - seattlerb/non_interpolated_symbol_array_line_breaks.txt - seattlerb/non_interpolated_word_array_line_breaks.txt seattlerb/parse_if_not_canonical.txt seattlerb/parse_if_not_noncanonical.txt seattlerb/parse_line_defn_complex.txt @@ -158,18 +153,10 @@ module Prism seattlerb/parse_pattern_051.txt seattlerb/parse_pattern_058.txt seattlerb/parse_pattern_076.txt - seattlerb/pctW_lineno.txt seattlerb/pct_nl.txt - seattlerb/pct_w_heredoc_interp_nested.txt - seattlerb/qWords_space.txt - seattlerb/qsymbols.txt - seattlerb/qsymbols_empty.txt - seattlerb/qsymbols_empty_space.txt - seattlerb/qsymbols_interp.txt seattlerb/quoted_symbol_hash_arg.txt seattlerb/quoted_symbol_keys.txt seattlerb/qw_escape_term.txt - seattlerb/qwords_empty.txt seattlerb/read_escape_unicode_curlies.txt seattlerb/read_escape_unicode_h4.txt seattlerb/regexp_esc_C_slash.txt @@ -189,13 +176,7 @@ module Prism seattlerb/str_lit_concat_bad_encodings.txt seattlerb/str_newline_hash_line_number.txt seattlerb/str_single_double_escaped_newline.txt - seattlerb/symbol_list.txt - seattlerb/symbols.txt - seattlerb/symbols_empty.txt - seattlerb/symbols_empty_space.txt - seattlerb/symbols_interp.txt seattlerb/thingy.txt - seattlerb/words_interp.txt seattlerb/yield_call_assocs.txt seattlerb/yield_empty_parens.txt single_method_call_with_bang.txt @@ -250,12 +231,6 @@ module Prism whitequark/args_block_pass.txt whitequark/args_cmd.txt whitequark/args_star.txt - whitequark/array_symbols.txt - whitequark/array_symbols_empty.txt - whitequark/array_symbols_interp.txt - whitequark/array_words.txt - whitequark/array_words_empty.txt - whitequark/array_words_interp.txt whitequark/asgn_mrhs.txt whitequark/break_block.txt whitequark/bug_480.txt @@ -283,7 +258,6 @@ module Prism whitequark/hash_label_end.txt whitequark/if_else.txt whitequark/if_elsif.txt - whitequark/interp_digit_var.txt whitequark/kwbegin_compstmt.txt whitequark/kwoptarg_with_kwrestarg_and_forwarded_args.txt whitequark/lvar_injecting_match.txt |
