refract 0.0.2 → 1.0.0.beta1

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