prism 1.4.0 → 1.5.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +23 -1
- data/Makefile +2 -1
- data/README.md +1 -0
- data/config.yml +264 -37
- data/docs/parser_translation.md +8 -23
- data/docs/ripper_translation.md +1 -1
- data/ext/prism/api_node.c +2 -0
- data/ext/prism/extension.c +14 -1
- data/ext/prism/extension.h +1 -1
- data/include/prism/ast.h +275 -49
- data/include/prism/diagnostic.h +4 -0
- data/include/prism/options.h +43 -3
- data/include/prism/regexp.h +2 -2
- data/include/prism/util/pm_buffer.h +8 -0
- data/include/prism/util/pm_integer.h +4 -0
- data/include/prism/util/pm_list.h +6 -0
- data/include/prism/util/pm_string.h +12 -2
- data/include/prism/version.h +2 -2
- data/include/prism.h +39 -14
- data/lib/prism/compiler.rb +456 -151
- data/lib/prism/desugar_compiler.rb +1 -0
- data/lib/prism/dispatcher.rb +16 -0
- data/lib/prism/dot_visitor.rb +5 -1
- data/lib/prism/dsl.rb +3 -0
- data/lib/prism/ffi.rb +17 -7
- data/lib/prism/inspect_visitor.rb +3 -0
- data/lib/prism/lex_compat.rb +1 -0
- data/lib/prism/mutation_compiler.rb +3 -0
- data/lib/prism/node.rb +506 -335
- data/lib/prism/node_ext.rb +4 -1
- data/lib/prism/pack.rb +2 -0
- data/lib/prism/parse_result/comments.rb +1 -0
- data/lib/prism/parse_result/errors.rb +1 -0
- data/lib/prism/parse_result/newlines.rb +1 -0
- data/lib/prism/parse_result.rb +1 -0
- data/lib/prism/pattern.rb +1 -0
- data/lib/prism/polyfill/scan_byte.rb +14 -0
- data/lib/prism/polyfill/warn.rb +42 -0
- data/lib/prism/reflection.rb +3 -0
- data/lib/prism/relocation.rb +1 -0
- data/lib/prism/serialize.rb +24 -19
- data/lib/prism/string_query.rb +1 -0
- data/lib/prism/translation/parser/builder.rb +1 -0
- data/lib/prism/translation/parser/compiler.rb +47 -25
- data/lib/prism/translation/parser/lexer.rb +29 -21
- data/lib/prism/translation/parser.rb +13 -1
- data/lib/prism/translation/parser33.rb +1 -0
- data/lib/prism/translation/parser34.rb +1 -0
- data/lib/prism/translation/parser35.rb +1 -0
- data/lib/prism/translation/parser_current.rb +24 -0
- data/lib/prism/translation/ripper/sexp.rb +1 -0
- data/lib/prism/translation/ripper.rb +17 -1
- data/lib/prism/translation/ruby_parser.rb +286 -3
- data/lib/prism/translation.rb +2 -0
- data/lib/prism/visitor.rb +457 -152
- data/lib/prism.rb +2 -0
- data/prism.gemspec +5 -1
- data/rbi/prism/dsl.rbi +3 -3
- data/rbi/prism/node.rbi +21 -9
- data/sig/prism/dispatcher.rbs +3 -0
- data/sig/prism/dsl.rbs +3 -3
- data/sig/prism/node.rbs +444 -30
- data/sig/prism/node_ext.rbs +84 -17
- data/sig/prism/parse_result/comments.rbs +38 -0
- data/sig/prism/parse_result.rbs +4 -0
- data/sig/prism/reflection.rbs +1 -1
- data/src/diagnostic.c +7 -1
- data/src/node.c +2 -0
- data/src/options.c +2 -2
- data/src/prettyprint.c +2 -0
- data/src/prism.c +252 -130
- data/src/serialize.c +2 -0
- data/src/token_type.c +36 -34
- metadata +6 -2
data/src/token_type.c
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
/* :markup: markdown */
|
2
|
+
|
1
3
|
/*----------------------------------------------------------------------------*/
|
2
4
|
/* This file is generated by the templates/template.rb script and should not */
|
3
5
|
/* be modified manually. See */
|
@@ -18,10 +20,36 @@ pm_token_type_name(pm_token_type_t token_type) {
|
|
18
20
|
switch (token_type) {
|
19
21
|
case PM_TOKEN_EOF:
|
20
22
|
return "EOF";
|
21
|
-
case
|
22
|
-
return "
|
23
|
-
case
|
24
|
-
return "
|
23
|
+
case PM_TOKEN_BRACE_RIGHT:
|
24
|
+
return "BRACE_RIGHT";
|
25
|
+
case PM_TOKEN_COMMA:
|
26
|
+
return "COMMA";
|
27
|
+
case PM_TOKEN_EMBEXPR_END:
|
28
|
+
return "EMBEXPR_END";
|
29
|
+
case PM_TOKEN_KEYWORD_DO:
|
30
|
+
return "KEYWORD_DO";
|
31
|
+
case PM_TOKEN_KEYWORD_ELSE:
|
32
|
+
return "KEYWORD_ELSE";
|
33
|
+
case PM_TOKEN_KEYWORD_ELSIF:
|
34
|
+
return "KEYWORD_ELSIF";
|
35
|
+
case PM_TOKEN_KEYWORD_END:
|
36
|
+
return "KEYWORD_END";
|
37
|
+
case PM_TOKEN_KEYWORD_ENSURE:
|
38
|
+
return "KEYWORD_ENSURE";
|
39
|
+
case PM_TOKEN_KEYWORD_IN:
|
40
|
+
return "KEYWORD_IN";
|
41
|
+
case PM_TOKEN_KEYWORD_RESCUE:
|
42
|
+
return "KEYWORD_RESCUE";
|
43
|
+
case PM_TOKEN_KEYWORD_THEN:
|
44
|
+
return "KEYWORD_THEN";
|
45
|
+
case PM_TOKEN_KEYWORD_WHEN:
|
46
|
+
return "KEYWORD_WHEN";
|
47
|
+
case PM_TOKEN_NEWLINE:
|
48
|
+
return "NEWLINE";
|
49
|
+
case PM_TOKEN_PARENTHESIS_RIGHT:
|
50
|
+
return "PARENTHESIS_RIGHT";
|
51
|
+
case PM_TOKEN_SEMICOLON:
|
52
|
+
return "SEMICOLON";
|
25
53
|
case PM_TOKEN_AMPERSAND:
|
26
54
|
return "AMPERSAND";
|
27
55
|
case PM_TOKEN_AMPERSAND_AMPERSAND:
|
@@ -44,8 +72,6 @@ pm_token_type_name(pm_token_type_t token_type) {
|
|
44
72
|
return "BANG_TILDE";
|
45
73
|
case PM_TOKEN_BRACE_LEFT:
|
46
74
|
return "BRACE_LEFT";
|
47
|
-
case PM_TOKEN_BRACE_RIGHT:
|
48
|
-
return "BRACE_RIGHT";
|
49
75
|
case PM_TOKEN_BRACKET_LEFT:
|
50
76
|
return "BRACKET_LEFT";
|
51
77
|
case PM_TOKEN_BRACKET_LEFT_ARRAY:
|
@@ -68,8 +94,6 @@ pm_token_type_name(pm_token_type_t token_type) {
|
|
68
94
|
return "COLON";
|
69
95
|
case PM_TOKEN_COLON_COLON:
|
70
96
|
return "COLON_COLON";
|
71
|
-
case PM_TOKEN_COMMA:
|
72
|
-
return "COMMA";
|
73
97
|
case PM_TOKEN_COMMENT:
|
74
98
|
return "COMMENT";
|
75
99
|
case PM_TOKEN_CONSTANT:
|
@@ -88,8 +112,6 @@ pm_token_type_name(pm_token_type_t token_type) {
|
|
88
112
|
return "EMBDOC_LINE";
|
89
113
|
case PM_TOKEN_EMBEXPR_BEGIN:
|
90
114
|
return "EMBEXPR_BEGIN";
|
91
|
-
case PM_TOKEN_EMBEXPR_END:
|
92
|
-
return "EMBEXPR_END";
|
93
115
|
case PM_TOKEN_EMBVAR:
|
94
116
|
return "EMBVAR";
|
95
117
|
case PM_TOKEN_EQUAL:
|
@@ -156,20 +178,10 @@ pm_token_type_name(pm_token_type_t token_type) {
|
|
156
178
|
return "KEYWORD_DEF";
|
157
179
|
case PM_TOKEN_KEYWORD_DEFINED:
|
158
180
|
return "KEYWORD_DEFINED";
|
159
|
-
case PM_TOKEN_KEYWORD_DO:
|
160
|
-
return "KEYWORD_DO";
|
161
181
|
case PM_TOKEN_KEYWORD_DO_LOOP:
|
162
182
|
return "KEYWORD_DO_LOOP";
|
163
|
-
case PM_TOKEN_KEYWORD_ELSE:
|
164
|
-
return "KEYWORD_ELSE";
|
165
|
-
case PM_TOKEN_KEYWORD_ELSIF:
|
166
|
-
return "KEYWORD_ELSIF";
|
167
|
-
case PM_TOKEN_KEYWORD_END:
|
168
|
-
return "KEYWORD_END";
|
169
183
|
case PM_TOKEN_KEYWORD_END_UPCASE:
|
170
184
|
return "KEYWORD_END_UPCASE";
|
171
|
-
case PM_TOKEN_KEYWORD_ENSURE:
|
172
|
-
return "KEYWORD_ENSURE";
|
173
185
|
case PM_TOKEN_KEYWORD_FALSE:
|
174
186
|
return "KEYWORD_FALSE";
|
175
187
|
case PM_TOKEN_KEYWORD_FOR:
|
@@ -178,8 +190,6 @@ pm_token_type_name(pm_token_type_t token_type) {
|
|
178
190
|
return "KEYWORD_IF";
|
179
191
|
case PM_TOKEN_KEYWORD_IF_MODIFIER:
|
180
192
|
return "KEYWORD_IF_MODIFIER";
|
181
|
-
case PM_TOKEN_KEYWORD_IN:
|
182
|
-
return "KEYWORD_IN";
|
183
193
|
case PM_TOKEN_KEYWORD_MODULE:
|
184
194
|
return "KEYWORD_MODULE";
|
185
195
|
case PM_TOKEN_KEYWORD_NEXT:
|
@@ -192,8 +202,6 @@ pm_token_type_name(pm_token_type_t token_type) {
|
|
192
202
|
return "KEYWORD_OR";
|
193
203
|
case PM_TOKEN_KEYWORD_REDO:
|
194
204
|
return "KEYWORD_REDO";
|
195
|
-
case PM_TOKEN_KEYWORD_RESCUE:
|
196
|
-
return "KEYWORD_RESCUE";
|
197
205
|
case PM_TOKEN_KEYWORD_RESCUE_MODIFIER:
|
198
206
|
return "KEYWORD_RESCUE_MODIFIER";
|
199
207
|
case PM_TOKEN_KEYWORD_RETRY:
|
@@ -204,8 +212,6 @@ pm_token_type_name(pm_token_type_t token_type) {
|
|
204
212
|
return "KEYWORD_SELF";
|
205
213
|
case PM_TOKEN_KEYWORD_SUPER:
|
206
214
|
return "KEYWORD_SUPER";
|
207
|
-
case PM_TOKEN_KEYWORD_THEN:
|
208
|
-
return "KEYWORD_THEN";
|
209
215
|
case PM_TOKEN_KEYWORD_TRUE:
|
210
216
|
return "KEYWORD_TRUE";
|
211
217
|
case PM_TOKEN_KEYWORD_UNDEF:
|
@@ -218,8 +224,6 @@ pm_token_type_name(pm_token_type_t token_type) {
|
|
218
224
|
return "KEYWORD_UNTIL";
|
219
225
|
case PM_TOKEN_KEYWORD_UNTIL_MODIFIER:
|
220
226
|
return "KEYWORD_UNTIL_MODIFIER";
|
221
|
-
case PM_TOKEN_KEYWORD_WHEN:
|
222
|
-
return "KEYWORD_WHEN";
|
223
227
|
case PM_TOKEN_KEYWORD_WHILE:
|
224
228
|
return "KEYWORD_WHILE";
|
225
229
|
case PM_TOKEN_KEYWORD_WHILE_MODIFIER:
|
@@ -256,16 +260,12 @@ pm_token_type_name(pm_token_type_t token_type) {
|
|
256
260
|
return "MINUS_EQUAL";
|
257
261
|
case PM_TOKEN_MINUS_GREATER:
|
258
262
|
return "MINUS_GREATER";
|
259
|
-
case PM_TOKEN_NEWLINE:
|
260
|
-
return "NEWLINE";
|
261
263
|
case PM_TOKEN_NUMBERED_REFERENCE:
|
262
264
|
return "NUMBERED_REFERENCE";
|
263
265
|
case PM_TOKEN_PARENTHESIS_LEFT:
|
264
266
|
return "PARENTHESIS_LEFT";
|
265
267
|
case PM_TOKEN_PARENTHESIS_LEFT_PARENTHESES:
|
266
268
|
return "PARENTHESIS_LEFT_PARENTHESES";
|
267
|
-
case PM_TOKEN_PARENTHESIS_RIGHT:
|
268
|
-
return "PARENTHESIS_RIGHT";
|
269
269
|
case PM_TOKEN_PERCENT:
|
270
270
|
return "PERCENT";
|
271
271
|
case PM_TOKEN_PERCENT_EQUAL:
|
@@ -298,8 +298,6 @@ pm_token_type_name(pm_token_type_t token_type) {
|
|
298
298
|
return "REGEXP_BEGIN";
|
299
299
|
case PM_TOKEN_REGEXP_END:
|
300
300
|
return "REGEXP_END";
|
301
|
-
case PM_TOKEN_SEMICOLON:
|
302
|
-
return "SEMICOLON";
|
303
301
|
case PM_TOKEN_SLASH:
|
304
302
|
return "SLASH";
|
305
303
|
case PM_TOKEN_SLASH_EQUAL:
|
@@ -344,6 +342,10 @@ pm_token_type_name(pm_token_type_t token_type) {
|
|
344
342
|
return "WORDS_SEP";
|
345
343
|
case PM_TOKEN___END__:
|
346
344
|
return "__END__";
|
345
|
+
case PM_TOKEN_MISSING:
|
346
|
+
return "MISSING";
|
347
|
+
case PM_TOKEN_NOT_PROVIDED:
|
348
|
+
return "NOT_PROVIDED";
|
347
349
|
case PM_TOKEN_MAXIMUM:
|
348
350
|
assert(false && "unreachable");
|
349
351
|
return "";
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prism
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shopify
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-
|
10
|
+
date: 2025-09-12 00:00:00.000000000 Z
|
11
11
|
dependencies: []
|
12
12
|
email:
|
13
13
|
- ruby@shopify.com
|
@@ -91,7 +91,9 @@ files:
|
|
91
91
|
- lib/prism/pattern.rb
|
92
92
|
- lib/prism/polyfill/append_as_bytes.rb
|
93
93
|
- lib/prism/polyfill/byteindex.rb
|
94
|
+
- lib/prism/polyfill/scan_byte.rb
|
94
95
|
- lib/prism/polyfill/unpack1.rb
|
96
|
+
- lib/prism/polyfill/warn.rb
|
95
97
|
- lib/prism/reflection.rb
|
96
98
|
- lib/prism/relocation.rb
|
97
99
|
- lib/prism/serialize.rb
|
@@ -104,6 +106,7 @@ files:
|
|
104
106
|
- lib/prism/translation/parser33.rb
|
105
107
|
- lib/prism/translation/parser34.rb
|
106
108
|
- lib/prism/translation/parser35.rb
|
109
|
+
- lib/prism/translation/parser_current.rb
|
107
110
|
- lib/prism/translation/ripper.rb
|
108
111
|
- lib/prism/translation/ripper/sexp.rb
|
109
112
|
- lib/prism/translation/ripper/shim.rb
|
@@ -137,6 +140,7 @@ files:
|
|
137
140
|
- sig/prism/node_ext.rbs
|
138
141
|
- sig/prism/pack.rbs
|
139
142
|
- sig/prism/parse_result.rbs
|
143
|
+
- sig/prism/parse_result/comments.rbs
|
140
144
|
- sig/prism/pattern.rbs
|
141
145
|
- sig/prism/reflection.rbs
|
142
146
|
- sig/prism/relocation.rbs
|