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.
- checksums.yaml +7 -0
- data/BSDmakefile +58 -0
- data/CHANGELOG.md +870 -0
- data/CODE_OF_CONDUCT.md +76 -0
- data/CONTRIBUTING.md +58 -0
- data/LICENSE.md +7 -0
- data/Makefile +145 -0
- data/README.md +81 -0
- data/config.yml +4752 -0
- data/docs/build_system.md +119 -0
- data/docs/configuration.md +69 -0
- data/docs/cruby_compilation.md +27 -0
- data/docs/design.md +53 -0
- data/docs/encoding.md +121 -0
- data/docs/fuzzing.md +81 -0
- data/docs/heredocs.md +36 -0
- data/docs/javascript.md +133 -0
- data/docs/local_variable_depth.md +229 -0
- data/docs/mapping.md +117 -0
- data/docs/parser_translation.md +24 -0
- data/docs/parsing_rules.md +22 -0
- data/docs/releasing.md +147 -0
- data/docs/relocation.md +32 -0
- data/docs/ripper_translation.md +63 -0
- data/docs/ruby_api.md +45 -0
- data/docs/ruby_parser_translation.md +19 -0
- data/docs/serialization.md +230 -0
- data/docs/testing.md +72 -0
- data/ext/prism/api_node.c +7005 -0
- data/ext/prism/extconf.rb +126 -0
- data/ext/prism/extension.c +1783 -0
- data/ext/prism/extension.h +19 -0
- data/include/prism/arena.h +37 -0
- data/include/prism/ast.h +10371 -0
- data/include/prism/buffer.h +52 -0
- data/include/prism/comments.h +55 -0
- data/include/prism/compiler/accel.h +24 -0
- data/include/prism/compiler/align.h +36 -0
- data/include/prism/compiler/assume.h +25 -0
- data/include/prism/compiler/exported.h +24 -0
- data/include/prism/compiler/fallthrough.h +22 -0
- data/include/prism/compiler/filesystem.h +32 -0
- data/include/prism/compiler/flex_array.h +19 -0
- data/include/prism/compiler/force_inline.h +21 -0
- data/include/prism/compiler/format.h +25 -0
- data/include/prism/compiler/inline.h +17 -0
- data/include/prism/compiler/nodiscard.h +22 -0
- data/include/prism/compiler/nonnull.h +18 -0
- data/include/prism/compiler/unused.h +18 -0
- data/include/prism/constant_pool.h +81 -0
- data/include/prism/diagnostic.h +93 -0
- data/include/prism/errors_format.h +53 -0
- data/include/prism/excludes.h +29 -0
- data/include/prism/integer.h +41 -0
- data/include/prism/internal/allocator.h +68 -0
- data/include/prism/internal/allocator_debug.h +88 -0
- data/include/prism/internal/arena.h +108 -0
- data/include/prism/internal/bit.h +42 -0
- data/include/prism/internal/buffer.h +91 -0
- data/include/prism/internal/char.h +145 -0
- data/include/prism/internal/comments.h +53 -0
- data/include/prism/internal/constant_pool.h +152 -0
- data/include/prism/internal/diagnostic.h +389 -0
- data/include/prism/internal/encoding.h +242 -0
- data/include/prism/internal/integer.h +68 -0
- data/include/prism/internal/isinf.h +16 -0
- data/include/prism/internal/line_offset_list.h +34 -0
- data/include/prism/internal/list.h +62 -0
- data/include/prism/internal/magic_comments.h +23 -0
- data/include/prism/internal/memchr.h +15 -0
- data/include/prism/internal/node.h +38 -0
- data/include/prism/internal/options.h +232 -0
- data/include/prism/internal/parser.h +984 -0
- data/include/prism/internal/regexp.h +26 -0
- data/include/prism/internal/serialize.h +39 -0
- data/include/prism/internal/source.h +72 -0
- data/include/prism/internal/static_literals.h +100 -0
- data/include/prism/internal/stringy.h +35 -0
- data/include/prism/internal/strncasecmp.h +18 -0
- data/include/prism/internal/strpbrk.h +33 -0
- data/include/prism/internal/tokens.h +11 -0
- data/include/prism/json.h +32 -0
- data/include/prism/line_offset_list.h +61 -0
- data/include/prism/magic_comments.h +35 -0
- data/include/prism/node.h +94 -0
- data/include/prism/options.h +354 -0
- data/include/prism/parser.h +404 -0
- data/include/prism/prettyprint.h +31 -0
- data/include/prism/serialize.h +115 -0
- data/include/prism/source.h +155 -0
- data/include/prism/stream.h +28 -0
- data/include/prism/string_query.h +63 -0
- data/include/prism/stringy.h +72 -0
- data/include/prism/version.h +38 -0
- data/include/prism.h +131 -0
- data/lib/prism/3.3/prism.so +0 -0
- data/lib/prism/3.4/prism.so +0 -0
- data/lib/prism/4.0/prism.so +0 -0
- data/lib/prism/compiler.rb +815 -0
- data/lib/prism/desugar_compiler.rb +463 -0
- data/lib/prism/dispatcher.rb +2383 -0
- data/lib/prism/dot_visitor.rb +4848 -0
- data/lib/prism/dsl.rb +1369 -0
- data/lib/prism/ffi.rb +740 -0
- data/lib/prism/inspect_visitor.rb +2425 -0
- data/lib/prism/lex_compat.rb +953 -0
- data/lib/prism/mutation_compiler.rb +780 -0
- data/lib/prism/node.rb +33204 -0
- data/lib/prism/node_ext.rb +504 -0
- data/lib/prism/node_find.rb +215 -0
- data/lib/prism/parse_result/errors.rb +72 -0
- data/lib/prism/parse_result/newlines.rb +423 -0
- data/lib/prism/parse_result.rb +1221 -0
- data/lib/prism/pattern.rb +314 -0
- data/lib/prism/polyfill/append_as_bytes.rb +15 -0
- data/lib/prism/polyfill/byteindex.rb +13 -0
- data/lib/prism/polyfill/scan_byte.rb +14 -0
- data/lib/prism/polyfill/unpack1.rb +14 -0
- data/lib/prism/polyfill/warn.rb +36 -0
- data/lib/prism/reflection.rb +427 -0
- data/lib/prism/relocation.rb +567 -0
- data/lib/prism/serialize.rb +5308 -0
- data/lib/prism/string_query.rb +46 -0
- data/lib/prism/translation/parser/builder.rb +70 -0
- data/lib/prism/translation/parser/compiler.rb +2226 -0
- data/lib/prism/translation/parser/lexer.rb +769 -0
- data/lib/prism/translation/parser.rb +376 -0
- data/lib/prism/translation/parser_current.rb +26 -0
- data/lib/prism/translation/parser_versions.rb +36 -0
- data/lib/prism/translation/ripper/filter.rb +53 -0
- data/lib/prism/translation/ripper/lexer.rb +133 -0
- data/lib/prism/translation/ripper/sexp.rb +118 -0
- data/lib/prism/translation/ripper/shim.rb +7 -0
- data/lib/prism/translation/ripper.rb +4278 -0
- data/lib/prism/translation/ruby_parser.rb +1721 -0
- data/lib/prism/translation.rb +20 -0
- data/lib/prism/visitor.rb +1440 -0
- data/lib/prism.rb +168 -0
- data/prism.gemspec +234 -0
- data/rbi/generated/prism/compiler.rbi +489 -0
- data/rbi/generated/prism/desugar_compiler.rbi +306 -0
- data/rbi/generated/prism/dispatcher.rbi +1138 -0
- data/rbi/generated/prism/dot_visitor.rbi +618 -0
- data/rbi/generated/prism/dsl.rbi +751 -0
- data/rbi/generated/prism/inspect_visitor.rbi +503 -0
- data/rbi/generated/prism/lex_compat.rbi +162 -0
- data/rbi/generated/prism/mutation_compiler.rbi +464 -0
- data/rbi/generated/prism/node.rbi +13681 -0
- data/rbi/generated/prism/node_ext.rbi +259 -0
- data/rbi/generated/prism/node_find.rbi +79 -0
- data/rbi/generated/prism/parse_result/errors.rbi +21 -0
- data/rbi/generated/prism/parse_result/newlines.rbi +208 -0
- data/rbi/generated/prism/parse_result.rbi +764 -0
- data/rbi/generated/prism/pattern.rbi +134 -0
- data/rbi/generated/prism/reflection.rbi +89 -0
- data/rbi/generated/prism/relocation.rbi +329 -0
- data/rbi/generated/prism/serialize.rbi +181 -0
- data/rbi/generated/prism/string_query.rbi +36 -0
- data/rbi/generated/prism/translation.rbi +7 -0
- data/rbi/generated/prism/visitor.rbi +650 -0
- data/rbi/generated/prism.rbi +86 -0
- data/rbi/prism/translation/parser.rbi +11 -0
- data/rbi/prism/translation/parser_versions.rbi +28 -0
- data/rbi/prism/translation/ripper.rbi +15 -0
- data/rbi/rubyvm/node_find.rbi +14 -0
- data/sig/generated/prism/compiler.rbs +492 -0
- data/sig/generated/prism/desugar_compiler.rbs +305 -0
- data/sig/generated/prism/dispatcher.rbs +1292 -0
- data/sig/generated/prism/dot_visitor.rbs +635 -0
- data/sig/generated/prism/dsl.rbs +928 -0
- data/sig/generated/prism/inspect_visitor.rbs +509 -0
- data/sig/generated/prism/lex_compat.rbs +166 -0
- data/sig/generated/prism/mutation_compiler.rbs +464 -0
- data/sig/generated/prism/node.rbs +20160 -0
- data/sig/generated/prism/node_ext.rbs +290 -0
- data/sig/generated/prism/node_find.rbs +90 -0
- data/sig/generated/prism/parse_result/errors.rbs +22 -0
- data/sig/generated/prism/parse_result/newlines.rbs +223 -0
- data/sig/generated/prism/parse_result.rbs +859 -0
- data/sig/generated/prism/pattern.rbs +156 -0
- data/sig/generated/prism/reflection.rbs +101 -0
- data/sig/generated/prism/relocation.rbs +428 -0
- data/sig/generated/prism/serialize.rbs +195 -0
- data/sig/generated/prism/string_query.rbs +36 -0
- data/sig/generated/prism/translation.rbs +8 -0
- data/sig/generated/prism/visitor.rbs +1111 -0
- data/sig/generated/prism.rbs +84 -0
- data/sig/manifest.yaml +2 -0
- data/src/arena.c +117 -0
- data/src/buffer.c +380 -0
- data/src/char.c +289 -0
- data/src/comments.c +454 -0
- data/src/constant_pool.c +406 -0
- data/src/diagnostic.c +886 -0
- data/src/encoding.c +5345 -0
- data/src/errors_format.c +519 -0
- data/src/integer.c +681 -0
- data/src/json.c +5733 -0
- data/src/line_offset_list.c +100 -0
- data/src/list.c +24 -0
- data/src/memchr.c +37 -0
- data/src/node.c +4515 -0
- data/src/options.c +451 -0
- data/src/parser.c +349 -0
- data/src/prettyprint.c +9024 -0
- data/src/prism.c +23739 -0
- data/src/regexp.c +1706 -0
- data/src/serialize.c +2309 -0
- data/src/source.c +518 -0
- data/src/static_literals.c +685 -0
- data/src/string_query.c +166 -0
- data/src/stringy.c +91 -0
- data/src/strncasecmp.c +37 -0
- data/src/strpbrk.c +447 -0
- data/src/tokens.c +724 -0
- 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
|