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.
Files changed (164) hide show
  1. checksums.yaml +5 -5
  2. data/LICENSE.txt +21 -0
  3. data/README.md +7 -0
  4. data/lib/refract/basic_visitor.rb +45 -0
  5. data/lib/refract/converter.rb +1204 -0
  6. data/lib/refract/formatter.rb +1304 -0
  7. data/lib/refract/mutation_visitor.rb +895 -0
  8. data/lib/refract/nodes/alias_global_variable_node.rb +14 -0
  9. data/lib/refract/nodes/alias_method_node.rb +14 -0
  10. data/lib/refract/nodes/alternation_pattern_node.rb +14 -0
  11. data/lib/refract/nodes/and_node.rb +15 -0
  12. data/lib/refract/nodes/arguments_node.rb +13 -0
  13. data/lib/refract/nodes/array_node.rb +13 -0
  14. data/lib/refract/nodes/array_pattern_node.rb +16 -0
  15. data/lib/refract/nodes/assoc_node.rb +14 -0
  16. data/lib/refract/nodes/assoc_splat_node.rb +13 -0
  17. data/lib/refract/nodes/back_reference_read_node.rb +13 -0
  18. data/lib/refract/nodes/begin_node.rb +16 -0
  19. data/lib/refract/nodes/block_argument_node.rb +13 -0
  20. data/lib/refract/nodes/block_local_variable_node.rb +13 -0
  21. data/lib/refract/nodes/block_node.rb +14 -0
  22. data/lib/refract/nodes/block_parameter_node.rb +13 -0
  23. data/lib/refract/nodes/block_parameters_node.rb +14 -0
  24. data/lib/refract/nodes/break_node.rb +13 -0
  25. data/lib/refract/nodes/call_and_write_node.rb +15 -0
  26. data/lib/refract/nodes/call_node.rb +16 -0
  27. data/lib/refract/nodes/call_operator_write_node.rb +16 -0
  28. data/lib/refract/nodes/call_or_write_node.rb +15 -0
  29. data/lib/refract/nodes/call_target_node.rb +14 -0
  30. data/lib/refract/nodes/capture_pattern_node.rb +14 -0
  31. data/lib/refract/nodes/case_match_node.rb +15 -0
  32. data/lib/refract/nodes/case_node.rb +15 -0
  33. data/lib/refract/nodes/class_node.rb +15 -0
  34. data/lib/refract/nodes/class_variable_and_write_node.rb +14 -0
  35. data/lib/refract/nodes/class_variable_operator_write_node.rb +15 -0
  36. data/lib/refract/nodes/class_variable_or_write_node.rb +14 -0
  37. data/lib/refract/nodes/class_variable_read_node.rb +13 -0
  38. data/lib/refract/nodes/class_variable_target_node.rb +13 -0
  39. data/lib/refract/nodes/class_variable_write_node.rb +14 -0
  40. data/lib/refract/nodes/constant_and_write_node.rb +14 -0
  41. data/lib/refract/nodes/constant_operator_write_node.rb +15 -0
  42. data/lib/refract/nodes/constant_or_write_node.rb +14 -0
  43. data/lib/refract/nodes/constant_path_and_write_node.rb +14 -0
  44. data/lib/refract/nodes/constant_path_node.rb +14 -0
  45. data/lib/refract/nodes/constant_path_operator_write_node.rb +15 -0
  46. data/lib/refract/nodes/constant_path_or_write_node.rb +14 -0
  47. data/lib/refract/nodes/constant_path_target_node.rb +14 -0
  48. data/lib/refract/nodes/constant_path_write_node.rb +14 -0
  49. data/lib/refract/nodes/constant_read_node.rb +13 -0
  50. data/lib/refract/nodes/constant_target_node.rb +13 -0
  51. data/lib/refract/nodes/constant_write_node.rb +14 -0
  52. data/lib/refract/nodes/def_node.rb +16 -0
  53. data/lib/refract/nodes/defined_node.rb +13 -0
  54. data/lib/refract/nodes/else_node.rb +13 -0
  55. data/lib/refract/nodes/embedded_statements_node.rb +13 -0
  56. data/lib/refract/nodes/embedded_variable_node.rb +13 -0
  57. data/lib/refract/nodes/ensure_node.rb +13 -0
  58. data/lib/refract/nodes/false_node.rb +9 -0
  59. data/lib/refract/nodes/find_pattern_node.rb +16 -0
  60. data/lib/refract/nodes/flip_flop_node.rb +15 -0
  61. data/lib/refract/nodes/float_node.rb +13 -0
  62. data/lib/refract/nodes/for_node.rb +15 -0
  63. data/lib/refract/nodes/forwarding_arguments_node.rb +9 -0
  64. data/lib/refract/nodes/forwarding_parameter_node.rb +9 -0
  65. data/lib/refract/nodes/forwarding_super_node.rb +13 -0
  66. data/lib/refract/nodes/global_variable_and_write_node.rb +14 -0
  67. data/lib/refract/nodes/global_variable_operator_write_node.rb +15 -0
  68. data/lib/refract/nodes/global_variable_or_write_node.rb +14 -0
  69. data/lib/refract/nodes/global_variable_read_node.rb +13 -0
  70. data/lib/refract/nodes/global_variable_target_node.rb +13 -0
  71. data/lib/refract/nodes/global_variable_write_node.rb +14 -0
  72. data/lib/refract/nodes/hash_node.rb +13 -0
  73. data/lib/refract/nodes/hash_pattern_node.rb +14 -0
  74. data/lib/refract/nodes/if_node.rb +16 -0
  75. data/lib/refract/nodes/imaginary_node.rb +13 -0
  76. data/lib/refract/nodes/implicit_node.rb +13 -0
  77. data/lib/refract/nodes/implicit_rest_node.rb +9 -0
  78. data/lib/refract/nodes/in_node.rb +14 -0
  79. data/lib/refract/nodes/index_and_write_node.rb +16 -0
  80. data/lib/refract/nodes/index_operator_write_node.rb +17 -0
  81. data/lib/refract/nodes/index_or_write_node.rb +16 -0
  82. data/lib/refract/nodes/index_target_node.rb +15 -0
  83. data/lib/refract/nodes/instance_variable_and_write_node.rb +14 -0
  84. data/lib/refract/nodes/instance_variable_operator_write_node.rb +15 -0
  85. data/lib/refract/nodes/instance_variable_or_write_node.rb +14 -0
  86. data/lib/refract/nodes/instance_variable_read_node.rb +13 -0
  87. data/lib/refract/nodes/instance_variable_target_node.rb +13 -0
  88. data/lib/refract/nodes/instance_variable_write_node.rb +14 -0
  89. data/lib/refract/nodes/integer_node.rb +13 -0
  90. data/lib/refract/nodes/interpolated_match_last_line_node.rb +17 -0
  91. data/lib/refract/nodes/interpolated_regular_expression_node.rb +17 -0
  92. data/lib/refract/nodes/interpolated_string_node.rb +13 -0
  93. data/lib/refract/nodes/interpolated_symbol_node.rb +13 -0
  94. data/lib/refract/nodes/interpolated_x_string_node.rb +13 -0
  95. data/lib/refract/nodes/it_local_variable_read_node.rb +9 -0
  96. data/lib/refract/nodes/it_parameters_node.rb +9 -0
  97. data/lib/refract/nodes/keyword_hash_node.rb +13 -0
  98. data/lib/refract/nodes/keyword_rest_parameter_node.rb +13 -0
  99. data/lib/refract/nodes/lambda_node.rb +14 -0
  100. data/lib/refract/nodes/local_variable_and_write_node.rb +15 -0
  101. data/lib/refract/nodes/local_variable_operator_write_node.rb +16 -0
  102. data/lib/refract/nodes/local_variable_or_write_node.rb +15 -0
  103. data/lib/refract/nodes/local_variable_read_node.rb +13 -0
  104. data/lib/refract/nodes/local_variable_target_node.rb +13 -0
  105. data/lib/refract/nodes/local_variable_write_node.rb +14 -0
  106. data/lib/refract/nodes/match_last_line_node.rb +17 -0
  107. data/lib/refract/nodes/match_predicate_node.rb +14 -0
  108. data/lib/refract/nodes/match_required_node.rb +14 -0
  109. data/lib/refract/nodes/match_write_node.rb +14 -0
  110. data/lib/refract/nodes/missing_node.rb +9 -0
  111. data/lib/refract/nodes/module_node.rb +14 -0
  112. data/lib/refract/nodes/multi_target_node.rb +15 -0
  113. data/lib/refract/nodes/multi_write_node.rb +16 -0
  114. data/lib/refract/nodes/next_node.rb +13 -0
  115. data/lib/refract/nodes/nil_node.rb +9 -0
  116. data/lib/refract/nodes/no_keywords_parameter_node.rb +9 -0
  117. data/lib/refract/nodes/numbered_parameters_node.rb +9 -0
  118. data/lib/refract/nodes/numbered_reference_read_node.rb +13 -0
  119. data/lib/refract/nodes/optional_keyword_parameter_node.rb +14 -0
  120. data/lib/refract/nodes/optional_parameter_node.rb +14 -0
  121. data/lib/refract/nodes/or_node.rb +15 -0
  122. data/lib/refract/nodes/parameters_node.rb +19 -0
  123. data/lib/refract/nodes/parentheses_node.rb +13 -0
  124. data/lib/refract/nodes/pinned_expression_node.rb +13 -0
  125. data/lib/refract/nodes/pinned_variable_node.rb +13 -0
  126. data/lib/refract/nodes/post_execution_node.rb +13 -0
  127. data/lib/refract/nodes/pre_execution_node.rb +13 -0
  128. data/lib/refract/nodes/program_node.rb +13 -0
  129. data/lib/refract/nodes/range_node.rb +15 -0
  130. data/lib/refract/nodes/rational_node.rb +14 -0
  131. data/lib/refract/nodes/redo_node.rb +9 -0
  132. data/lib/refract/nodes/regular_expression_node.rb +17 -0
  133. data/lib/refract/nodes/required_keyword_parameter_node.rb +13 -0
  134. data/lib/refract/nodes/required_parameter_node.rb +13 -0
  135. data/lib/refract/nodes/rescue_modifier_node.rb +14 -0
  136. data/lib/refract/nodes/rescue_node.rb +16 -0
  137. data/lib/refract/nodes/rest_parameter_node.rb +13 -0
  138. data/lib/refract/nodes/retry_node.rb +9 -0
  139. data/lib/refract/nodes/return_node.rb +13 -0
  140. data/lib/refract/nodes/self_node.rb +9 -0
  141. data/lib/refract/nodes/shareable_constant_node.rb +13 -0
  142. data/lib/refract/nodes/singleton_class_node.rb +14 -0
  143. data/lib/refract/nodes/source_encoding_node.rb +9 -0
  144. data/lib/refract/nodes/source_file_node.rb +9 -0
  145. data/lib/refract/nodes/source_line_node.rb +9 -0
  146. data/lib/refract/nodes/splat_node.rb +13 -0
  147. data/lib/refract/nodes/statements_node.rb +13 -0
  148. data/lib/refract/nodes/string_node.rb +13 -0
  149. data/lib/refract/nodes/super_node.rb +14 -0
  150. data/lib/refract/nodes/symbol_node.rb +13 -0
  151. data/lib/refract/nodes/true_node.rb +9 -0
  152. data/lib/refract/nodes/undef_node.rb +13 -0
  153. data/lib/refract/nodes/unless_node.rb +16 -0
  154. data/lib/refract/nodes/until_node.rb +15 -0
  155. data/lib/refract/nodes/when_node.rb +14 -0
  156. data/lib/refract/nodes/while_node.rb +15 -0
  157. data/lib/refract/nodes/x_string_node.rb +13 -0
  158. data/lib/refract/nodes/yield_node.rb +13 -0
  159. data/lib/refract/version.rb +5 -0
  160. data/lib/refract/visitor.rb +689 -0
  161. data/lib/refract.rb +50 -55
  162. data/lib/rubocop/cop/refract/ordered_visit_methods.rb +107 -0
  163. data/lib/rubocop/cop/refract_cops.rb +3 -0
  164. 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