refract 0.0.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/LICENSE.txt +21 -0
- data/README.md +7 -0
- data/lib/refract/basic_visitor.rb +45 -0
- data/lib/refract/converter.rb +1204 -0
- data/lib/refract/formatter.rb +1304 -0
- data/lib/refract/mutation_visitor.rb +895 -0
- data/lib/refract/nodes/alias_global_variable_node.rb +14 -0
- data/lib/refract/nodes/alias_method_node.rb +14 -0
- data/lib/refract/nodes/alternation_pattern_node.rb +14 -0
- data/lib/refract/nodes/and_node.rb +15 -0
- data/lib/refract/nodes/arguments_node.rb +13 -0
- data/lib/refract/nodes/array_node.rb +13 -0
- data/lib/refract/nodes/array_pattern_node.rb +16 -0
- data/lib/refract/nodes/assoc_node.rb +14 -0
- data/lib/refract/nodes/assoc_splat_node.rb +13 -0
- data/lib/refract/nodes/back_reference_read_node.rb +13 -0
- data/lib/refract/nodes/begin_node.rb +16 -0
- data/lib/refract/nodes/block_argument_node.rb +13 -0
- data/lib/refract/nodes/block_local_variable_node.rb +13 -0
- data/lib/refract/nodes/block_node.rb +14 -0
- data/lib/refract/nodes/block_parameter_node.rb +13 -0
- data/lib/refract/nodes/block_parameters_node.rb +14 -0
- data/lib/refract/nodes/break_node.rb +13 -0
- data/lib/refract/nodes/call_and_write_node.rb +15 -0
- data/lib/refract/nodes/call_node.rb +16 -0
- data/lib/refract/nodes/call_operator_write_node.rb +16 -0
- data/lib/refract/nodes/call_or_write_node.rb +15 -0
- data/lib/refract/nodes/call_target_node.rb +14 -0
- data/lib/refract/nodes/capture_pattern_node.rb +14 -0
- data/lib/refract/nodes/case_match_node.rb +15 -0
- data/lib/refract/nodes/case_node.rb +15 -0
- data/lib/refract/nodes/class_node.rb +15 -0
- data/lib/refract/nodes/class_variable_and_write_node.rb +14 -0
- data/lib/refract/nodes/class_variable_operator_write_node.rb +15 -0
- data/lib/refract/nodes/class_variable_or_write_node.rb +14 -0
- data/lib/refract/nodes/class_variable_read_node.rb +13 -0
- data/lib/refract/nodes/class_variable_target_node.rb +13 -0
- data/lib/refract/nodes/class_variable_write_node.rb +14 -0
- data/lib/refract/nodes/constant_and_write_node.rb +14 -0
- data/lib/refract/nodes/constant_operator_write_node.rb +15 -0
- data/lib/refract/nodes/constant_or_write_node.rb +14 -0
- data/lib/refract/nodes/constant_path_and_write_node.rb +14 -0
- data/lib/refract/nodes/constant_path_node.rb +14 -0
- data/lib/refract/nodes/constant_path_operator_write_node.rb +15 -0
- data/lib/refract/nodes/constant_path_or_write_node.rb +14 -0
- data/lib/refract/nodes/constant_path_target_node.rb +14 -0
- data/lib/refract/nodes/constant_path_write_node.rb +14 -0
- data/lib/refract/nodes/constant_read_node.rb +13 -0
- data/lib/refract/nodes/constant_target_node.rb +13 -0
- data/lib/refract/nodes/constant_write_node.rb +14 -0
- data/lib/refract/nodes/def_node.rb +16 -0
- data/lib/refract/nodes/defined_node.rb +13 -0
- data/lib/refract/nodes/else_node.rb +13 -0
- data/lib/refract/nodes/embedded_statements_node.rb +13 -0
- data/lib/refract/nodes/embedded_variable_node.rb +13 -0
- data/lib/refract/nodes/ensure_node.rb +13 -0
- data/lib/refract/nodes/false_node.rb +9 -0
- data/lib/refract/nodes/find_pattern_node.rb +16 -0
- data/lib/refract/nodes/flip_flop_node.rb +15 -0
- data/lib/refract/nodes/float_node.rb +13 -0
- data/lib/refract/nodes/for_node.rb +15 -0
- data/lib/refract/nodes/forwarding_arguments_node.rb +9 -0
- data/lib/refract/nodes/forwarding_parameter_node.rb +9 -0
- data/lib/refract/nodes/forwarding_super_node.rb +13 -0
- data/lib/refract/nodes/global_variable_and_write_node.rb +14 -0
- data/lib/refract/nodes/global_variable_operator_write_node.rb +15 -0
- data/lib/refract/nodes/global_variable_or_write_node.rb +14 -0
- data/lib/refract/nodes/global_variable_read_node.rb +13 -0
- data/lib/refract/nodes/global_variable_target_node.rb +13 -0
- data/lib/refract/nodes/global_variable_write_node.rb +14 -0
- data/lib/refract/nodes/hash_node.rb +13 -0
- data/lib/refract/nodes/hash_pattern_node.rb +14 -0
- data/lib/refract/nodes/if_node.rb +16 -0
- data/lib/refract/nodes/imaginary_node.rb +13 -0
- data/lib/refract/nodes/implicit_node.rb +13 -0
- data/lib/refract/nodes/implicit_rest_node.rb +9 -0
- data/lib/refract/nodes/in_node.rb +14 -0
- data/lib/refract/nodes/index_and_write_node.rb +16 -0
- data/lib/refract/nodes/index_operator_write_node.rb +17 -0
- data/lib/refract/nodes/index_or_write_node.rb +16 -0
- data/lib/refract/nodes/index_target_node.rb +15 -0
- data/lib/refract/nodes/instance_variable_and_write_node.rb +14 -0
- data/lib/refract/nodes/instance_variable_operator_write_node.rb +15 -0
- data/lib/refract/nodes/instance_variable_or_write_node.rb +14 -0
- data/lib/refract/nodes/instance_variable_read_node.rb +13 -0
- data/lib/refract/nodes/instance_variable_target_node.rb +13 -0
- data/lib/refract/nodes/instance_variable_write_node.rb +14 -0
- data/lib/refract/nodes/integer_node.rb +13 -0
- data/lib/refract/nodes/interpolated_match_last_line_node.rb +17 -0
- data/lib/refract/nodes/interpolated_regular_expression_node.rb +17 -0
- data/lib/refract/nodes/interpolated_string_node.rb +13 -0
- data/lib/refract/nodes/interpolated_symbol_node.rb +13 -0
- data/lib/refract/nodes/interpolated_x_string_node.rb +13 -0
- data/lib/refract/nodes/it_local_variable_read_node.rb +9 -0
- data/lib/refract/nodes/it_parameters_node.rb +9 -0
- data/lib/refract/nodes/keyword_hash_node.rb +13 -0
- data/lib/refract/nodes/keyword_rest_parameter_node.rb +13 -0
- data/lib/refract/nodes/lambda_node.rb +14 -0
- data/lib/refract/nodes/local_variable_and_write_node.rb +15 -0
- data/lib/refract/nodes/local_variable_operator_write_node.rb +16 -0
- data/lib/refract/nodes/local_variable_or_write_node.rb +15 -0
- data/lib/refract/nodes/local_variable_read_node.rb +13 -0
- data/lib/refract/nodes/local_variable_target_node.rb +13 -0
- data/lib/refract/nodes/local_variable_write_node.rb +14 -0
- data/lib/refract/nodes/match_last_line_node.rb +17 -0
- data/lib/refract/nodes/match_predicate_node.rb +14 -0
- data/lib/refract/nodes/match_required_node.rb +14 -0
- data/lib/refract/nodes/match_write_node.rb +14 -0
- data/lib/refract/nodes/missing_node.rb +9 -0
- data/lib/refract/nodes/module_node.rb +14 -0
- data/lib/refract/nodes/multi_target_node.rb +15 -0
- data/lib/refract/nodes/multi_write_node.rb +16 -0
- data/lib/refract/nodes/next_node.rb +13 -0
- data/lib/refract/nodes/nil_node.rb +9 -0
- data/lib/refract/nodes/no_keywords_parameter_node.rb +9 -0
- data/lib/refract/nodes/numbered_parameters_node.rb +9 -0
- data/lib/refract/nodes/numbered_reference_read_node.rb +13 -0
- data/lib/refract/nodes/optional_keyword_parameter_node.rb +14 -0
- data/lib/refract/nodes/optional_parameter_node.rb +14 -0
- data/lib/refract/nodes/or_node.rb +15 -0
- data/lib/refract/nodes/parameters_node.rb +19 -0
- data/lib/refract/nodes/parentheses_node.rb +13 -0
- data/lib/refract/nodes/pinned_expression_node.rb +13 -0
- data/lib/refract/nodes/pinned_variable_node.rb +13 -0
- data/lib/refract/nodes/post_execution_node.rb +13 -0
- data/lib/refract/nodes/pre_execution_node.rb +13 -0
- data/lib/refract/nodes/program_node.rb +13 -0
- data/lib/refract/nodes/range_node.rb +15 -0
- data/lib/refract/nodes/rational_node.rb +14 -0
- data/lib/refract/nodes/redo_node.rb +9 -0
- data/lib/refract/nodes/regular_expression_node.rb +17 -0
- data/lib/refract/nodes/required_keyword_parameter_node.rb +13 -0
- data/lib/refract/nodes/required_parameter_node.rb +13 -0
- data/lib/refract/nodes/rescue_modifier_node.rb +14 -0
- data/lib/refract/nodes/rescue_node.rb +16 -0
- data/lib/refract/nodes/rest_parameter_node.rb +13 -0
- data/lib/refract/nodes/retry_node.rb +9 -0
- data/lib/refract/nodes/return_node.rb +13 -0
- data/lib/refract/nodes/self_node.rb +9 -0
- data/lib/refract/nodes/shareable_constant_node.rb +13 -0
- data/lib/refract/nodes/singleton_class_node.rb +14 -0
- data/lib/refract/nodes/source_encoding_node.rb +9 -0
- data/lib/refract/nodes/source_file_node.rb +9 -0
- data/lib/refract/nodes/source_line_node.rb +9 -0
- data/lib/refract/nodes/splat_node.rb +13 -0
- data/lib/refract/nodes/statements_node.rb +13 -0
- data/lib/refract/nodes/string_node.rb +13 -0
- data/lib/refract/nodes/super_node.rb +14 -0
- data/lib/refract/nodes/symbol_node.rb +13 -0
- data/lib/refract/nodes/true_node.rb +9 -0
- data/lib/refract/nodes/undef_node.rb +13 -0
- data/lib/refract/nodes/unless_node.rb +16 -0
- data/lib/refract/nodes/until_node.rb +15 -0
- data/lib/refract/nodes/when_node.rb +14 -0
- data/lib/refract/nodes/while_node.rb +15 -0
- data/lib/refract/nodes/x_string_node.rb +13 -0
- data/lib/refract/nodes/yield_node.rb +13 -0
- data/lib/refract/version.rb +5 -0
- data/lib/refract/visitor.rb +689 -0
- data/lib/refract.rb +50 -55
- data/lib/rubocop/cop/refract/ordered_visit_methods.rb +107 -0
- data/lib/rubocop/cop/refract_cops.rb +3 -0
- metadata +189 -26
@@ -0,0 +1,895 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Refract
|
4
|
+
class MutationVisitor < BasicVisitor
|
5
|
+
def self.visit(node_class, &)
|
6
|
+
define_method("visit_#{node_class.type}", &)
|
7
|
+
end
|
8
|
+
|
9
|
+
visit AliasGlobalVariableNode do |node|
|
10
|
+
node.copy(
|
11
|
+
new_name: visit(node.new_name),
|
12
|
+
old_name: visit(node.old_name),
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
16
|
+
visit AliasMethodNode do |node|
|
17
|
+
node.copy(
|
18
|
+
new_name: visit(node.new_name),
|
19
|
+
old_name: visit(node.old_name),
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
visit AlternationPatternNode do |node|
|
24
|
+
node.copy(
|
25
|
+
left: visit(node.left),
|
26
|
+
right: visit(node.right),
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
visit AndNode do |node|
|
31
|
+
node.copy(
|
32
|
+
left: visit(node.left),
|
33
|
+
right: visit(node.right),
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
visit ArgumentsNode do |node|
|
38
|
+
node.copy(
|
39
|
+
arguments: node.arguments&.map { |n| visit(n) },
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
43
|
+
visit ArrayNode do |node|
|
44
|
+
node.copy(
|
45
|
+
elements: node.elements&.map { |n| visit(n) },
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
49
|
+
visit ArrayPatternNode do |node|
|
50
|
+
node.copy(
|
51
|
+
constant: visit(node.constant),
|
52
|
+
requireds: node.requireds&.map { |n| visit(n) },
|
53
|
+
rest: visit(node.rest),
|
54
|
+
)
|
55
|
+
end
|
56
|
+
|
57
|
+
visit AssocNode do |node|
|
58
|
+
node.copy(
|
59
|
+
key: visit(node.key),
|
60
|
+
value: visit(node.value),
|
61
|
+
)
|
62
|
+
end
|
63
|
+
|
64
|
+
visit AssocSplatNode do |node|
|
65
|
+
node.copy(
|
66
|
+
value: visit(node.value),
|
67
|
+
)
|
68
|
+
end
|
69
|
+
|
70
|
+
visit BackReferenceReadNode do |node|
|
71
|
+
node
|
72
|
+
end
|
73
|
+
|
74
|
+
visit BeginNode do |node|
|
75
|
+
node.copy(
|
76
|
+
statements: visit(node.statements),
|
77
|
+
rescue_clause: visit(node.rescue_clause),
|
78
|
+
else_clause: visit(node.else_clause),
|
79
|
+
ensure_clause: visit(node.ensure_clause),
|
80
|
+
)
|
81
|
+
end
|
82
|
+
|
83
|
+
visit BlockArgumentNode do |node|
|
84
|
+
node.copy(
|
85
|
+
expression: visit(node.expression),
|
86
|
+
)
|
87
|
+
end
|
88
|
+
|
89
|
+
visit BlockLocalVariableNode do |node|
|
90
|
+
node
|
91
|
+
end
|
92
|
+
|
93
|
+
visit BlockNode do |node|
|
94
|
+
node.copy(
|
95
|
+
parameters: visit(node.parameters),
|
96
|
+
body: visit(node.body),
|
97
|
+
)
|
98
|
+
end
|
99
|
+
|
100
|
+
visit BlockParameterNode do |node|
|
101
|
+
node
|
102
|
+
end
|
103
|
+
|
104
|
+
visit BlockParametersNode do |node|
|
105
|
+
node.copy(
|
106
|
+
parameters: visit(node.parameters),
|
107
|
+
locals: node.locals&.map { |n| visit(n) },
|
108
|
+
)
|
109
|
+
end
|
110
|
+
|
111
|
+
visit BreakNode do |node|
|
112
|
+
node.copy(
|
113
|
+
arguments: visit(node.arguments),
|
114
|
+
)
|
115
|
+
end
|
116
|
+
|
117
|
+
visit CallAndWriteNode do |node|
|
118
|
+
node.copy(
|
119
|
+
receiver: visit(node.receiver),
|
120
|
+
value: visit(node.value),
|
121
|
+
)
|
122
|
+
end
|
123
|
+
|
124
|
+
visit CallNode do |node|
|
125
|
+
node.copy(
|
126
|
+
receiver: visit(node.receiver),
|
127
|
+
arguments: visit(node.arguments),
|
128
|
+
block: visit(node.block),
|
129
|
+
)
|
130
|
+
end
|
131
|
+
|
132
|
+
visit CallOperatorWriteNode do |node|
|
133
|
+
node.copy(
|
134
|
+
receiver: visit(node.receiver),
|
135
|
+
value: visit(node.value),
|
136
|
+
)
|
137
|
+
end
|
138
|
+
|
139
|
+
visit CallOrWriteNode do |node|
|
140
|
+
node.copy(
|
141
|
+
receiver: visit(node.receiver),
|
142
|
+
value: visit(node.value),
|
143
|
+
)
|
144
|
+
end
|
145
|
+
|
146
|
+
visit CallTargetNode do |node|
|
147
|
+
node.copy(
|
148
|
+
receiver: visit(node.receiver),
|
149
|
+
)
|
150
|
+
end
|
151
|
+
|
152
|
+
visit CapturePatternNode do |node|
|
153
|
+
node.copy(
|
154
|
+
value: visit(node.value),
|
155
|
+
target: visit(node.target),
|
156
|
+
)
|
157
|
+
end
|
158
|
+
|
159
|
+
visit CaseMatchNode do |node|
|
160
|
+
node.copy(
|
161
|
+
predicate: visit(node.predicate),
|
162
|
+
conditions: node.conditions&.map { |n| visit(n) },
|
163
|
+
else_clause: visit(node.else_clause),
|
164
|
+
)
|
165
|
+
end
|
166
|
+
|
167
|
+
visit CaseNode do |node|
|
168
|
+
node.copy(
|
169
|
+
predicate: visit(node.predicate),
|
170
|
+
conditions: node.conditions&.map { |n| visit(n) },
|
171
|
+
else_clause: visit(node.else_clause),
|
172
|
+
)
|
173
|
+
end
|
174
|
+
|
175
|
+
visit ClassNode do |node|
|
176
|
+
node.copy(
|
177
|
+
constant_path: visit(node.constant_path),
|
178
|
+
superclass: visit(node.superclass),
|
179
|
+
body: visit(node.body),
|
180
|
+
)
|
181
|
+
end
|
182
|
+
|
183
|
+
visit ClassVariableAndWriteNode do |node|
|
184
|
+
node.copy(
|
185
|
+
value: visit(node.value),
|
186
|
+
)
|
187
|
+
end
|
188
|
+
|
189
|
+
visit ClassVariableOperatorWriteNode do |node|
|
190
|
+
node.copy(
|
191
|
+
value: visit(node.value),
|
192
|
+
)
|
193
|
+
end
|
194
|
+
|
195
|
+
visit ClassVariableOrWriteNode do |node|
|
196
|
+
node.copy(
|
197
|
+
value: visit(node.value),
|
198
|
+
)
|
199
|
+
end
|
200
|
+
|
201
|
+
visit ClassVariableReadNode do |node|
|
202
|
+
node
|
203
|
+
end
|
204
|
+
|
205
|
+
visit ClassVariableTargetNode do |node|
|
206
|
+
node
|
207
|
+
end
|
208
|
+
|
209
|
+
visit ClassVariableWriteNode do |node|
|
210
|
+
node.copy(
|
211
|
+
value: visit(node.value),
|
212
|
+
)
|
213
|
+
end
|
214
|
+
|
215
|
+
visit ConstantOrWriteNode do |node|
|
216
|
+
node.copy(
|
217
|
+
value: visit(node.value),
|
218
|
+
)
|
219
|
+
end
|
220
|
+
|
221
|
+
visit ConstantPathAndWriteNode do |node|
|
222
|
+
node.copy(
|
223
|
+
target: visit(node.target),
|
224
|
+
value: visit(node.value),
|
225
|
+
)
|
226
|
+
end
|
227
|
+
|
228
|
+
visit ConstantPathNode do |node|
|
229
|
+
node.copy(
|
230
|
+
parent: visit(node.parent),
|
231
|
+
)
|
232
|
+
end
|
233
|
+
|
234
|
+
visit ConstantPathOperatorWriteNode do |node|
|
235
|
+
node.copy(
|
236
|
+
target: visit(node.target),
|
237
|
+
value: visit(node.value),
|
238
|
+
)
|
239
|
+
end
|
240
|
+
|
241
|
+
visit ConstantPathOrWriteNode do |node|
|
242
|
+
node.copy(
|
243
|
+
target: visit(node.target),
|
244
|
+
value: visit(node.value),
|
245
|
+
)
|
246
|
+
end
|
247
|
+
|
248
|
+
visit ConstantPathTargetNode do |node|
|
249
|
+
node.copy(
|
250
|
+
parent: visit(node.parent),
|
251
|
+
)
|
252
|
+
end
|
253
|
+
|
254
|
+
visit ConstantPathWriteNode do |node|
|
255
|
+
node.copy(
|
256
|
+
target: visit(node.target),
|
257
|
+
value: visit(node.value),
|
258
|
+
)
|
259
|
+
end
|
260
|
+
|
261
|
+
visit ConstantReadNode do |node|
|
262
|
+
node
|
263
|
+
end
|
264
|
+
|
265
|
+
visit ConstantTargetNode do |node|
|
266
|
+
node
|
267
|
+
end
|
268
|
+
|
269
|
+
visit ConstantWriteNode do |node|
|
270
|
+
node.copy(
|
271
|
+
value: visit(node.value),
|
272
|
+
)
|
273
|
+
end
|
274
|
+
|
275
|
+
visit DefNode do |node|
|
276
|
+
node.copy(
|
277
|
+
receiver: visit(node.receiver),
|
278
|
+
parameters: visit(node.parameters),
|
279
|
+
body: visit(node.body),
|
280
|
+
)
|
281
|
+
end
|
282
|
+
|
283
|
+
visit DefinedNode do |node|
|
284
|
+
node.copy(
|
285
|
+
value: visit(node.value),
|
286
|
+
)
|
287
|
+
end
|
288
|
+
|
289
|
+
visit ElseNode do |node|
|
290
|
+
node.copy(
|
291
|
+
statements: visit(node.statements),
|
292
|
+
)
|
293
|
+
end
|
294
|
+
|
295
|
+
visit EmbeddedStatementsNode do |node|
|
296
|
+
node.copy(
|
297
|
+
statements: visit(node.statements),
|
298
|
+
)
|
299
|
+
end
|
300
|
+
|
301
|
+
visit EmbeddedVariableNode do |node|
|
302
|
+
node.copy(
|
303
|
+
variable: visit(node.variable),
|
304
|
+
)
|
305
|
+
end
|
306
|
+
|
307
|
+
visit EnsureNode do |node|
|
308
|
+
node.copy(
|
309
|
+
statements: visit(node.statements),
|
310
|
+
)
|
311
|
+
end
|
312
|
+
|
313
|
+
visit FalseNode do |node|
|
314
|
+
node
|
315
|
+
end
|
316
|
+
|
317
|
+
visit FindPatternNode do |node|
|
318
|
+
node.copy(
|
319
|
+
constant: visit(node.constant),
|
320
|
+
left: visit(node.left),
|
321
|
+
requireds: node.requireds&.map { |n| visit(n) },
|
322
|
+
right: visit(node.right),
|
323
|
+
)
|
324
|
+
end
|
325
|
+
|
326
|
+
visit FlipFlopNode do |node|
|
327
|
+
node.copy(
|
328
|
+
left: visit(node.left),
|
329
|
+
right: visit(node.right),
|
330
|
+
)
|
331
|
+
end
|
332
|
+
|
333
|
+
visit FloatNode do |node|
|
334
|
+
node
|
335
|
+
end
|
336
|
+
|
337
|
+
visit ForNode do |node|
|
338
|
+
node.copy(
|
339
|
+
index: visit(node.index),
|
340
|
+
collection: visit(node.collection),
|
341
|
+
statements: visit(node.statements),
|
342
|
+
)
|
343
|
+
end
|
344
|
+
|
345
|
+
visit ForwardingArgumentsNode do |node|
|
346
|
+
node
|
347
|
+
end
|
348
|
+
|
349
|
+
visit ForwardingParameterNode do |node|
|
350
|
+
node
|
351
|
+
end
|
352
|
+
|
353
|
+
visit ForwardingSuperNode do |node|
|
354
|
+
node.copy(
|
355
|
+
block: visit(node.block),
|
356
|
+
)
|
357
|
+
end
|
358
|
+
|
359
|
+
visit GlobalVariableAndWriteNode do |node|
|
360
|
+
node.copy(
|
361
|
+
value: visit(node.value),
|
362
|
+
)
|
363
|
+
end
|
364
|
+
|
365
|
+
visit GlobalVariableOperatorWriteNode do |node|
|
366
|
+
node.copy(
|
367
|
+
value: visit(node.value),
|
368
|
+
)
|
369
|
+
end
|
370
|
+
|
371
|
+
visit GlobalVariableOrWriteNode do |node|
|
372
|
+
node.copy(
|
373
|
+
value: visit(node.value),
|
374
|
+
)
|
375
|
+
end
|
376
|
+
|
377
|
+
visit GlobalVariableReadNode do |node|
|
378
|
+
node
|
379
|
+
end
|
380
|
+
|
381
|
+
visit GlobalVariableTargetNode do |node|
|
382
|
+
node
|
383
|
+
end
|
384
|
+
|
385
|
+
visit GlobalVariableWriteNode do |node|
|
386
|
+
node.copy(
|
387
|
+
value: visit(node.value),
|
388
|
+
)
|
389
|
+
end
|
390
|
+
|
391
|
+
visit HashNode do |node|
|
392
|
+
node.copy(
|
393
|
+
elements: node.elements&.map { |n| visit(n) },
|
394
|
+
)
|
395
|
+
end
|
396
|
+
|
397
|
+
visit HashPatternNode do |node|
|
398
|
+
node.copy(
|
399
|
+
elements: node.elements&.map { |n| visit(n) },
|
400
|
+
rest: visit(node.rest),
|
401
|
+
)
|
402
|
+
end
|
403
|
+
|
404
|
+
visit IfNode do |node|
|
405
|
+
node.copy(
|
406
|
+
predicate: visit(node.predicate),
|
407
|
+
statements: visit(node.statements),
|
408
|
+
subsequent: visit(node.subsequent),
|
409
|
+
)
|
410
|
+
end
|
411
|
+
|
412
|
+
visit ImaginaryNode do |node|
|
413
|
+
node.copy(
|
414
|
+
numeric: visit(node.numeric),
|
415
|
+
)
|
416
|
+
end
|
417
|
+
|
418
|
+
visit ImplicitNode do |node|
|
419
|
+
node
|
420
|
+
end
|
421
|
+
|
422
|
+
visit ImplicitRestNode do |node|
|
423
|
+
node
|
424
|
+
end
|
425
|
+
|
426
|
+
visit InNode do |node|
|
427
|
+
node.copy(
|
428
|
+
pattern: visit(node.pattern),
|
429
|
+
statements: visit(node.statements),
|
430
|
+
)
|
431
|
+
end
|
432
|
+
|
433
|
+
visit IndexAndWriteNode do |node|
|
434
|
+
node.copy(
|
435
|
+
receiver: visit(node.receiver),
|
436
|
+
arguments: visit(node.arguments),
|
437
|
+
block: visit(node.block),
|
438
|
+
value: visit(node.value),
|
439
|
+
)
|
440
|
+
end
|
441
|
+
|
442
|
+
visit IndexOperatorWriteNode do |node|
|
443
|
+
node.copy(
|
444
|
+
receiver: visit(node.receiver),
|
445
|
+
arguments: visit(node.arguments),
|
446
|
+
block: visit(node.block),
|
447
|
+
value: visit(node.value),
|
448
|
+
)
|
449
|
+
end
|
450
|
+
|
451
|
+
visit IndexOrWriteNode do |node|
|
452
|
+
node.copy(
|
453
|
+
receiver: visit(node.receiver),
|
454
|
+
arguments: visit(node.arguments),
|
455
|
+
block: visit(node.block),
|
456
|
+
value: visit(node.value),
|
457
|
+
)
|
458
|
+
end
|
459
|
+
|
460
|
+
visit IndexTargetNode do |node|
|
461
|
+
node.copy(
|
462
|
+
receiver: visit(node.receiver),
|
463
|
+
arguments: visit(node.arguments),
|
464
|
+
block: visit(node.block),
|
465
|
+
)
|
466
|
+
end
|
467
|
+
|
468
|
+
visit InstanceVariableAndWriteNode do |node|
|
469
|
+
node.copy(
|
470
|
+
value: visit(node.value),
|
471
|
+
)
|
472
|
+
end
|
473
|
+
|
474
|
+
visit InstanceVariableOperatorWriteNode do |node|
|
475
|
+
node.copy(
|
476
|
+
value: visit(node.value),
|
477
|
+
)
|
478
|
+
end
|
479
|
+
|
480
|
+
visit InstanceVariableOrWriteNode do |node|
|
481
|
+
node.copy(
|
482
|
+
value: visit(node.value),
|
483
|
+
)
|
484
|
+
end
|
485
|
+
|
486
|
+
visit InstanceVariableReadNode do |node|
|
487
|
+
node
|
488
|
+
end
|
489
|
+
|
490
|
+
visit InstanceVariableTargetNode do |node|
|
491
|
+
node
|
492
|
+
end
|
493
|
+
|
494
|
+
visit InstanceVariableWriteNode do |node|
|
495
|
+
node.copy(
|
496
|
+
value: visit(node.value),
|
497
|
+
)
|
498
|
+
end
|
499
|
+
|
500
|
+
visit IntegerNode do |node|
|
501
|
+
node
|
502
|
+
end
|
503
|
+
|
504
|
+
visit InterpolatedMatchLastLineNode do |node|
|
505
|
+
node.copy(
|
506
|
+
parts: node.parts.map { |n| visit(n) },
|
507
|
+
)
|
508
|
+
end
|
509
|
+
|
510
|
+
visit InterpolatedRegularExpressionNode do |node|
|
511
|
+
node.copy(
|
512
|
+
parts: node.parts&.map { |n| visit(n) },
|
513
|
+
)
|
514
|
+
end
|
515
|
+
|
516
|
+
visit InterpolatedStringNode do |node|
|
517
|
+
node.copy(
|
518
|
+
parts: node.parts&.map { |n| visit(n) },
|
519
|
+
)
|
520
|
+
end
|
521
|
+
|
522
|
+
visit InterpolatedSymbolNode do |node|
|
523
|
+
node.copy(
|
524
|
+
parts: node.parts&.map { |n| visit(n) },
|
525
|
+
)
|
526
|
+
end
|
527
|
+
|
528
|
+
visit InterpolatedXStringNode do |node|
|
529
|
+
node.copy(
|
530
|
+
parts: node.parts&.map { |n| visit(n) },
|
531
|
+
)
|
532
|
+
end
|
533
|
+
|
534
|
+
visit ItLocalVariableReadNode do |node|
|
535
|
+
node
|
536
|
+
end
|
537
|
+
|
538
|
+
visit ItParametersNode do |node|
|
539
|
+
node
|
540
|
+
end
|
541
|
+
|
542
|
+
visit KeywordHashNode do |node|
|
543
|
+
node.copy(
|
544
|
+
elements: node.elements&.map { |n| visit(n) },
|
545
|
+
)
|
546
|
+
end
|
547
|
+
|
548
|
+
visit KeywordRestParameterNode do |node|
|
549
|
+
node
|
550
|
+
end
|
551
|
+
|
552
|
+
visit LambdaNode do |node|
|
553
|
+
node.copy(
|
554
|
+
parameters: visit(node.parameters),
|
555
|
+
body: visit(node.body),
|
556
|
+
)
|
557
|
+
end
|
558
|
+
|
559
|
+
visit LocalVariableAndWriteNode do |node|
|
560
|
+
node.copy(
|
561
|
+
value: visit(node.value),
|
562
|
+
)
|
563
|
+
end
|
564
|
+
|
565
|
+
visit LocalVariableOperatorWriteNode do |node|
|
566
|
+
node.copy(
|
567
|
+
value: visit(node.value),
|
568
|
+
)
|
569
|
+
end
|
570
|
+
|
571
|
+
visit LocalVariableOrWriteNode do |node|
|
572
|
+
node.copy(
|
573
|
+
value: visit(node.value),
|
574
|
+
)
|
575
|
+
end
|
576
|
+
|
577
|
+
visit LocalVariableReadNode do |node|
|
578
|
+
node
|
579
|
+
end
|
580
|
+
|
581
|
+
visit LocalVariableTargetNode do |node|
|
582
|
+
node
|
583
|
+
end
|
584
|
+
|
585
|
+
visit LocalVariableWriteNode do |node|
|
586
|
+
node.copy(
|
587
|
+
value: visit(node.value),
|
588
|
+
)
|
589
|
+
end
|
590
|
+
|
591
|
+
visit MatchLastLineNode do |node|
|
592
|
+
node
|
593
|
+
end
|
594
|
+
|
595
|
+
visit MatchPredicateNode do |node|
|
596
|
+
node.copy(
|
597
|
+
value: visit(node.value),
|
598
|
+
pattern: visit(node.pattern),
|
599
|
+
)
|
600
|
+
end
|
601
|
+
|
602
|
+
visit MatchRequiredNode do |node|
|
603
|
+
node.copy(
|
604
|
+
value: visit(node.value),
|
605
|
+
pattern: visit(node.pattern),
|
606
|
+
)
|
607
|
+
end
|
608
|
+
|
609
|
+
visit MatchWriteNode do |node|
|
610
|
+
node.copy(
|
611
|
+
call: visit(node.call),
|
612
|
+
targets: node.targets&.map { |n| visit(n) },
|
613
|
+
)
|
614
|
+
end
|
615
|
+
|
616
|
+
visit MissingNode do |node|
|
617
|
+
node
|
618
|
+
end
|
619
|
+
|
620
|
+
visit ModuleNode do |node|
|
621
|
+
node.copy(
|
622
|
+
constant_path: visit(node.constant_path),
|
623
|
+
body: visit(node.body),
|
624
|
+
)
|
625
|
+
end
|
626
|
+
|
627
|
+
visit MultiTargetNode do |node|
|
628
|
+
node.copy(
|
629
|
+
lefts: node.lefts&.map { |n| visit(n) },
|
630
|
+
rest: visit(node.rest),
|
631
|
+
rights: node.rights&.map { |n| visit(n) },
|
632
|
+
)
|
633
|
+
end
|
634
|
+
|
635
|
+
visit MultiWriteNode do |node|
|
636
|
+
node.copy(
|
637
|
+
lefts: node.lefts&.map { |n| visit(n) },
|
638
|
+
rest: visit(node.rest),
|
639
|
+
rights: node.rights&.map { |n| visit(n) },
|
640
|
+
value: visit(node.value),
|
641
|
+
)
|
642
|
+
end
|
643
|
+
|
644
|
+
visit NextNode do |node|
|
645
|
+
node.copy(
|
646
|
+
arguments: visit(node.arguments),
|
647
|
+
)
|
648
|
+
end
|
649
|
+
|
650
|
+
visit NilNode do |node|
|
651
|
+
node
|
652
|
+
end
|
653
|
+
|
654
|
+
visit NoKeywordsParameterNode do |node|
|
655
|
+
node
|
656
|
+
end
|
657
|
+
|
658
|
+
visit NumberedParametersNode do |node|
|
659
|
+
node
|
660
|
+
end
|
661
|
+
|
662
|
+
visit NumberedReferenceReadNode do |node|
|
663
|
+
node
|
664
|
+
end
|
665
|
+
|
666
|
+
visit OptionalKeywordParameterNode do |node|
|
667
|
+
node.copy(
|
668
|
+
value: visit(node.value),
|
669
|
+
)
|
670
|
+
end
|
671
|
+
|
672
|
+
visit OptionalParameterNode do |node|
|
673
|
+
node.copy(
|
674
|
+
value: visit(node.value),
|
675
|
+
)
|
676
|
+
end
|
677
|
+
|
678
|
+
visit OrNode do |node|
|
679
|
+
node.copy(
|
680
|
+
left: visit(node.left),
|
681
|
+
right: visit(node.right),
|
682
|
+
)
|
683
|
+
end
|
684
|
+
|
685
|
+
visit ParametersNode do |node|
|
686
|
+
node.copy(
|
687
|
+
requireds: node.requireds&.map { |n| visit(n) },
|
688
|
+
optionals: node.optionals&.map { |n| visit(n) },
|
689
|
+
rest: visit(node.rest),
|
690
|
+
posts: node.posts&.map { |n| visit(n) },
|
691
|
+
keywords: node.keywords&.map { |n| visit(n) },
|
692
|
+
keyword_rest: visit(node.keyword_rest),
|
693
|
+
block: visit(node.block),
|
694
|
+
)
|
695
|
+
end
|
696
|
+
|
697
|
+
visit ParenthesesNode do |node|
|
698
|
+
node.copy(
|
699
|
+
body: visit(node.body),
|
700
|
+
)
|
701
|
+
end
|
702
|
+
|
703
|
+
visit PinnedExpressionNode do |node|
|
704
|
+
node.copy(
|
705
|
+
expression: visit(node.expression),
|
706
|
+
)
|
707
|
+
end
|
708
|
+
|
709
|
+
visit PinnedVariableNode do |node|
|
710
|
+
node.copy(
|
711
|
+
variable: visit(node.variable),
|
712
|
+
)
|
713
|
+
end
|
714
|
+
|
715
|
+
visit PostExecutionNode do |node|
|
716
|
+
node.copy(
|
717
|
+
statements: visit(node.statements),
|
718
|
+
)
|
719
|
+
end
|
720
|
+
|
721
|
+
visit PreExecutionNode do |node|
|
722
|
+
node.copy(
|
723
|
+
statements: visit(node.statements),
|
724
|
+
)
|
725
|
+
end
|
726
|
+
|
727
|
+
visit ProgramNode do |node|
|
728
|
+
node.copy(
|
729
|
+
statements: visit(node.statements),
|
730
|
+
)
|
731
|
+
end
|
732
|
+
|
733
|
+
visit RangeNode do |node|
|
734
|
+
node.copy(
|
735
|
+
left: visit(node.left),
|
736
|
+
right: visit(node.right),
|
737
|
+
)
|
738
|
+
end
|
739
|
+
|
740
|
+
visit RationalNode do |node|
|
741
|
+
node
|
742
|
+
end
|
743
|
+
|
744
|
+
visit RedoNode do |node|
|
745
|
+
node
|
746
|
+
end
|
747
|
+
|
748
|
+
visit RegularExpressionNode do |node|
|
749
|
+
node
|
750
|
+
end
|
751
|
+
|
752
|
+
visit RequiredKeywordParameterNode do |node|
|
753
|
+
node
|
754
|
+
end
|
755
|
+
|
756
|
+
visit RequiredParameterNode do |node|
|
757
|
+
node
|
758
|
+
end
|
759
|
+
|
760
|
+
visit RescueModifierNode do |node|
|
761
|
+
node.copy(
|
762
|
+
expression: visit(node.expression),
|
763
|
+
rescue_expression: visit(node.rescue_expression),
|
764
|
+
)
|
765
|
+
end
|
766
|
+
|
767
|
+
visit RescueNode do |node|
|
768
|
+
node.copy(
|
769
|
+
exceptions: node.exceptions&.map { |n| visit(n) },
|
770
|
+
reference: visit(node.reference),
|
771
|
+
statements: visit(node.statements),
|
772
|
+
subsequent: visit(node.subsequent),
|
773
|
+
)
|
774
|
+
end
|
775
|
+
|
776
|
+
visit RestParameterNode do |node|
|
777
|
+
node
|
778
|
+
end
|
779
|
+
|
780
|
+
visit RetryNode do |node|
|
781
|
+
node
|
782
|
+
end
|
783
|
+
|
784
|
+
visit ReturnNode do |node|
|
785
|
+
node.copy(
|
786
|
+
arguments: visit(node.arguments),
|
787
|
+
)
|
788
|
+
end
|
789
|
+
|
790
|
+
visit SelfNode do |node|
|
791
|
+
node
|
792
|
+
end
|
793
|
+
|
794
|
+
visit ShareableConstantNode do |node|
|
795
|
+
node.copy(
|
796
|
+
write: visit(node.write),
|
797
|
+
)
|
798
|
+
end
|
799
|
+
|
800
|
+
visit SingletonClassNode do |node|
|
801
|
+
node.copy(
|
802
|
+
expression: visit(node.expression),
|
803
|
+
body: visit(node.body),
|
804
|
+
)
|
805
|
+
end
|
806
|
+
|
807
|
+
visit SourceEncodingNode do |node|
|
808
|
+
node
|
809
|
+
end
|
810
|
+
|
811
|
+
visit SourceFileNode do |node|
|
812
|
+
node
|
813
|
+
end
|
814
|
+
|
815
|
+
visit SourceLineNode do |node|
|
816
|
+
node
|
817
|
+
end
|
818
|
+
|
819
|
+
visit SplatNode do |node|
|
820
|
+
node.copy(
|
821
|
+
expression: visit(node.expression),
|
822
|
+
)
|
823
|
+
end
|
824
|
+
|
825
|
+
visit StatementsNode do |node|
|
826
|
+
node.copy(
|
827
|
+
body: node.body&.map { |n| visit(n) },
|
828
|
+
)
|
829
|
+
end
|
830
|
+
|
831
|
+
visit StringNode do |node|
|
832
|
+
node
|
833
|
+
end
|
834
|
+
|
835
|
+
visit SuperNode do |node|
|
836
|
+
node.copy(
|
837
|
+
arguments: visit(node.arguments),
|
838
|
+
block: visit(node.block),
|
839
|
+
)
|
840
|
+
end
|
841
|
+
|
842
|
+
visit SymbolNode do |node|
|
843
|
+
node
|
844
|
+
end
|
845
|
+
|
846
|
+
visit TrueNode do |node|
|
847
|
+
node
|
848
|
+
end
|
849
|
+
|
850
|
+
visit UndefNode do |node|
|
851
|
+
node.copy(
|
852
|
+
names: node.names&.map { |n| visit(n) },
|
853
|
+
)
|
854
|
+
end
|
855
|
+
|
856
|
+
visit UnlessNode do |node|
|
857
|
+
node.copy(
|
858
|
+
predicate: visit(node.predicate),
|
859
|
+
statements: visit(node.statements),
|
860
|
+
else_clause: visit(node.else_clause),
|
861
|
+
)
|
862
|
+
end
|
863
|
+
|
864
|
+
visit UntilNode do |node|
|
865
|
+
node.copy(
|
866
|
+
predicate: visit(node.predicate),
|
867
|
+
statements: visit(node.statements),
|
868
|
+
)
|
869
|
+
end
|
870
|
+
|
871
|
+
visit WhenNode do |node|
|
872
|
+
node.copy(
|
873
|
+
conditions: node.conditions&.map { |n| visit(n) },
|
874
|
+
statements: visit(node.statements),
|
875
|
+
)
|
876
|
+
end
|
877
|
+
|
878
|
+
visit WhileNode do |node|
|
879
|
+
node.copy(
|
880
|
+
predicate: visit(node.predicate),
|
881
|
+
statements: visit(node.statements),
|
882
|
+
)
|
883
|
+
end
|
884
|
+
|
885
|
+
visit XStringNode do |node|
|
886
|
+
node
|
887
|
+
end
|
888
|
+
|
889
|
+
visit YieldNode do |node|
|
890
|
+
node.copy(
|
891
|
+
arguments: visit(node.arguments),
|
892
|
+
)
|
893
|
+
end
|
894
|
+
end
|
895
|
+
end
|