prism 2.0.0.rc1-x86_64-linux-gnu

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 (216) hide show
  1. checksums.yaml +7 -0
  2. data/BSDmakefile +58 -0
  3. data/CHANGELOG.md +870 -0
  4. data/CODE_OF_CONDUCT.md +76 -0
  5. data/CONTRIBUTING.md +58 -0
  6. data/LICENSE.md +7 -0
  7. data/Makefile +145 -0
  8. data/README.md +81 -0
  9. data/config.yml +4752 -0
  10. data/docs/build_system.md +119 -0
  11. data/docs/configuration.md +69 -0
  12. data/docs/cruby_compilation.md +27 -0
  13. data/docs/design.md +53 -0
  14. data/docs/encoding.md +121 -0
  15. data/docs/fuzzing.md +81 -0
  16. data/docs/heredocs.md +36 -0
  17. data/docs/javascript.md +133 -0
  18. data/docs/local_variable_depth.md +229 -0
  19. data/docs/mapping.md +117 -0
  20. data/docs/parser_translation.md +24 -0
  21. data/docs/parsing_rules.md +22 -0
  22. data/docs/releasing.md +147 -0
  23. data/docs/relocation.md +32 -0
  24. data/docs/ripper_translation.md +63 -0
  25. data/docs/ruby_api.md +45 -0
  26. data/docs/ruby_parser_translation.md +19 -0
  27. data/docs/serialization.md +230 -0
  28. data/docs/testing.md +72 -0
  29. data/ext/prism/api_node.c +7005 -0
  30. data/ext/prism/extconf.rb +126 -0
  31. data/ext/prism/extension.c +1783 -0
  32. data/ext/prism/extension.h +19 -0
  33. data/include/prism/arena.h +37 -0
  34. data/include/prism/ast.h +10371 -0
  35. data/include/prism/buffer.h +52 -0
  36. data/include/prism/comments.h +55 -0
  37. data/include/prism/compiler/accel.h +24 -0
  38. data/include/prism/compiler/align.h +36 -0
  39. data/include/prism/compiler/assume.h +25 -0
  40. data/include/prism/compiler/exported.h +24 -0
  41. data/include/prism/compiler/fallthrough.h +22 -0
  42. data/include/prism/compiler/filesystem.h +32 -0
  43. data/include/prism/compiler/flex_array.h +19 -0
  44. data/include/prism/compiler/force_inline.h +21 -0
  45. data/include/prism/compiler/format.h +25 -0
  46. data/include/prism/compiler/inline.h +17 -0
  47. data/include/prism/compiler/nodiscard.h +22 -0
  48. data/include/prism/compiler/nonnull.h +18 -0
  49. data/include/prism/compiler/unused.h +18 -0
  50. data/include/prism/constant_pool.h +81 -0
  51. data/include/prism/diagnostic.h +93 -0
  52. data/include/prism/errors_format.h +53 -0
  53. data/include/prism/excludes.h +29 -0
  54. data/include/prism/integer.h +41 -0
  55. data/include/prism/internal/allocator.h +68 -0
  56. data/include/prism/internal/allocator_debug.h +88 -0
  57. data/include/prism/internal/arena.h +108 -0
  58. data/include/prism/internal/bit.h +42 -0
  59. data/include/prism/internal/buffer.h +91 -0
  60. data/include/prism/internal/char.h +145 -0
  61. data/include/prism/internal/comments.h +53 -0
  62. data/include/prism/internal/constant_pool.h +152 -0
  63. data/include/prism/internal/diagnostic.h +389 -0
  64. data/include/prism/internal/encoding.h +242 -0
  65. data/include/prism/internal/integer.h +68 -0
  66. data/include/prism/internal/isinf.h +16 -0
  67. data/include/prism/internal/line_offset_list.h +34 -0
  68. data/include/prism/internal/list.h +62 -0
  69. data/include/prism/internal/magic_comments.h +23 -0
  70. data/include/prism/internal/memchr.h +15 -0
  71. data/include/prism/internal/node.h +38 -0
  72. data/include/prism/internal/options.h +232 -0
  73. data/include/prism/internal/parser.h +984 -0
  74. data/include/prism/internal/regexp.h +26 -0
  75. data/include/prism/internal/serialize.h +39 -0
  76. data/include/prism/internal/source.h +72 -0
  77. data/include/prism/internal/static_literals.h +100 -0
  78. data/include/prism/internal/stringy.h +35 -0
  79. data/include/prism/internal/strncasecmp.h +18 -0
  80. data/include/prism/internal/strpbrk.h +33 -0
  81. data/include/prism/internal/tokens.h +11 -0
  82. data/include/prism/json.h +32 -0
  83. data/include/prism/line_offset_list.h +61 -0
  84. data/include/prism/magic_comments.h +35 -0
  85. data/include/prism/node.h +94 -0
  86. data/include/prism/options.h +354 -0
  87. data/include/prism/parser.h +404 -0
  88. data/include/prism/prettyprint.h +31 -0
  89. data/include/prism/serialize.h +115 -0
  90. data/include/prism/source.h +155 -0
  91. data/include/prism/stream.h +28 -0
  92. data/include/prism/string_query.h +63 -0
  93. data/include/prism/stringy.h +72 -0
  94. data/include/prism/version.h +38 -0
  95. data/include/prism.h +131 -0
  96. data/lib/prism/3.3/prism.so +0 -0
  97. data/lib/prism/3.4/prism.so +0 -0
  98. data/lib/prism/4.0/prism.so +0 -0
  99. data/lib/prism/compiler.rb +815 -0
  100. data/lib/prism/desugar_compiler.rb +463 -0
  101. data/lib/prism/dispatcher.rb +2383 -0
  102. data/lib/prism/dot_visitor.rb +4848 -0
  103. data/lib/prism/dsl.rb +1369 -0
  104. data/lib/prism/ffi.rb +740 -0
  105. data/lib/prism/inspect_visitor.rb +2425 -0
  106. data/lib/prism/lex_compat.rb +953 -0
  107. data/lib/prism/mutation_compiler.rb +780 -0
  108. data/lib/prism/node.rb +33204 -0
  109. data/lib/prism/node_ext.rb +504 -0
  110. data/lib/prism/node_find.rb +215 -0
  111. data/lib/prism/parse_result/errors.rb +72 -0
  112. data/lib/prism/parse_result/newlines.rb +423 -0
  113. data/lib/prism/parse_result.rb +1221 -0
  114. data/lib/prism/pattern.rb +314 -0
  115. data/lib/prism/polyfill/append_as_bytes.rb +15 -0
  116. data/lib/prism/polyfill/byteindex.rb +13 -0
  117. data/lib/prism/polyfill/scan_byte.rb +14 -0
  118. data/lib/prism/polyfill/unpack1.rb +14 -0
  119. data/lib/prism/polyfill/warn.rb +36 -0
  120. data/lib/prism/reflection.rb +427 -0
  121. data/lib/prism/relocation.rb +567 -0
  122. data/lib/prism/serialize.rb +5308 -0
  123. data/lib/prism/string_query.rb +46 -0
  124. data/lib/prism/translation/parser/builder.rb +70 -0
  125. data/lib/prism/translation/parser/compiler.rb +2226 -0
  126. data/lib/prism/translation/parser/lexer.rb +769 -0
  127. data/lib/prism/translation/parser.rb +376 -0
  128. data/lib/prism/translation/parser_current.rb +26 -0
  129. data/lib/prism/translation/parser_versions.rb +36 -0
  130. data/lib/prism/translation/ripper/filter.rb +53 -0
  131. data/lib/prism/translation/ripper/lexer.rb +133 -0
  132. data/lib/prism/translation/ripper/sexp.rb +118 -0
  133. data/lib/prism/translation/ripper/shim.rb +7 -0
  134. data/lib/prism/translation/ripper.rb +4278 -0
  135. data/lib/prism/translation/ruby_parser.rb +1721 -0
  136. data/lib/prism/translation.rb +20 -0
  137. data/lib/prism/visitor.rb +1440 -0
  138. data/lib/prism.rb +168 -0
  139. data/prism.gemspec +234 -0
  140. data/rbi/generated/prism/compiler.rbi +489 -0
  141. data/rbi/generated/prism/desugar_compiler.rbi +306 -0
  142. data/rbi/generated/prism/dispatcher.rbi +1138 -0
  143. data/rbi/generated/prism/dot_visitor.rbi +618 -0
  144. data/rbi/generated/prism/dsl.rbi +751 -0
  145. data/rbi/generated/prism/inspect_visitor.rbi +503 -0
  146. data/rbi/generated/prism/lex_compat.rbi +162 -0
  147. data/rbi/generated/prism/mutation_compiler.rbi +464 -0
  148. data/rbi/generated/prism/node.rbi +13681 -0
  149. data/rbi/generated/prism/node_ext.rbi +259 -0
  150. data/rbi/generated/prism/node_find.rbi +79 -0
  151. data/rbi/generated/prism/parse_result/errors.rbi +21 -0
  152. data/rbi/generated/prism/parse_result/newlines.rbi +208 -0
  153. data/rbi/generated/prism/parse_result.rbi +764 -0
  154. data/rbi/generated/prism/pattern.rbi +134 -0
  155. data/rbi/generated/prism/reflection.rbi +89 -0
  156. data/rbi/generated/prism/relocation.rbi +329 -0
  157. data/rbi/generated/prism/serialize.rbi +181 -0
  158. data/rbi/generated/prism/string_query.rbi +36 -0
  159. data/rbi/generated/prism/translation.rbi +7 -0
  160. data/rbi/generated/prism/visitor.rbi +650 -0
  161. data/rbi/generated/prism.rbi +86 -0
  162. data/rbi/prism/translation/parser.rbi +11 -0
  163. data/rbi/prism/translation/parser_versions.rbi +28 -0
  164. data/rbi/prism/translation/ripper.rbi +15 -0
  165. data/rbi/rubyvm/node_find.rbi +14 -0
  166. data/sig/generated/prism/compiler.rbs +492 -0
  167. data/sig/generated/prism/desugar_compiler.rbs +305 -0
  168. data/sig/generated/prism/dispatcher.rbs +1292 -0
  169. data/sig/generated/prism/dot_visitor.rbs +635 -0
  170. data/sig/generated/prism/dsl.rbs +928 -0
  171. data/sig/generated/prism/inspect_visitor.rbs +509 -0
  172. data/sig/generated/prism/lex_compat.rbs +166 -0
  173. data/sig/generated/prism/mutation_compiler.rbs +464 -0
  174. data/sig/generated/prism/node.rbs +20160 -0
  175. data/sig/generated/prism/node_ext.rbs +290 -0
  176. data/sig/generated/prism/node_find.rbs +90 -0
  177. data/sig/generated/prism/parse_result/errors.rbs +22 -0
  178. data/sig/generated/prism/parse_result/newlines.rbs +223 -0
  179. data/sig/generated/prism/parse_result.rbs +859 -0
  180. data/sig/generated/prism/pattern.rbs +156 -0
  181. data/sig/generated/prism/reflection.rbs +101 -0
  182. data/sig/generated/prism/relocation.rbs +428 -0
  183. data/sig/generated/prism/serialize.rbs +195 -0
  184. data/sig/generated/prism/string_query.rbs +36 -0
  185. data/sig/generated/prism/translation.rbs +8 -0
  186. data/sig/generated/prism/visitor.rbs +1111 -0
  187. data/sig/generated/prism.rbs +84 -0
  188. data/sig/manifest.yaml +2 -0
  189. data/src/arena.c +117 -0
  190. data/src/buffer.c +380 -0
  191. data/src/char.c +289 -0
  192. data/src/comments.c +454 -0
  193. data/src/constant_pool.c +406 -0
  194. data/src/diagnostic.c +886 -0
  195. data/src/encoding.c +5345 -0
  196. data/src/errors_format.c +519 -0
  197. data/src/integer.c +681 -0
  198. data/src/json.c +5733 -0
  199. data/src/line_offset_list.c +100 -0
  200. data/src/list.c +24 -0
  201. data/src/memchr.c +37 -0
  202. data/src/node.c +4515 -0
  203. data/src/options.c +451 -0
  204. data/src/parser.c +349 -0
  205. data/src/prettyprint.c +9024 -0
  206. data/src/prism.c +23739 -0
  207. data/src/regexp.c +1706 -0
  208. data/src/serialize.c +2309 -0
  209. data/src/source.c +518 -0
  210. data/src/static_literals.c +685 -0
  211. data/src/string_query.c +166 -0
  212. data/src/stringy.c +91 -0
  213. data/src/strncasecmp.c +37 -0
  214. data/src/strpbrk.c +447 -0
  215. data/src/tokens.c +724 -0
  216. metadata +259 -0
@@ -0,0 +1,503 @@
1
+ # typed: true
2
+
3
+ module Prism
4
+ # This visitor is responsible for composing the strings that get returned by
5
+ # the various #inspect methods defined on each of the nodes.
6
+ class InspectVisitor < Visitor
7
+ # Most of the time, we can simply pass down the indent to the next node.
8
+ # However, when we are inside a list we want some extra special formatting
9
+ # when we hit an element in that list. In this case, we have a special
10
+ # command that replaces the subsequent indent with the given value.
11
+ class Replace
12
+ sig { returns(String) }
13
+ attr_reader :value
14
+
15
+ sig { params(value: String).void }
16
+ def initialize(value); end
17
+ end
18
+
19
+ # The current prefix string.
20
+ sig { returns(String) }
21
+ attr_reader :indent
22
+
23
+ # The list of commands that we need to execute in order to compose the
24
+ # final string.
25
+ sig { returns(T::Array[[::T.any(String, Node, Replace), String]]) }
26
+ attr_reader :commands
27
+
28
+ sig { params(indent: String).void }
29
+ def initialize(indent = T.unsafe(nil)); end
30
+
31
+ # Compose an inspect string for the given node.
32
+ sig { params(node: Node).returns(String) }
33
+ def self.compose(node); end
34
+
35
+ # Compose the final string.
36
+ sig { returns(String) }
37
+ def compose; end
38
+
39
+ sig { params(node: AliasGlobalVariableNode).void }
40
+ def visit_alias_global_variable_node(node); end
41
+
42
+ sig { params(node: AliasMethodNode).void }
43
+ def visit_alias_method_node(node); end
44
+
45
+ sig { params(node: AlternationPatternNode).void }
46
+ def visit_alternation_pattern_node(node); end
47
+
48
+ sig { params(node: AndNode).void }
49
+ def visit_and_node(node); end
50
+
51
+ sig { params(node: ArgumentsNode).void }
52
+ def visit_arguments_node(node); end
53
+
54
+ sig { params(node: ArrayNode).void }
55
+ def visit_array_node(node); end
56
+
57
+ sig { params(node: ArrayPatternNode).void }
58
+ def visit_array_pattern_node(node); end
59
+
60
+ sig { params(node: AssocNode).void }
61
+ def visit_assoc_node(node); end
62
+
63
+ sig { params(node: AssocSplatNode).void }
64
+ def visit_assoc_splat_node(node); end
65
+
66
+ sig { params(node: BackReferenceReadNode).void }
67
+ def visit_back_reference_read_node(node); end
68
+
69
+ sig { params(node: BeginNode).void }
70
+ def visit_begin_node(node); end
71
+
72
+ sig { params(node: BlockArgumentNode).void }
73
+ def visit_block_argument_node(node); end
74
+
75
+ sig { params(node: BlockLocalVariableNode).void }
76
+ def visit_block_local_variable_node(node); end
77
+
78
+ sig { params(node: BlockNode).void }
79
+ def visit_block_node(node); end
80
+
81
+ sig { params(node: BlockParameterNode).void }
82
+ def visit_block_parameter_node(node); end
83
+
84
+ sig { params(node: BlockParametersNode).void }
85
+ def visit_block_parameters_node(node); end
86
+
87
+ sig { params(node: BreakNode).void }
88
+ def visit_break_node(node); end
89
+
90
+ sig { params(node: CallAndWriteNode).void }
91
+ def visit_call_and_write_node(node); end
92
+
93
+ sig { params(node: CallNode).void }
94
+ def visit_call_node(node); end
95
+
96
+ sig { params(node: CallOperatorWriteNode).void }
97
+ def visit_call_operator_write_node(node); end
98
+
99
+ sig { params(node: CallOrWriteNode).void }
100
+ def visit_call_or_write_node(node); end
101
+
102
+ sig { params(node: CallTargetNode).void }
103
+ def visit_call_target_node(node); end
104
+
105
+ sig { params(node: CapturePatternNode).void }
106
+ def visit_capture_pattern_node(node); end
107
+
108
+ sig { params(node: CaseMatchNode).void }
109
+ def visit_case_match_node(node); end
110
+
111
+ sig { params(node: CaseNode).void }
112
+ def visit_case_node(node); end
113
+
114
+ sig { params(node: ClassNode).void }
115
+ def visit_class_node(node); end
116
+
117
+ sig { params(node: ClassVariableAndWriteNode).void }
118
+ def visit_class_variable_and_write_node(node); end
119
+
120
+ sig { params(node: ClassVariableOperatorWriteNode).void }
121
+ def visit_class_variable_operator_write_node(node); end
122
+
123
+ sig { params(node: ClassVariableOrWriteNode).void }
124
+ def visit_class_variable_or_write_node(node); end
125
+
126
+ sig { params(node: ClassVariableReadNode).void }
127
+ def visit_class_variable_read_node(node); end
128
+
129
+ sig { params(node: ClassVariableTargetNode).void }
130
+ def visit_class_variable_target_node(node); end
131
+
132
+ sig { params(node: ClassVariableWriteNode).void }
133
+ def visit_class_variable_write_node(node); end
134
+
135
+ sig { params(node: ConstantAndWriteNode).void }
136
+ def visit_constant_and_write_node(node); end
137
+
138
+ sig { params(node: ConstantOperatorWriteNode).void }
139
+ def visit_constant_operator_write_node(node); end
140
+
141
+ sig { params(node: ConstantOrWriteNode).void }
142
+ def visit_constant_or_write_node(node); end
143
+
144
+ sig { params(node: ConstantPathAndWriteNode).void }
145
+ def visit_constant_path_and_write_node(node); end
146
+
147
+ sig { params(node: ConstantPathNode).void }
148
+ def visit_constant_path_node(node); end
149
+
150
+ sig { params(node: ConstantPathOperatorWriteNode).void }
151
+ def visit_constant_path_operator_write_node(node); end
152
+
153
+ sig { params(node: ConstantPathOrWriteNode).void }
154
+ def visit_constant_path_or_write_node(node); end
155
+
156
+ sig { params(node: ConstantPathTargetNode).void }
157
+ def visit_constant_path_target_node(node); end
158
+
159
+ sig { params(node: ConstantPathWriteNode).void }
160
+ def visit_constant_path_write_node(node); end
161
+
162
+ sig { params(node: ConstantReadNode).void }
163
+ def visit_constant_read_node(node); end
164
+
165
+ sig { params(node: ConstantTargetNode).void }
166
+ def visit_constant_target_node(node); end
167
+
168
+ sig { params(node: ConstantWriteNode).void }
169
+ def visit_constant_write_node(node); end
170
+
171
+ sig { params(node: DefNode).void }
172
+ def visit_def_node(node); end
173
+
174
+ sig { params(node: DefinedNode).void }
175
+ def visit_defined_node(node); end
176
+
177
+ sig { params(node: ElseNode).void }
178
+ def visit_else_node(node); end
179
+
180
+ sig { params(node: EmbeddedStatementsNode).void }
181
+ def visit_embedded_statements_node(node); end
182
+
183
+ sig { params(node: EmbeddedVariableNode).void }
184
+ def visit_embedded_variable_node(node); end
185
+
186
+ sig { params(node: EnsureNode).void }
187
+ def visit_ensure_node(node); end
188
+
189
+ sig { params(node: ErrorRecoveryNode).void }
190
+ def visit_error_recovery_node(node); end
191
+
192
+ sig { params(node: FalseNode).void }
193
+ def visit_false_node(node); end
194
+
195
+ sig { params(node: FindPatternNode).void }
196
+ def visit_find_pattern_node(node); end
197
+
198
+ sig { params(node: FlipFlopNode).void }
199
+ def visit_flip_flop_node(node); end
200
+
201
+ sig { params(node: FloatNode).void }
202
+ def visit_float_node(node); end
203
+
204
+ sig { params(node: ForNode).void }
205
+ def visit_for_node(node); end
206
+
207
+ sig { params(node: ForwardingArgumentsNode).void }
208
+ def visit_forwarding_arguments_node(node); end
209
+
210
+ sig { params(node: ForwardingParameterNode).void }
211
+ def visit_forwarding_parameter_node(node); end
212
+
213
+ sig { params(node: ForwardingSuperNode).void }
214
+ def visit_forwarding_super_node(node); end
215
+
216
+ sig { params(node: GlobalVariableAndWriteNode).void }
217
+ def visit_global_variable_and_write_node(node); end
218
+
219
+ sig { params(node: GlobalVariableOperatorWriteNode).void }
220
+ def visit_global_variable_operator_write_node(node); end
221
+
222
+ sig { params(node: GlobalVariableOrWriteNode).void }
223
+ def visit_global_variable_or_write_node(node); end
224
+
225
+ sig { params(node: GlobalVariableReadNode).void }
226
+ def visit_global_variable_read_node(node); end
227
+
228
+ sig { params(node: GlobalVariableTargetNode).void }
229
+ def visit_global_variable_target_node(node); end
230
+
231
+ sig { params(node: GlobalVariableWriteNode).void }
232
+ def visit_global_variable_write_node(node); end
233
+
234
+ sig { params(node: HashNode).void }
235
+ def visit_hash_node(node); end
236
+
237
+ sig { params(node: HashPatternNode).void }
238
+ def visit_hash_pattern_node(node); end
239
+
240
+ sig { params(node: IfNode).void }
241
+ def visit_if_node(node); end
242
+
243
+ sig { params(node: ImaginaryNode).void }
244
+ def visit_imaginary_node(node); end
245
+
246
+ sig { params(node: ImplicitNode).void }
247
+ def visit_implicit_node(node); end
248
+
249
+ sig { params(node: ImplicitRestNode).void }
250
+ def visit_implicit_rest_node(node); end
251
+
252
+ sig { params(node: InNode).void }
253
+ def visit_in_node(node); end
254
+
255
+ sig { params(node: IndexAndWriteNode).void }
256
+ def visit_index_and_write_node(node); end
257
+
258
+ sig { params(node: IndexOperatorWriteNode).void }
259
+ def visit_index_operator_write_node(node); end
260
+
261
+ sig { params(node: IndexOrWriteNode).void }
262
+ def visit_index_or_write_node(node); end
263
+
264
+ sig { params(node: IndexTargetNode).void }
265
+ def visit_index_target_node(node); end
266
+
267
+ sig { params(node: InstanceVariableAndWriteNode).void }
268
+ def visit_instance_variable_and_write_node(node); end
269
+
270
+ sig { params(node: InstanceVariableOperatorWriteNode).void }
271
+ def visit_instance_variable_operator_write_node(node); end
272
+
273
+ sig { params(node: InstanceVariableOrWriteNode).void }
274
+ def visit_instance_variable_or_write_node(node); end
275
+
276
+ sig { params(node: InstanceVariableReadNode).void }
277
+ def visit_instance_variable_read_node(node); end
278
+
279
+ sig { params(node: InstanceVariableTargetNode).void }
280
+ def visit_instance_variable_target_node(node); end
281
+
282
+ sig { params(node: InstanceVariableWriteNode).void }
283
+ def visit_instance_variable_write_node(node); end
284
+
285
+ sig { params(node: IntegerNode).void }
286
+ def visit_integer_node(node); end
287
+
288
+ sig { params(node: InterpolatedMatchLastLineNode).void }
289
+ def visit_interpolated_match_last_line_node(node); end
290
+
291
+ sig { params(node: InterpolatedRegularExpressionNode).void }
292
+ def visit_interpolated_regular_expression_node(node); end
293
+
294
+ sig { params(node: InterpolatedStringNode).void }
295
+ def visit_interpolated_string_node(node); end
296
+
297
+ sig { params(node: InterpolatedSymbolNode).void }
298
+ def visit_interpolated_symbol_node(node); end
299
+
300
+ sig { params(node: InterpolatedXStringNode).void }
301
+ def visit_interpolated_x_string_node(node); end
302
+
303
+ sig { params(node: ItLocalVariableReadNode).void }
304
+ def visit_it_local_variable_read_node(node); end
305
+
306
+ sig { params(node: ItParametersNode).void }
307
+ def visit_it_parameters_node(node); end
308
+
309
+ sig { params(node: KeywordHashNode).void }
310
+ def visit_keyword_hash_node(node); end
311
+
312
+ sig { params(node: KeywordRestParameterNode).void }
313
+ def visit_keyword_rest_parameter_node(node); end
314
+
315
+ sig { params(node: LambdaNode).void }
316
+ def visit_lambda_node(node); end
317
+
318
+ sig { params(node: LocalVariableAndWriteNode).void }
319
+ def visit_local_variable_and_write_node(node); end
320
+
321
+ sig { params(node: LocalVariableOperatorWriteNode).void }
322
+ def visit_local_variable_operator_write_node(node); end
323
+
324
+ sig { params(node: LocalVariableOrWriteNode).void }
325
+ def visit_local_variable_or_write_node(node); end
326
+
327
+ sig { params(node: LocalVariableReadNode).void }
328
+ def visit_local_variable_read_node(node); end
329
+
330
+ sig { params(node: LocalVariableTargetNode).void }
331
+ def visit_local_variable_target_node(node); end
332
+
333
+ sig { params(node: LocalVariableWriteNode).void }
334
+ def visit_local_variable_write_node(node); end
335
+
336
+ sig { params(node: MatchLastLineNode).void }
337
+ def visit_match_last_line_node(node); end
338
+
339
+ sig { params(node: MatchPredicateNode).void }
340
+ def visit_match_predicate_node(node); end
341
+
342
+ sig { params(node: MatchRequiredNode).void }
343
+ def visit_match_required_node(node); end
344
+
345
+ sig { params(node: MatchWriteNode).void }
346
+ def visit_match_write_node(node); end
347
+
348
+ sig { params(node: ModuleNode).void }
349
+ def visit_module_node(node); end
350
+
351
+ sig { params(node: MultiTargetNode).void }
352
+ def visit_multi_target_node(node); end
353
+
354
+ sig { params(node: MultiWriteNode).void }
355
+ def visit_multi_write_node(node); end
356
+
357
+ sig { params(node: NextNode).void }
358
+ def visit_next_node(node); end
359
+
360
+ sig { params(node: NilNode).void }
361
+ def visit_nil_node(node); end
362
+
363
+ sig { params(node: NoBlockParameterNode).void }
364
+ def visit_no_block_parameter_node(node); end
365
+
366
+ sig { params(node: NoKeywordsParameterNode).void }
367
+ def visit_no_keywords_parameter_node(node); end
368
+
369
+ sig { params(node: NumberedParametersNode).void }
370
+ def visit_numbered_parameters_node(node); end
371
+
372
+ sig { params(node: NumberedReferenceReadNode).void }
373
+ def visit_numbered_reference_read_node(node); end
374
+
375
+ sig { params(node: OptionalKeywordParameterNode).void }
376
+ def visit_optional_keyword_parameter_node(node); end
377
+
378
+ sig { params(node: OptionalParameterNode).void }
379
+ def visit_optional_parameter_node(node); end
380
+
381
+ sig { params(node: OrNode).void }
382
+ def visit_or_node(node); end
383
+
384
+ sig { params(node: ParametersNode).void }
385
+ def visit_parameters_node(node); end
386
+
387
+ sig { params(node: ParenthesesNode).void }
388
+ def visit_parentheses_node(node); end
389
+
390
+ sig { params(node: PinnedExpressionNode).void }
391
+ def visit_pinned_expression_node(node); end
392
+
393
+ sig { params(node: PinnedVariableNode).void }
394
+ def visit_pinned_variable_node(node); end
395
+
396
+ sig { params(node: PostExecutionNode).void }
397
+ def visit_post_execution_node(node); end
398
+
399
+ sig { params(node: PreExecutionNode).void }
400
+ def visit_pre_execution_node(node); end
401
+
402
+ sig { params(node: ProgramNode).void }
403
+ def visit_program_node(node); end
404
+
405
+ sig { params(node: RangeNode).void }
406
+ def visit_range_node(node); end
407
+
408
+ sig { params(node: RationalNode).void }
409
+ def visit_rational_node(node); end
410
+
411
+ sig { params(node: RedoNode).void }
412
+ def visit_redo_node(node); end
413
+
414
+ sig { params(node: RegularExpressionNode).void }
415
+ def visit_regular_expression_node(node); end
416
+
417
+ sig { params(node: RequiredKeywordParameterNode).void }
418
+ def visit_required_keyword_parameter_node(node); end
419
+
420
+ sig { params(node: RequiredParameterNode).void }
421
+ def visit_required_parameter_node(node); end
422
+
423
+ sig { params(node: RescueModifierNode).void }
424
+ def visit_rescue_modifier_node(node); end
425
+
426
+ sig { params(node: RescueNode).void }
427
+ def visit_rescue_node(node); end
428
+
429
+ sig { params(node: RestParameterNode).void }
430
+ def visit_rest_parameter_node(node); end
431
+
432
+ sig { params(node: RetryNode).void }
433
+ def visit_retry_node(node); end
434
+
435
+ sig { params(node: ReturnNode).void }
436
+ def visit_return_node(node); end
437
+
438
+ sig { params(node: SelfNode).void }
439
+ def visit_self_node(node); end
440
+
441
+ sig { params(node: ShareableConstantNode).void }
442
+ def visit_shareable_constant_node(node); end
443
+
444
+ sig { params(node: SingletonClassNode).void }
445
+ def visit_singleton_class_node(node); end
446
+
447
+ sig { params(node: SourceEncodingNode).void }
448
+ def visit_source_encoding_node(node); end
449
+
450
+ sig { params(node: SourceFileNode).void }
451
+ def visit_source_file_node(node); end
452
+
453
+ sig { params(node: SourceLineNode).void }
454
+ def visit_source_line_node(node); end
455
+
456
+ sig { params(node: SplatNode).void }
457
+ def visit_splat_node(node); end
458
+
459
+ sig { params(node: StatementsNode).void }
460
+ def visit_statements_node(node); end
461
+
462
+ sig { params(node: StringNode).void }
463
+ def visit_string_node(node); end
464
+
465
+ sig { params(node: SuperNode).void }
466
+ def visit_super_node(node); end
467
+
468
+ sig { params(node: SymbolNode).void }
469
+ def visit_symbol_node(node); end
470
+
471
+ sig { params(node: TrueNode).void }
472
+ def visit_true_node(node); end
473
+
474
+ sig { params(node: UndefNode).void }
475
+ def visit_undef_node(node); end
476
+
477
+ sig { params(node: UnlessNode).void }
478
+ def visit_unless_node(node); end
479
+
480
+ sig { params(node: UntilNode).void }
481
+ def visit_until_node(node); end
482
+
483
+ sig { params(node: WhenNode).void }
484
+ def visit_when_node(node); end
485
+
486
+ sig { params(node: WhileNode).void }
487
+ def visit_while_node(node); end
488
+
489
+ sig { params(node: XStringNode).void }
490
+ def visit_x_string_node(node); end
491
+
492
+ sig { params(node: YieldNode).void }
493
+ def visit_yield_node(node); end
494
+
495
+ # Compose a header for the given node.
496
+ sig { params(name: String, node: Node).returns(String) }
497
+ private def inspect_node(name, node); end
498
+
499
+ # Compose a string representing the given inner location field.
500
+ sig { params(location: ::T.nilable(Location)).returns(String) }
501
+ private def inspect_location(location); end
502
+ end
503
+ end
@@ -0,0 +1,162 @@
1
+ # typed: true
2
+
3
+ module Prism
4
+ module Translation
5
+ class Ripper
6
+ EXPR_NONE = T.let(nil, Integer)
7
+ EXPR_BEG = T.let(nil, Integer)
8
+ EXPR_MID = T.let(nil, Integer)
9
+ EXPR_END = T.let(nil, Integer)
10
+ EXPR_CLASS = T.let(nil, Integer)
11
+ EXPR_VALUE = T.let(nil, Integer)
12
+ EXPR_ARG = T.let(nil, Integer)
13
+ EXPR_CMDARG = T.let(nil, Integer)
14
+ EXPR_ENDARG = T.let(nil, Integer)
15
+ EXPR_ENDFN = T.let(nil, Integer)
16
+
17
+ class Lexer < Ripper
18
+ class State
19
+ sig { params(value: Integer).returns(State) }
20
+ def self.[](value); end
21
+ end
22
+ end
23
+
24
+ class LineAndColumnCache
25
+ sig { params(source: Source).void }
26
+ def initialize(source); end
27
+
28
+ sig { params(byte_offset: Integer).returns([Integer, Integer]) }
29
+ def line_and_column(byte_offset); end
30
+ end
31
+ end
32
+ end
33
+
34
+ # This class is responsible for lexing the source using prism and then
35
+ # converting those tokens to be compatible with Ripper. In the vast majority
36
+ # of cases, this is a one-to-one mapping of the token type. Everything else
37
+ # generally lines up. However, there are a few cases that require special
38
+ # handling.
39
+ class LexCompat
40
+ # A result class specialized for holding tokens produced by the lexer.
41
+ class Result < Prism::Result
42
+ # The list of tokens that were produced by the lexer.
43
+ sig { returns(T::Array[[[Integer, Integer], Symbol, String, ::T.untyped]]) }
44
+ attr_reader :value
45
+
46
+ # Create a new lex compat result object with the given values.
47
+ sig { params(value: T::Array[[[Integer, Integer], Symbol, String, ::T.untyped]], magic_comments: T::Array[MagicComment], data_loc: ::T.nilable(Location), errors: T::Array[ParseError], warnings: T::Array[ParseWarning], continuable: T::Boolean, source: Source).void }
48
+ def initialize(value, magic_comments, data_loc, errors, warnings, continuable, source); end
49
+
50
+ # Implement the hash pattern matching interface for Result.
51
+ sig { params(keys: ::T.nilable(T::Array[Symbol])).returns(T::Hash[Symbol, ::T.untyped]) }
52
+ def deconstruct_keys(keys); end
53
+ end
54
+
55
+ # This is a mapping of prism token types to Ripper token types. This is a
56
+ # many-to-one mapping because we split up our token types, whereas Ripper
57
+ # tends to group them.
58
+ RIPPER = T.let(nil, ::T.untyped)
59
+
60
+ # A heredoc in this case is a list of tokens that belong to the body of the
61
+ # heredoc that should be appended onto the list of tokens when the heredoc
62
+ # closes.
63
+ module Heredoc
64
+ # Heredocs that are no dash or tilde heredocs are just a list of tokens.
65
+ # We need to keep them around so that we can insert them in the correct
66
+ # order back into the token stream and set the state of the last token to
67
+ # the state that the heredoc was opened in.
68
+ class PlainHeredoc
69
+ sig { returns(T::Array[[[Integer, Integer], Symbol, String, ::T.untyped]]) }
70
+ attr_reader :tokens
71
+
72
+ sig { void }
73
+ def initialize; end
74
+
75
+ sig { params(token: [[Integer, Integer], Symbol, String, ::T.untyped]).void }
76
+ def <<(token); end
77
+
78
+ sig { returns(T::Array[[[Integer, Integer], Symbol, String, ::T.untyped]]) }
79
+ def to_a; end
80
+ end
81
+
82
+ # Dash heredocs are a little more complicated. They are a list of tokens
83
+ # that need to be split on "\\\n" to mimic Ripper's behavior. We also need
84
+ # to keep track of the state that the heredoc was opened in.
85
+ class DashHeredoc
86
+ sig { returns(T::Boolean) }
87
+ attr_reader :split
88
+
89
+ sig { returns(T::Array[[[Integer, Integer], Symbol, String, ::T.untyped]]) }
90
+ attr_reader :tokens
91
+
92
+ sig { params(split: T::Boolean).void }
93
+ def initialize(split); end
94
+
95
+ sig { params(token: [[Integer, Integer], Symbol, String, ::T.untyped]).void }
96
+ def <<(token); end
97
+
98
+ sig { returns(T::Array[[[Integer, Integer], Symbol, String, ::T.untyped]]) }
99
+ def to_a; end
100
+ end
101
+
102
+ # Heredocs that are dedenting heredocs are a little more complicated.
103
+ # Ripper outputs on_ignored_sp tokens for the whitespace that is being
104
+ # removed from the output. prism only modifies the node itself and keeps
105
+ # the token the same. This simplifies prism, but makes comparing against
106
+ # Ripper much harder because there is a length mismatch.
107
+ #
108
+ # Fortunately, we already have to pull out the heredoc tokens in order to
109
+ # insert them into the stream in the correct order. As such, we can do
110
+ # some extra manipulation on the tokens to make them match Ripper's
111
+ # output by mirroring the dedent logic that Ripper uses.
112
+ class DedentingHeredoc
113
+ TAB_WIDTH = T.let(nil, Integer)
114
+
115
+ sig { returns(T::Array[[[Integer, Integer], Symbol, String, ::T.untyped]]) }
116
+ attr_reader :tokens
117
+
118
+ sig { returns(T::Boolean) }
119
+ attr_reader :dedent_next
120
+
121
+ sig { returns(::T.nilable(Integer)) }
122
+ attr_reader :dedent
123
+
124
+ sig { returns(Integer) }
125
+ attr_reader :embexpr_balance
126
+
127
+ sig { void }
128
+ def initialize; end
129
+
130
+ # As tokens are coming in, we track the minimum amount of common leading
131
+ # whitespace on plain string content tokens. This allows us to later
132
+ # remove that amount of whitespace from the beginning of each line.
133
+ sig { params(token: [[Integer, Integer], Symbol, String, ::T.untyped]).void }
134
+ def <<(token); end
135
+
136
+ sig { returns(T::Array[[[Integer, Integer], Symbol, String, ::T.untyped]]) }
137
+ def to_a; end
138
+ end
139
+
140
+ # Here we will split between the two types of heredocs and return the
141
+ # object that will store their tokens.
142
+ sig { params(opening: [[Integer, Integer], Symbol, String, ::T.untyped]).returns(::T.any(PlainHeredoc, DashHeredoc, DedentingHeredoc)) }
143
+ def self.build(opening); end
144
+ end
145
+
146
+ # In previous versions of Ruby, Ripper wouldn't flush the bom before the
147
+ # first token, so we had to have a hack in place to account for that.
148
+ BOM_FLUSHED = T.let(nil, ::T.untyped)
149
+
150
+ sig { returns(T::Hash[Symbol, ::T.untyped]) }
151
+ attr_reader :options
152
+
153
+ sig { params(source: String, options: ::T.untyped).void }
154
+ def initialize(source, **options); end
155
+
156
+ sig { returns(Result) }
157
+ def result; end
158
+
159
+ sig { params(tokens: T::Array[[[Integer, Integer], Symbol, String, ::T.untyped]], source: Source, data_loc: ::T.nilable(Location), bom: T::Boolean, eof_token: ::T.nilable(Token)).returns(T::Array[[[Integer, Integer], Symbol, String, ::T.untyped]]) }
160
+ private def post_process_tokens(tokens, source, data_loc, bom, eof_token); end
161
+ end
162
+ end