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,1204 @@
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
+ prism_node: node,
20
+ new_name: visit(node.new_name),
21
+ old_name: visit(node.old_name),
22
+ )
23
+ end
24
+
25
+ visit Prism::AliasMethodNode do |node|
26
+ AliasMethodNode.new(
27
+ prism_node: node,
28
+ new_name: visit(node.new_name),
29
+ old_name: visit(node.old_name),
30
+ )
31
+ end
32
+
33
+ visit Prism::AlternationPatternNode do |node|
34
+ AlternationPatternNode.new(
35
+ prism_node: node,
36
+ left: visit(node.left),
37
+ right: visit(node.right),
38
+ )
39
+ end
40
+
41
+ visit Prism::AndNode do |node|
42
+ AndNode.new(
43
+ prism_node: node,
44
+ left: visit(node.left),
45
+ operator: node.operator,
46
+ right: visit(node.right),
47
+ )
48
+ end
49
+
50
+ visit Prism::ArgumentsNode do |node|
51
+ ArgumentsNode.new(
52
+ prism_node: node,
53
+ arguments: node.arguments&.map { |n| visit(n) },
54
+ )
55
+ end
56
+
57
+ visit Prism::ArrayNode do |node|
58
+ ArrayNode.new(
59
+ prism_node: node,
60
+ elements: node.elements&.map { |n| visit(n) },
61
+ )
62
+ end
63
+
64
+ visit Prism::ArrayPatternNode do |node|
65
+ ArrayPatternNode.new(
66
+ prism_node: node,
67
+ constant: visit(node.constant),
68
+ requireds: node.requireds&.map { |n| visit(n) },
69
+ rest: visit(node.rest),
70
+ posts: node.posts&.map { |n| visit(n) },
71
+ )
72
+ end
73
+
74
+ visit Prism::AssocNode do |node|
75
+ AssocNode.new(
76
+ prism_node: node,
77
+ key: visit(node.key),
78
+ value: visit(node.value),
79
+ )
80
+ end
81
+
82
+ visit Prism::AssocSplatNode do |node|
83
+ AssocSplatNode.new(
84
+ prism_node: node,
85
+ value: visit(node.value),
86
+ )
87
+ end
88
+
89
+ visit Prism::BackReferenceReadNode do |node|
90
+ BackReferenceReadNode.new(
91
+ prism_node: node,
92
+ name: node.name,
93
+ )
94
+ end
95
+
96
+ visit Prism::BeginNode do |node|
97
+ BeginNode.new(
98
+ prism_node: node,
99
+ statements: visit(node.statements),
100
+ rescue_clause: visit(node.rescue_clause),
101
+ else_clause: visit(node.else_clause),
102
+ ensure_clause: visit(node.ensure_clause),
103
+ )
104
+ end
105
+
106
+ visit Prism::BlockArgumentNode do |node|
107
+ BlockArgumentNode.new(
108
+ prism_node: node,
109
+ expression: visit(node.expression),
110
+ )
111
+ end
112
+
113
+ visit Prism::BlockLocalVariableNode do |node|
114
+ BlockLocalVariableNode.new(
115
+ prism_node: node,
116
+ name: node.name,
117
+ )
118
+ end
119
+
120
+ visit Prism::BlockNode do |node|
121
+ BlockNode.new(
122
+ prism_node: node,
123
+ parameters: visit(node.parameters),
124
+ body: visit(node.body),
125
+ )
126
+ end
127
+
128
+ visit Prism::BlockParameterNode do |node|
129
+ BlockParameterNode.new(
130
+ prism_node: node,
131
+ name: node.name,
132
+ )
133
+ end
134
+
135
+ visit Prism::BlockParametersNode do |node|
136
+ BlockParametersNode.new(
137
+ prism_node: node,
138
+ parameters: visit(node.parameters),
139
+ locals: node.locals&.map { |n| visit(n) },
140
+ )
141
+ end
142
+
143
+ visit Prism::BreakNode do |node|
144
+ BreakNode.new(
145
+ prism_node: node,
146
+ arguments: visit(node.arguments),
147
+ )
148
+ end
149
+
150
+ visit Prism::CallAndWriteNode do |node|
151
+ CallAndWriteNode.new(
152
+ prism_node: node,
153
+ receiver: visit(node.receiver),
154
+ read_name: node.read_name,
155
+ value: visit(node.value),
156
+ )
157
+ end
158
+
159
+ visit Prism::CallNode do |node|
160
+ CallNode.new(
161
+ prism_node: node,
162
+ receiver: visit(node.receiver),
163
+ name: node.name,
164
+ arguments: visit(node.arguments),
165
+ block: visit(node.block),
166
+ )
167
+ end
168
+
169
+ visit Prism::CallOperatorWriteNode do |node|
170
+ CallOperatorWriteNode.new(
171
+ prism_node: node,
172
+ receiver: visit(node.receiver),
173
+ read_name: node.read_name,
174
+ binary_operator: node.binary_operator,
175
+ value: visit(node.value),
176
+ )
177
+ end
178
+
179
+ visit Prism::CallOrWriteNode do |node|
180
+ CallOrWriteNode.new(
181
+ prism_node: node,
182
+ receiver: visit(node.receiver),
183
+ read_name: node.read_name,
184
+ value: visit(node.value),
185
+ )
186
+ end
187
+
188
+ visit Prism::CallTargetNode do |node|
189
+ CallTargetNode.new(
190
+ prism_node: node,
191
+ receiver: visit(node.receiver),
192
+ name: node.name,
193
+ )
194
+ end
195
+
196
+ visit Prism::CapturePatternNode do |node|
197
+ CapturePatternNode.new(
198
+ prism_node: node,
199
+ value: visit(node.value),
200
+ target: visit(node.target),
201
+ )
202
+ end
203
+
204
+ visit Prism::CaseMatchNode do |node|
205
+ CaseMatchNode.new(
206
+ prism_node: node,
207
+ predicate: visit(node.predicate),
208
+ conditions: node.conditions&.map { |n| visit(n) },
209
+ else_clause: visit(node.else_clause),
210
+ )
211
+ end
212
+
213
+ visit Prism::CaseNode do |node|
214
+ CaseNode.new(
215
+ prism_node: node,
216
+ predicate: visit(node.predicate),
217
+ conditions: node.conditions&.map { |n| visit(n) },
218
+ else_clause: visit(node.else_clause),
219
+ )
220
+ end
221
+
222
+ visit Prism::ClassNode do |node|
223
+ ClassNode.new(
224
+ prism_node: node,
225
+ constant_path: visit(node.constant_path),
226
+ superclass: visit(node.superclass),
227
+ body: visit(node.body),
228
+ )
229
+ end
230
+
231
+ visit Prism::ClassVariableAndWriteNode do |node|
232
+ ClassVariableAndWriteNode.new(
233
+ prism_node: node,
234
+ name: node.name,
235
+ value: visit(node.value),
236
+ )
237
+ end
238
+
239
+ visit Prism::ClassVariableOperatorWriteNode do |node|
240
+ ClassVariableOperatorWriteNode.new(
241
+ prism_node: node,
242
+ name: node.name,
243
+ value: visit(node.value),
244
+ binary_operator: node.binary_operator,
245
+ )
246
+ end
247
+
248
+ visit Prism::ClassVariableOrWriteNode do |node|
249
+ ClassVariableOrWriteNode.new(
250
+ prism_node: node,
251
+ name: node.name,
252
+ value: visit(node.value),
253
+ )
254
+ end
255
+
256
+ visit Prism::ClassVariableReadNode do |node|
257
+ ClassVariableReadNode.new(
258
+ prism_node: node,
259
+ name: node.name,
260
+ )
261
+ end
262
+
263
+ visit Prism::ClassVariableTargetNode do |node|
264
+ ClassVariableTargetNode.new(
265
+ prism_node: node,
266
+ name: node.name,
267
+ )
268
+ end
269
+
270
+ visit Prism::ClassVariableWriteNode do |node|
271
+ ClassVariableWriteNode.new(
272
+ prism_node: node,
273
+ name: node.name,
274
+ value: visit(node.value),
275
+ )
276
+ end
277
+
278
+ visit Prism::ConstantAndWriteNode do |node|
279
+ ConstantAndWriteNode.new(
280
+ prism_node: node,
281
+ name: node.name,
282
+ value: visit(node.value),
283
+ )
284
+ end
285
+
286
+ visit Prism::ConstantOperatorWriteNode do |node|
287
+ ConstantOperatorWriteNode.new(
288
+ prism_node: node,
289
+ name: node.name,
290
+ value: visit(node.value),
291
+ binary_operator: node.binary_operator,
292
+ )
293
+ end
294
+
295
+ visit Prism::ConstantOrWriteNode do |node|
296
+ ConstantOrWriteNode.new(
297
+ prism_node: node,
298
+ name: node.name,
299
+ value: visit(node.value),
300
+ )
301
+ end
302
+
303
+ visit Prism::ConstantPathAndWriteNode do |node|
304
+ ConstantPathAndWriteNode.new(
305
+ prism_node: node,
306
+ target: visit(node.target),
307
+ value: visit(node.value),
308
+ )
309
+ end
310
+
311
+ visit Prism::ConstantPathNode do |node|
312
+ ConstantPathNode.new(
313
+ prism_node: node,
314
+ parent: visit(node.parent),
315
+ name: node.name,
316
+ )
317
+ end
318
+
319
+ visit Prism::ConstantPathOperatorWriteNode do |node|
320
+ ConstantPathOperatorWriteNode.new(
321
+ prism_node: node,
322
+ target: visit(node.target),
323
+ value: visit(node.value),
324
+ binary_operator: node.binary_operator,
325
+ )
326
+ end
327
+
328
+ visit Prism::ConstantPathOrWriteNode do |node|
329
+ ConstantPathOrWriteNode.new(
330
+ prism_node: node,
331
+ target: visit(node.target),
332
+ value: visit(node.value),
333
+ )
334
+ end
335
+
336
+ visit Prism::ConstantPathTargetNode do |node|
337
+ ConstantPathTargetNode.new(
338
+ prism_node: node,
339
+ parent: visit(node.parent),
340
+ name: node.name,
341
+ )
342
+ end
343
+
344
+ visit Prism::ConstantPathWriteNode do |node|
345
+ ConstantPathWriteNode.new(
346
+ prism_node: node,
347
+ target: visit(node.target),
348
+ value: visit(node.value),
349
+ )
350
+ end
351
+
352
+ visit Prism::ConstantReadNode do |node|
353
+ ConstantReadNode.new(
354
+ prism_node: node,
355
+ name: node.name,
356
+ )
357
+ end
358
+
359
+ visit Prism::ConstantTargetNode do |node|
360
+ ConstantTargetNode.new(
361
+ prism_node: node,
362
+ name: node.name,
363
+ )
364
+ end
365
+
366
+ visit Prism::ConstantWriteNode do |node|
367
+ ConstantWriteNode.new(
368
+ prism_node: node,
369
+ name: node.name,
370
+ value: visit(node.value),
371
+ )
372
+ end
373
+
374
+ visit Prism::DefNode do |node|
375
+ DefNode.new(
376
+ prism_node: node,
377
+ name: node.name,
378
+ receiver: visit(node.receiver),
379
+ parameters: visit(node.parameters),
380
+ body: visit(node.body),
381
+ )
382
+ end
383
+
384
+ visit Prism::DefinedNode do |node|
385
+ DefinedNode.new(
386
+ prism_node: node,
387
+ value: visit(node.value),
388
+ )
389
+ end
390
+
391
+ visit Prism::ElseNode do |node|
392
+ ElseNode.new(
393
+ prism_node: node,
394
+ statements: visit(node.statements),
395
+ )
396
+ end
397
+
398
+ visit Prism::EmbeddedStatementsNode do |node|
399
+ EmbeddedStatementsNode.new(
400
+ prism_node: node,
401
+ statements: visit(node.statements),
402
+ )
403
+ end
404
+
405
+ visit Prism::EmbeddedVariableNode do |node|
406
+ EmbeddedVariableNode.new(
407
+ prism_node: node,
408
+ variable: visit(node.variable),
409
+ )
410
+ end
411
+
412
+ visit Prism::EnsureNode do |node|
413
+ EnsureNode.new(
414
+ prism_node: node,
415
+ statements: visit(node.statements),
416
+ )
417
+ end
418
+
419
+ visit Prism::FalseNode do |node|
420
+ FalseNode.new(
421
+ prism_node: node,
422
+ )
423
+ end
424
+
425
+ visit Prism::FindPatternNode do |node|
426
+ FindPatternNode.new(
427
+ prism_node: node,
428
+ constant: visit(node.constant),
429
+ left: visit(node.left),
430
+ requireds: node.requireds.map { |n| visit(n) },
431
+ right: visit(node.right),
432
+ )
433
+ end
434
+
435
+ visit Prism::FlipFlopNode do |node|
436
+ FlipFlopNode.new(
437
+ prism_node: node,
438
+ left: visit(node.left),
439
+ right: visit(node.right),
440
+ exclude_end: node.exclude_end?,
441
+ )
442
+ end
443
+
444
+ visit Prism::FloatNode do |node|
445
+ FloatNode.new(
446
+ prism_node: node,
447
+ value: node.slice,
448
+ )
449
+ end
450
+
451
+ visit Prism::ForNode do |node|
452
+ ForNode.new(
453
+ prism_node: node,
454
+ index: visit(node.index),
455
+ collection: visit(node.collection),
456
+ statements: visit(node.statements),
457
+ )
458
+ end
459
+
460
+ visit Prism::ForwardingArgumentsNode do |node|
461
+ ForwardingArgumentsNode.new(
462
+ prism_node: node,
463
+ )
464
+ end
465
+
466
+ visit Prism::ForwardingParameterNode do |node|
467
+ ForwardingParameterNode.new(
468
+ prism_node: node,
469
+ )
470
+ end
471
+
472
+ visit Prism::ForwardingSuperNode do |node|
473
+ ForwardingSuperNode.new(
474
+ prism_node: node,
475
+ block: visit(node.block),
476
+ )
477
+ end
478
+
479
+ visit Prism::GlobalVariableAndWriteNode do |node|
480
+ GlobalVariableAndWriteNode.new(
481
+ prism_node: node,
482
+ name: node.name,
483
+ value: visit(node.value),
484
+ )
485
+ end
486
+
487
+ visit Prism::GlobalVariableOperatorWriteNode do |node|
488
+ GlobalVariableOperatorWriteNode.new(
489
+ prism_node: node,
490
+ name: node.name,
491
+ value: visit(node.value),
492
+ binary_operator: node.binary_operator,
493
+ )
494
+ end
495
+
496
+ visit Prism::GlobalVariableOrWriteNode do |node|
497
+ GlobalVariableOrWriteNode.new(
498
+ prism_node: node,
499
+ name: node.name,
500
+ value: visit(node.value),
501
+ )
502
+ end
503
+
504
+ visit Prism::GlobalVariableReadNode do |node|
505
+ GlobalVariableReadNode.new(
506
+ prism_node: node,
507
+ name: node.name,
508
+ )
509
+ end
510
+
511
+ visit Prism::GlobalVariableTargetNode do |node|
512
+ GlobalVariableTargetNode.new(
513
+ prism_node: node,
514
+ name: node.name,
515
+ )
516
+ end
517
+
518
+ visit Prism::GlobalVariableWriteNode do |node|
519
+ GlobalVariableWriteNode.new(
520
+ prism_node: node,
521
+ name: node.name,
522
+ value: visit(node.value),
523
+ )
524
+ end
525
+
526
+ visit Prism::HashNode do |node|
527
+ HashNode.new(
528
+ prism_node: node,
529
+ elements: node.elements&.map { |n| visit(n) },
530
+ )
531
+ end
532
+
533
+ visit Prism::HashPatternNode do |node|
534
+ HashPatternNode.new(
535
+ prism_node: node,
536
+ elements: node.elements&.map { |n| visit(n) },
537
+ rest: visit(node.rest),
538
+ )
539
+ end
540
+
541
+ visit Prism::IfNode do |node|
542
+ IfNode.new(
543
+ prism_node: node,
544
+ predicate: visit(node.predicate),
545
+ statements: visit(node.statements),
546
+ subsequent: visit(node.subsequent),
547
+ inline: (node.predicate && node.statements && node.predicate.location.start_offset > node.statements.location.start_offset),
548
+ )
549
+ end
550
+
551
+ visit Prism::ImaginaryNode do |node|
552
+ ImaginaryNode.new(
553
+ prism_node: node,
554
+ numeric: visit(node.numeric),
555
+ )
556
+ end
557
+
558
+ visit Prism::ImplicitNode do |node|
559
+ ImplicitNode.new(
560
+ prism_node: node,
561
+ value: visit(node.value),
562
+ )
563
+ end
564
+
565
+ visit Prism::ImplicitRestNode do |node|
566
+ ImplicitRestNode.new(
567
+ prism_node: node,
568
+ )
569
+ end
570
+
571
+ visit Prism::InNode do |node|
572
+ InNode.new(
573
+ prism_node: node,
574
+ pattern: visit(node.pattern),
575
+ statements: visit(node.statements),
576
+ )
577
+ end
578
+
579
+ visit Prism::IndexAndWriteNode do |node|
580
+ IndexAndWriteNode.new(
581
+ prism_node: node,
582
+ receiver: visit(node.receiver),
583
+ arguments: visit(node.arguments),
584
+ block: visit(node.block),
585
+ value: visit(node.value),
586
+ )
587
+ end
588
+
589
+ visit Prism::IndexOperatorWriteNode do |node|
590
+ IndexOperatorWriteNode.new(
591
+ prism_node: node,
592
+ receiver: visit(node.receiver),
593
+ arguments: visit(node.arguments),
594
+ block: visit(node.block),
595
+ binary_operator: node.binary_operator,
596
+ value: visit(node.value),
597
+ )
598
+ end
599
+
600
+ visit Prism::IndexOrWriteNode do |node|
601
+ IndexOrWriteNode.new(
602
+ prism_node: node,
603
+ receiver: visit(node.receiver),
604
+ arguments: visit(node.arguments),
605
+ block: visit(node.block),
606
+ value: visit(node.value),
607
+ )
608
+ end
609
+
610
+ visit Prism::IndexTargetNode do |node|
611
+ IndexTargetNode.new(
612
+ prism_node: node,
613
+ receiver: visit(node.receiver),
614
+ arguments: visit(node.arguments),
615
+ block: visit(node.block),
616
+ )
617
+ end
618
+
619
+ visit Prism::InstanceVariableAndWriteNode do |node|
620
+ InstanceVariableAndWriteNode.new(
621
+ prism_node: node,
622
+ name: node.name,
623
+ value: visit(node.value),
624
+ )
625
+ end
626
+
627
+ visit Prism::InstanceVariableOperatorWriteNode do |node|
628
+ InstanceVariableOperatorWriteNode.new(
629
+ prism_node: node,
630
+ name: node.name,
631
+ value: visit(node.value),
632
+ binary_operator: node.binary_operator,
633
+ )
634
+ end
635
+
636
+ visit Prism::InstanceVariableOrWriteNode do |node|
637
+ InstanceVariableOrWriteNode.new(
638
+ prism_node: node,
639
+ name: node.name,
640
+ value: visit(node.value),
641
+ )
642
+ end
643
+
644
+ visit Prism::InstanceVariableReadNode do |node|
645
+ InstanceVariableReadNode.new(
646
+ prism_node: node,
647
+ name: node.name,
648
+ )
649
+ end
650
+
651
+ visit Prism::InstanceVariableTargetNode do |node|
652
+ InstanceVariableTargetNode.new(
653
+ prism_node: node,
654
+ name: node.name,
655
+ )
656
+ end
657
+
658
+ visit Prism::InstanceVariableWriteNode do |node|
659
+ InstanceVariableWriteNode.new(
660
+ prism_node: node,
661
+ name: node.name,
662
+ value: visit(node.value),
663
+ )
664
+ end
665
+
666
+ visit Prism::IntegerNode do |node|
667
+ IntegerNode.new(
668
+ prism_node: node,
669
+ value: node.value,
670
+ )
671
+ end
672
+
673
+ visit Prism::InterpolatedMatchLastLineNode do |node|
674
+ InterpolatedMatchLastLineNode.new(
675
+ prism_node: node,
676
+ parts: node.parts&.map { |n| visit(n) },
677
+ ignore_case: node.ignore_case?,
678
+ multi_line: node.multi_line?,
679
+ extended: node.extended?,
680
+ once: node.once?,
681
+ )
682
+ end
683
+
684
+ visit Prism::InterpolatedRegularExpressionNode do |node|
685
+ InterpolatedRegularExpressionNode.new(
686
+ prism_node: node,
687
+ parts: node.parts.map { |part| visit(part) },
688
+ ignore_case: node.ignore_case?,
689
+ multi_line: node.multi_line?,
690
+ extended: node.extended?,
691
+ once: node.once?,
692
+ )
693
+ end
694
+
695
+ visit Prism::InterpolatedStringNode do |node|
696
+ InterpolatedStringNode.new(
697
+ prism_node: node,
698
+ parts: node.parts&.map { |n| visit(n) },
699
+ )
700
+ end
701
+
702
+ visit Prism::InterpolatedSymbolNode do |node|
703
+ InterpolatedSymbolNode.new(
704
+ prism_node: node,
705
+ parts: node.parts.map { |part| visit(part) },
706
+ )
707
+ end
708
+
709
+ visit Prism::InterpolatedXStringNode do |node|
710
+ InterpolatedXStringNode.new(
711
+ prism_node: node,
712
+ parts: node.parts.map { |part| visit(part) },
713
+ )
714
+ end
715
+
716
+ visit Prism::ItLocalVariableReadNode do |node|
717
+ ItLocalVariableReadNode.new(
718
+ prism_node: node,
719
+ )
720
+ end
721
+
722
+ visit Prism::ItParametersNode do |node|
723
+ ItParametersNode.new(
724
+ prism_node: node,
725
+ )
726
+ end
727
+
728
+ visit Prism::KeywordHashNode do |node|
729
+ KeywordHashNode.new(
730
+ prism_node: node,
731
+ elements: node.elements&.map { |n| visit(n) },
732
+ )
733
+ end
734
+
735
+ visit Prism::KeywordRestParameterNode do |node|
736
+ KeywordRestParameterNode.new(
737
+ prism_node: node,
738
+ name: node.name,
739
+ )
740
+ end
741
+
742
+ visit Prism::LambdaNode do |node|
743
+ LambdaNode.new(
744
+ prism_node: node,
745
+ parameters: visit(node.parameters),
746
+ body: visit(node.body),
747
+ )
748
+ end
749
+
750
+ visit Prism::LocalVariableAndWriteNode do |node|
751
+ LocalVariableAndWriteNode.new(
752
+ prism_node: node,
753
+ name: node.name,
754
+ value: visit(node.value),
755
+ depth: node.depth,
756
+ )
757
+ end
758
+
759
+ visit Prism::LocalVariableOperatorWriteNode do |node|
760
+ LocalVariableOperatorWriteNode.new(
761
+ prism_node: node,
762
+ name: node.name,
763
+ value: visit(node.value),
764
+ binary_operator: node.binary_operator,
765
+ depth: node.depth,
766
+ )
767
+ end
768
+
769
+ visit Prism::LocalVariableOrWriteNode do |node|
770
+ LocalVariableOrWriteNode.new(
771
+ prism_node: node,
772
+ name: node.name,
773
+ value: visit(node.value),
774
+ depth: node.depth,
775
+ )
776
+ end
777
+
778
+ visit Prism::LocalVariableReadNode do |node|
779
+ LocalVariableReadNode.new(
780
+ prism_node: node,
781
+ name: node.name,
782
+ )
783
+ end
784
+
785
+ visit Prism::LocalVariableTargetNode do |node|
786
+ LocalVariableTargetNode.new(
787
+ prism_node: node,
788
+ name: node.name,
789
+ )
790
+ end
791
+
792
+ visit Prism::LocalVariableWriteNode do |node|
793
+ LocalVariableWriteNode.new(
794
+ prism_node: node,
795
+ name: node.name,
796
+ value: visit(node.value),
797
+ )
798
+ end
799
+
800
+ visit Prism::MatchLastLineNode do |node|
801
+ MatchLastLineNode.new(
802
+ prism_node: node,
803
+ unescaped: node.unescaped,
804
+ ignore_case: node.ignore_case?,
805
+ multi_line: node.multi_line?,
806
+ extended: node.extended?,
807
+ once: node.once?,
808
+ )
809
+ end
810
+
811
+ visit Prism::MatchPredicateNode do |node|
812
+ MatchPredicateNode.new(
813
+ prism_node: node,
814
+ value: visit(node.value),
815
+ pattern: visit(node.pattern),
816
+ )
817
+ end
818
+
819
+ visit Prism::MatchRequiredNode do |node|
820
+ MatchRequiredNode.new(
821
+ prism_node: node,
822
+ value: visit(node.value),
823
+ pattern: visit(node.pattern),
824
+ )
825
+ end
826
+
827
+ visit Prism::MatchWriteNode do |node|
828
+ MatchWriteNode.new(
829
+ prism_node: node,
830
+ call: visit(node.call),
831
+ targets: node.targets.map { |t| visit(t) },
832
+ )
833
+ end
834
+
835
+ visit Prism::MissingNode do |node|
836
+ MissingNode.new(
837
+ prism_node: node,
838
+ )
839
+ end
840
+
841
+ visit Prism::ModuleNode do |node|
842
+ ModuleNode.new(
843
+ prism_node: node,
844
+ constant_path: visit(node.constant_path),
845
+ body: visit(node.body),
846
+ )
847
+ end
848
+
849
+ visit Prism::MultiTargetNode do |node|
850
+ MultiTargetNode.new(
851
+ prism_node: node,
852
+ lefts: node.lefts.map { |n| visit(n) },
853
+ rest: visit(node.rest),
854
+ rights: node.rights.map { |n| visit(n) },
855
+ )
856
+ end
857
+
858
+ visit Prism::MultiWriteNode do |node|
859
+ MultiWriteNode.new(
860
+ prism_node: node,
861
+ lefts: node.lefts&.map { |n| visit(n) },
862
+ rest: visit(node.rest),
863
+ rights: node.rights&.map { |n| visit(n) },
864
+ value: visit(node.value),
865
+ )
866
+ end
867
+
868
+ visit Prism::NextNode do |node|
869
+ NextNode.new(
870
+ prism_node: node,
871
+ arguments: visit(node.arguments),
872
+ )
873
+ end
874
+
875
+ visit Prism::NilNode do |node|
876
+ NilNode.new(
877
+ prism_node: node,
878
+ )
879
+ end
880
+
881
+ visit Prism::NoKeywordsParameterNode do |node|
882
+ NoKeywordsParameterNode.new(
883
+ prism_node: node,
884
+ )
885
+ end
886
+
887
+ visit Prism::NumberedParametersNode do |node|
888
+ NumberedParametersNode.new(
889
+ prism_node: node,
890
+ )
891
+ end
892
+
893
+ visit Prism::NumberedReferenceReadNode do |node|
894
+ NumberedReferenceReadNode.new(
895
+ prism_node: node,
896
+ number: node.number,
897
+ )
898
+ end
899
+
900
+ visit Prism::OptionalKeywordParameterNode do |node|
901
+ OptionalKeywordParameterNode.new(
902
+ prism_node: node,
903
+ name: node.name,
904
+ value: visit(node.value),
905
+ )
906
+ end
907
+
908
+ visit Prism::OptionalParameterNode do |node|
909
+ OptionalParameterNode.new(
910
+ prism_node: node,
911
+ name: node.name,
912
+ value: visit(node.value),
913
+ )
914
+ end
915
+
916
+ visit Prism::OrNode do |node|
917
+ OrNode.new(
918
+ prism_node: node,
919
+ left: visit(node.left),
920
+ operator: node.operator,
921
+ right: visit(node.right),
922
+ )
923
+ end
924
+
925
+ visit Prism::ParametersNode do |node|
926
+ ParametersNode.new(
927
+ prism_node: node,
928
+ requireds: node.requireds&.map { |n| visit(n) },
929
+ optionals: node.optionals&.map { |n| visit(n) },
930
+ rest: visit(node.rest),
931
+ posts: node.posts&.map { |n| visit(n) },
932
+ keywords: node.keywords&.map { |n| visit(n) },
933
+ keyword_rest: visit(node.keyword_rest),
934
+ block: visit(node.block),
935
+ )
936
+ end
937
+
938
+ visit Prism::ParenthesesNode do |node|
939
+ ParenthesesNode.new(
940
+ prism_node: node,
941
+ body: visit(node.body),
942
+ )
943
+ end
944
+
945
+ visit Prism::PinnedExpressionNode do |node|
946
+ PinnedExpressionNode.new(
947
+ prism_node: node,
948
+ expression: visit(node.expression),
949
+ )
950
+ end
951
+
952
+ visit Prism::PinnedVariableNode do |node|
953
+ PinnedVariableNode.new(
954
+ prism_node: node,
955
+ variable: visit(node.variable),
956
+ )
957
+ end
958
+
959
+ visit Prism::PostExecutionNode do |node|
960
+ PostExecutionNode.new(
961
+ prism_node: node,
962
+ statements: visit(node.statements),
963
+ )
964
+ end
965
+
966
+ visit Prism::PreExecutionNode do |node|
967
+ PreExecutionNode.new(
968
+ prism_node: node,
969
+ statements: visit(node.statements),
970
+ )
971
+ end
972
+
973
+ visit Prism::ProgramNode do |node|
974
+ ProgramNode.new(
975
+ prism_node: node,
976
+ statements: visit(node.statements),
977
+ )
978
+ end
979
+
980
+ visit Prism::RangeNode do |node|
981
+ RangeNode.new(
982
+ prism_node: node,
983
+ left: visit(node.left),
984
+ right: visit(node.right),
985
+ exclude_end: node.exclude_end?,
986
+ )
987
+ end
988
+
989
+ visit Prism::RationalNode do |node|
990
+ RationalNode.new(
991
+ prism_node: node,
992
+ numerator: node.numerator,
993
+ denominator: node.denominator,
994
+ )
995
+ end
996
+
997
+ visit Prism::RedoNode do |node|
998
+ RedoNode.new(
999
+ prism_node: node,
1000
+ )
1001
+ end
1002
+
1003
+ visit Prism::RegularExpressionNode do |node|
1004
+ RegularExpressionNode.new(
1005
+ prism_node: node,
1006
+ unescaped: node.unescaped,
1007
+ ignore_case: node.ignore_case?,
1008
+ multi_line: node.multi_line?,
1009
+ extended: node.extended?,
1010
+ once: node.once?,
1011
+ )
1012
+ end
1013
+
1014
+ visit Prism::RequiredKeywordParameterNode do |node|
1015
+ RequiredKeywordParameterNode.new(
1016
+ prism_node: node,
1017
+ name: node.name,
1018
+ )
1019
+ end
1020
+
1021
+ visit Prism::RequiredParameterNode do |node|
1022
+ RequiredParameterNode.new(
1023
+ prism_node: node,
1024
+ name: node.name,
1025
+ )
1026
+ end
1027
+
1028
+ visit Prism::RescueModifierNode do |node|
1029
+ RescueModifierNode.new(
1030
+ prism_node: node,
1031
+ expression: visit(node.expression),
1032
+ rescue_expression: visit(node.rescue_expression),
1033
+ )
1034
+ end
1035
+
1036
+ visit Prism::RescueNode do |node|
1037
+ RescueNode.new(
1038
+ prism_node: node,
1039
+ exceptions: node.exceptions&.map { |n| visit(n) },
1040
+ reference: visit(node.reference),
1041
+ statements: visit(node.statements),
1042
+ subsequent: visit(node.subsequent),
1043
+ )
1044
+ end
1045
+
1046
+ visit Prism::RestParameterNode do |node|
1047
+ RestParameterNode.new(
1048
+ prism_node: node,
1049
+ name: node.name,
1050
+ )
1051
+ end
1052
+
1053
+ visit Prism::RetryNode do |node|
1054
+ RetryNode.new(
1055
+ prism_node: node,
1056
+ )
1057
+ end
1058
+
1059
+ visit Prism::ReturnNode do |node|
1060
+ ReturnNode.new(
1061
+ prism_node: node,
1062
+ arguments: visit(node.arguments),
1063
+ )
1064
+ end
1065
+
1066
+ visit Prism::SelfNode do |node|
1067
+ SelfNode.new(
1068
+ prism_node: node,
1069
+ )
1070
+ end
1071
+
1072
+ visit Prism::ShareableConstantNode do |node|
1073
+ ShareableConstantNode.new(
1074
+ prism_node: node,
1075
+ write: visit(node.write),
1076
+ )
1077
+ end
1078
+
1079
+ visit Prism::SingletonClassNode do |node|
1080
+ SingletonClassNode.new(
1081
+ prism_node: node,
1082
+ expression: visit(node.expression),
1083
+ body: visit(node.body),
1084
+ )
1085
+ end
1086
+
1087
+ visit Prism::SourceEncodingNode do |node|
1088
+ SourceEncodingNode.new(
1089
+ prism_node: node,
1090
+ )
1091
+ end
1092
+
1093
+ visit Prism::SourceFileNode do |node|
1094
+ SourceFileNode.new(
1095
+ prism_node: node,
1096
+ )
1097
+ end
1098
+
1099
+ visit Prism::SourceLineNode do |node|
1100
+ SourceLineNode.new(
1101
+ prism_node: node,
1102
+ )
1103
+ end
1104
+
1105
+ visit Prism::SplatNode do |node|
1106
+ SplatNode.new(
1107
+ prism_node: node,
1108
+ expression: visit(node.expression),
1109
+ )
1110
+ end
1111
+
1112
+ visit Prism::StatementsNode do |node|
1113
+ StatementsNode.new(
1114
+ prism_node: node,
1115
+ body: node.body&.map { |n| visit(n) },
1116
+ )
1117
+ end
1118
+
1119
+ visit Prism::StringNode do |node|
1120
+ StringNode.new(
1121
+ prism_node: node,
1122
+ unescaped: node.unescaped,
1123
+ )
1124
+ end
1125
+
1126
+ visit Prism::SuperNode do |node|
1127
+ SuperNode.new(
1128
+ prism_node: node,
1129
+ arguments: visit(node.arguments),
1130
+ block: visit(node.block),
1131
+ )
1132
+ end
1133
+
1134
+ visit Prism::SymbolNode do |node|
1135
+ SymbolNode.new(
1136
+ prism_node: node,
1137
+ unescaped: node.unescaped,
1138
+ )
1139
+ end
1140
+
1141
+ visit Prism::TrueNode do |node|
1142
+ TrueNode.new(
1143
+ prism_node: node,
1144
+ )
1145
+ end
1146
+
1147
+ visit Prism::UndefNode do |node|
1148
+ UndefNode.new(
1149
+ prism_node: node,
1150
+ names: node.names.map { |n| visit(n) },
1151
+ )
1152
+ end
1153
+
1154
+ visit Prism::UnlessNode do |node|
1155
+ UnlessNode.new(
1156
+ prism_node: node,
1157
+ predicate: visit(node.predicate),
1158
+ statements: visit(node.statements),
1159
+ else_clause: visit(node.else_clause),
1160
+ inline: (node.predicate && node.statements && node.predicate.location.start_offset > node.statements.location.start_offset),
1161
+ )
1162
+ end
1163
+
1164
+ visit Prism::UntilNode do |node|
1165
+ UntilNode.new(
1166
+ prism_node: node,
1167
+ predicate: visit(node.predicate),
1168
+ statements: visit(node.statements),
1169
+ inline: (node.predicate && node.statements && node.predicate.location.start_offset > node.statements.location.start_offset),
1170
+ )
1171
+ end
1172
+
1173
+ visit Prism::WhenNode do |node|
1174
+ WhenNode.new(
1175
+ prism_node: node,
1176
+ conditions: node.conditions&.map { |n| visit(n) },
1177
+ statements: visit(node.statements),
1178
+ )
1179
+ end
1180
+
1181
+ visit Prism::WhileNode do |node|
1182
+ WhileNode.new(
1183
+ prism_node: node,
1184
+ predicate: visit(node.predicate),
1185
+ statements: visit(node.statements),
1186
+ inline: (node.predicate && node.statements && node.predicate.location.start_offset > node.statements.location.start_offset),
1187
+ )
1188
+ end
1189
+
1190
+ visit Prism::XStringNode do |node|
1191
+ XStringNode.new(
1192
+ prism_node: node,
1193
+ unescaped: node.unescaped,
1194
+ )
1195
+ end
1196
+
1197
+ visit Prism::YieldNode do |node|
1198
+ YieldNode.new(
1199
+ prism_node: node,
1200
+ arguments: visit(node.arguments),
1201
+ )
1202
+ end
1203
+ end
1204
+ end