@@ -80,10 +80,14 @@ def visit_array_node(node)
8080 # foo => [bar]
8181 # ^^^^^
8282 def visit_array_pattern_node ( node )
83+ elements = [ *node . requireds ]
84+ elements << node . rest if !node . rest . nil? && !node . rest . is_a? ( ImplicitRestNode )
85+ elements . concat ( node . posts )
86+
8387 if node . constant
84- builder . const_pattern ( visit ( node . constant ) , token ( node . opening_loc ) , builder . array_pattern ( nil , visit_all ( [ * node . requireds , * node . rest , * node . posts ] ) , nil ) , token ( node . closing_loc ) )
88+ builder . const_pattern ( visit ( node . constant ) , token ( node . opening_loc ) , builder . array_pattern ( nil , visit_all ( elements ) , nil ) , token ( node . closing_loc ) )
8589 else
86- builder . array_pattern ( token ( node . opening_loc ) , visit_all ( [ * node . requireds , * node . rest , * node . posts ] ) , token ( node . closing_loc ) )
90+ builder . array_pattern ( token ( node . opening_loc ) , visit_all ( elements ) , token ( node . closing_loc ) )
8791 end
8892 end
8993
@@ -603,10 +607,14 @@ def visit_false_node(node)
603607 # foo => [*, bar, *]
604608 # ^^^^^^^^^^^
605609 def visit_find_pattern_node ( node )
610+ elements = [ *node . requireds ]
611+ elements << node . rest if !node . rest . nil? && !node . rest . is_a? ( ImplicitRestNode )
612+ elements . concat ( node . posts )
613+
606614 if node . constant
607- builder . const_pattern ( visit ( node . constant ) , token ( node . opening_loc ) , builder . find_pattern ( nil , visit_all ( [ node . left , * node . requireds , node . right ] ) , nil ) , token ( node . closing_loc ) )
615+ builder . const_pattern ( visit ( node . constant ) , token ( node . opening_loc ) , builder . find_pattern ( nil , visit_all ( elements ) , nil ) , token ( node . closing_loc ) )
608616 else
609- builder . find_pattern ( token ( node . opening_loc ) , visit_all ( [ node . left , * node . requireds , node . right ] ) , token ( node . closing_loc ) )
617+ builder . find_pattern ( token ( node . opening_loc ) , visit_all ( elements ) , token ( node . closing_loc ) )
610618 end
611619 end
612620
@@ -1098,24 +1106,28 @@ def visit_module_node(node)
10981106 # foo, bar = baz
10991107 # ^^^^^^^^
11001108 def visit_multi_target_node ( node )
1101- node = node . copy ( rest : nil ) if node . rest . is_a? ( ImplicitRestNode )
1109+ elements = [ *node . lefts ]
1110+ elements << node . rest if !node . rest . nil? && !node . rest . is_a? ( ImplicitRestNode )
1111+ elements . concat ( node . rights )
11021112
11031113 builder . multi_lhs (
11041114 token ( node . lparen_loc ) ,
1105- visit_all ( [ * node . lefts , * node . rest , * node . rights ] ) ,
1115+ visit_all ( elements ) ,
11061116 token ( node . rparen_loc )
11071117 )
11081118 end
11091119
11101120 # foo, bar = baz
11111121 # ^^^^^^^^^^^^^^
11121122 def visit_multi_write_node ( node )
1113- node = node . copy ( rest : nil ) if node . rest . is_a? ( ImplicitRestNode )
1123+ elements = [ *node . lefts ]
1124+ elements << node . rest if !node . rest . nil? && !node . rest . is_a? ( ImplicitRestNode )
1125+ elements . concat ( node . rights )
11141126
11151127 builder . multi_assign (
11161128 builder . multi_lhs (
11171129 token ( node . lparen_loc ) ,
1118- visit_all ( [ * node . lefts , * node . rest , * node . rights ] ) ,
1130+ visit_all ( elements ) ,
11191131 token ( node . rparen_loc )
11201132 ) ,
11211133 token ( node . operator_loc ) ,
0 commit comments