prism 0.30.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +31 -1
- data/README.md +3 -1
- data/config.yml +185 -126
- data/docs/serialization.md +3 -0
- data/ext/prism/api_node.c +2843 -2085
- data/ext/prism/extconf.rb +1 -1
- data/ext/prism/extension.c +35 -25
- data/ext/prism/extension.h +2 -2
- data/include/prism/ast.h +1048 -69
- data/include/prism/defines.h +9 -0
- data/include/prism/diagnostic.h +11 -3
- data/include/prism/options.h +55 -1
- data/include/prism/parser.h +27 -3
- data/include/prism/regexp.h +2 -1
- data/include/prism/util/pm_integer.h +6 -6
- data/include/prism/util/pm_newline_list.h +11 -0
- data/include/prism/util/pm_string.h +1 -0
- data/include/prism/version.h +3 -3
- data/lib/prism/desugar_compiler.rb +111 -74
- data/lib/prism/dispatcher.rb +2 -1
- data/lib/prism/dot_visitor.rb +21 -31
- data/lib/prism/dsl.rb +656 -471
- data/lib/prism/ffi.rb +3 -0
- data/lib/prism/inspect_visitor.rb +285 -57
- data/lib/prism/mutation_compiler.rb +5 -5
- data/lib/prism/node.rb +2282 -4754
- data/lib/prism/node_ext.rb +72 -11
- data/lib/prism/parse_result/errors.rb +65 -0
- data/lib/prism/parse_result/newlines.rb +28 -28
- data/lib/prism/parse_result.rb +25 -2
- data/lib/prism/reflection.rb +7 -7
- data/lib/prism/serialize.rb +468 -610
- data/lib/prism/translation/parser/compiler.rb +18 -18
- data/lib/prism/translation/parser/lexer.rb +1 -1
- data/lib/prism/translation/parser.rb +3 -3
- data/lib/prism/translation/ripper.rb +14 -14
- data/lib/prism/translation/ruby_parser.rb +43 -7
- data/prism.gemspec +3 -1
- data/rbi/prism/dsl.rbi +521 -0
- data/rbi/prism/node.rbi +1456 -5616
- data/rbi/prism.rbi +16 -16
- data/sig/prism/dsl.rbs +189 -305
- data/sig/prism/node.rbs +702 -603
- data/sig/prism/parse_result.rbs +2 -0
- data/src/diagnostic.c +22 -6
- data/src/node.c +277 -284
- data/src/options.c +18 -0
- data/src/prettyprint.c +99 -108
- data/src/prism.c +1282 -760
- data/src/regexp.c +72 -4
- data/src/serialize.c +165 -50
- data/src/token_type.c +2 -2
- data/src/util/pm_integer.c +14 -14
- data/src/util/pm_newline_list.c +29 -0
- data/src/util/pm_string.c +9 -5
- metadata +4 -2
data/config.yml
CHANGED
@@ -81,8 +81,10 @@ errors:
|
|
81
81
|
- ESCAPE_INVALID_META_REPEAT
|
82
82
|
- ESCAPE_INVALID_UNICODE
|
83
83
|
- ESCAPE_INVALID_UNICODE_CM_FLAGS
|
84
|
+
- ESCAPE_INVALID_UNICODE_LIST
|
84
85
|
- ESCAPE_INVALID_UNICODE_LITERAL
|
85
86
|
- ESCAPE_INVALID_UNICODE_LONG
|
87
|
+
- ESCAPE_INVALID_UNICODE_SHORT
|
86
88
|
- ESCAPE_INVALID_UNICODE_TERM
|
87
89
|
- EXPECT_ARGUMENT
|
88
90
|
- EXPECT_EOL_AFTER_STATEMENT
|
@@ -208,6 +210,7 @@ errors:
|
|
208
210
|
- PARAMETER_UNEXPECTED_FWD
|
209
211
|
- PARAMETER_UNEXPECTED_NO_KW
|
210
212
|
- PARAMETER_WILD_LOOSE_COMMA
|
213
|
+
- PATTERN_ARRAY_MULTIPLE_RESTS
|
211
214
|
- PATTERN_CAPTURE_DUPLICATE
|
212
215
|
- PATTERN_EXPRESSION_AFTER_BRACKET
|
213
216
|
- PATTERN_EXPRESSION_AFTER_COMMA
|
@@ -219,6 +222,7 @@ errors:
|
|
219
222
|
- PATTERN_EXPRESSION_AFTER_PIPE
|
220
223
|
- PATTERN_EXPRESSION_AFTER_RANGE
|
221
224
|
- PATTERN_EXPRESSION_AFTER_REST
|
225
|
+
- PATTERN_FIND_MISSING_INNER
|
222
226
|
- PATTERN_HASH_IMPLICIT
|
223
227
|
- PATTERN_HASH_KEY
|
224
228
|
- PATTERN_HASH_KEY_DUPLICATE
|
@@ -261,11 +265,14 @@ errors:
|
|
261
265
|
- TERNARY_COLON
|
262
266
|
- TERNARY_EXPRESSION_FALSE
|
263
267
|
- TERNARY_EXPRESSION_TRUE
|
268
|
+
- UNARY_DISALLOWED
|
264
269
|
- UNARY_RECEIVER
|
265
270
|
- UNDEF_ARGUMENT
|
266
271
|
- UNEXPECTED_BLOCK_ARGUMENT
|
267
272
|
- UNEXPECTED_INDEX_BLOCK
|
268
273
|
- UNEXPECTED_INDEX_KEYWORDS
|
274
|
+
- UNEXPECTED_MULTI_WRITE
|
275
|
+
- UNEXPECTED_RANGE_OPERATOR
|
269
276
|
- UNEXPECTED_SAFE_NAVIGATION
|
270
277
|
- UNEXPECTED_TOKEN_CLOSE_CONTEXT
|
271
278
|
- UNEXPECTED_TOKEN_IGNORE
|
@@ -293,10 +300,11 @@ warnings:
|
|
293
300
|
- DUPLICATED_WHEN_CLAUSE
|
294
301
|
- FLOAT_OUT_OF_RANGE
|
295
302
|
- IGNORED_FROZEN_STRING_LITERAL
|
303
|
+
- INDENTATION_MISMATCH
|
296
304
|
- INTEGER_IN_FLIP_FLOP
|
297
305
|
- INVALID_CHARACTER
|
306
|
+
- INVALID_MAGIC_COMMENT_VALUE
|
298
307
|
- INVALID_NUMBERED_REFERENCE
|
299
|
-
- INVALID_SHAREABLE_CONSTANT_VALUE
|
300
308
|
- KEYWORD_EOL
|
301
309
|
- LITERAL_IN_CONDITION_DEFAULT
|
302
310
|
- LITERAL_IN_CONDITION_VERBOSE
|
@@ -643,6 +651,8 @@ flags:
|
|
643
651
|
comment: "if arguments contain keywords"
|
644
652
|
- name: CONTAINS_KEYWORD_SPLAT
|
645
653
|
comment: "if arguments contain keyword splat"
|
654
|
+
- name: CONTAINS_SPLAT
|
655
|
+
comment: "if arguments contain splat"
|
646
656
|
comment: Flags for arguments nodes.
|
647
657
|
- name: ArrayNodeFlags
|
648
658
|
values:
|
@@ -730,11 +740,6 @@ flags:
|
|
730
740
|
- name: FORCED_US_ASCII_ENCODING
|
731
741
|
comment: "internal bytes forced the encoding to US-ASCII"
|
732
742
|
comment: Flags for regular expression and match last line nodes.
|
733
|
-
- name: ReturnNodeFlags
|
734
|
-
values:
|
735
|
-
- name: REDUNDANT
|
736
|
-
comment: "a return statement that is redundant because it is the last statement in a method"
|
737
|
-
comment: Flags for return nodes.
|
738
743
|
- name: ShareableConstantNodeFlags
|
739
744
|
values:
|
740
745
|
- name: LITERAL
|
@@ -769,15 +774,25 @@ nodes:
|
|
769
774
|
fields:
|
770
775
|
- name: new_name
|
771
776
|
type: node
|
777
|
+
kind:
|
778
|
+
- GlobalVariableReadNode
|
779
|
+
- BackReferenceReadNode
|
780
|
+
- NumberedReferenceReadNode
|
772
781
|
comment: |
|
773
|
-
Represents the new name of the global variable that can be used after aliasing.
|
782
|
+
Represents the new name of the global variable that can be used after aliasing.
|
774
783
|
|
775
784
|
alias $foo $bar
|
776
785
|
^^^^
|
777
786
|
- name: old_name
|
778
787
|
type: node
|
788
|
+
kind:
|
789
|
+
- GlobalVariableReadNode
|
790
|
+
- BackReferenceReadNode
|
791
|
+
- NumberedReferenceReadNode
|
792
|
+
- SymbolNode # On parsing error of `alias $a b`
|
793
|
+
- MissingNode # On parsing error of `alias $a 42`
|
779
794
|
comment: |
|
780
|
-
Represents the old name of the global variable that
|
795
|
+
Represents the old name of the global variable that can be used before aliasing.
|
781
796
|
|
782
797
|
alias $foo $bar
|
783
798
|
^^^^
|
@@ -797,8 +812,16 @@ nodes:
|
|
797
812
|
fields:
|
798
813
|
- name: new_name
|
799
814
|
type: node
|
815
|
+
kind:
|
816
|
+
- SymbolNode
|
817
|
+
- InterpolatedSymbolNode
|
800
818
|
- name: old_name
|
801
819
|
type: node
|
820
|
+
kind:
|
821
|
+
- SymbolNode
|
822
|
+
- InterpolatedSymbolNode
|
823
|
+
- GlobalVariableReadNode # On parsing error of `alias a $b`
|
824
|
+
- MissingNode # On parsing error of `alias a 42`
|
802
825
|
- name: keyword_loc
|
803
826
|
type: location
|
804
827
|
comment: |
|
@@ -854,10 +877,8 @@ nodes:
|
|
854
877
|
left and right
|
855
878
|
^^^^^^^^^^^^^^
|
856
879
|
- name: ArgumentsNode
|
880
|
+
flags: ArgumentsNodeFlags
|
857
881
|
fields:
|
858
|
-
- name: flags
|
859
|
-
type: flags
|
860
|
-
kind: ArgumentsNodeFlags
|
861
882
|
- name: arguments
|
862
883
|
type: node[]
|
863
884
|
comment: |
|
@@ -866,10 +887,8 @@ nodes:
|
|
866
887
|
return foo, bar, baz
|
867
888
|
^^^^^^^^^^^^^
|
868
889
|
- name: ArrayNode
|
890
|
+
flags: ArrayNodeFlags
|
869
891
|
fields:
|
870
|
-
- name: flags
|
871
|
-
type: flags
|
872
|
-
kind: ArrayNodeFlags
|
873
892
|
- name: elements
|
874
893
|
type: node[]
|
875
894
|
comment: Represent the list of zero or more [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression) within the array.
|
@@ -1033,15 +1052,13 @@ nodes:
|
|
1033
1052
|
- name: operator_loc
|
1034
1053
|
type: location
|
1035
1054
|
comment: |
|
1036
|
-
Represents block
|
1055
|
+
Represents a block argument using `&`.
|
1037
1056
|
|
1038
1057
|
bar(&args)
|
1039
1058
|
^^^^^^^^^^
|
1040
1059
|
- name: BlockLocalVariableNode
|
1060
|
+
flags: ParameterFlags
|
1041
1061
|
fields:
|
1042
|
-
- name: flags
|
1043
|
-
type: flags
|
1044
|
-
kind: ParameterFlags
|
1045
1062
|
- name: name
|
1046
1063
|
type: constant
|
1047
1064
|
comment: |
|
@@ -1055,8 +1072,15 @@ nodes:
|
|
1055
1072
|
type: constant[]
|
1056
1073
|
- name: parameters
|
1057
1074
|
type: node?
|
1075
|
+
kind:
|
1076
|
+
- BlockParametersNode
|
1077
|
+
- NumberedParametersNode
|
1078
|
+
- ItParametersNode
|
1058
1079
|
- name: body
|
1059
1080
|
type: node?
|
1081
|
+
kind:
|
1082
|
+
- StatementsNode
|
1083
|
+
- BeginNode
|
1060
1084
|
- name: opening_loc
|
1061
1085
|
type: location
|
1062
1086
|
- name: closing_loc
|
@@ -1067,10 +1091,8 @@ nodes:
|
|
1067
1091
|
[1, 2, 3].each { |i| puts x }
|
1068
1092
|
^^^^^^^^^^^^^^
|
1069
1093
|
- name: BlockParameterNode
|
1094
|
+
flags: ParameterFlags
|
1070
1095
|
fields:
|
1071
|
-
- name: flags
|
1072
|
-
type: flags
|
1073
|
-
kind: ParameterFlags
|
1074
1096
|
- name: name
|
1075
1097
|
type: constant?
|
1076
1098
|
- name: name_loc
|
@@ -1078,7 +1100,7 @@ nodes:
|
|
1078
1100
|
- name: operator_loc
|
1079
1101
|
type: location
|
1080
1102
|
comment: |
|
1081
|
-
Represents a block parameter
|
1103
|
+
Represents a block parameter of a method, block, or lambda definition.
|
1082
1104
|
|
1083
1105
|
def a(&b)
|
1084
1106
|
^^
|
@@ -1127,10 +1149,8 @@ nodes:
|
|
1127
1149
|
break foo
|
1128
1150
|
^^^^^^^^^
|
1129
1151
|
- name: CallAndWriteNode
|
1152
|
+
flags: CallNodeFlags
|
1130
1153
|
fields:
|
1131
|
-
- name: flags
|
1132
|
-
type: flags
|
1133
|
-
kind: CallNodeFlags
|
1134
1154
|
- name: receiver
|
1135
1155
|
type: node?
|
1136
1156
|
- name: call_operator_loc
|
@@ -1151,10 +1171,8 @@ nodes:
|
|
1151
1171
|
foo.bar &&= value
|
1152
1172
|
^^^^^^^^^^^^^^^^^
|
1153
1173
|
- name: CallNode
|
1174
|
+
flags: CallNodeFlags
|
1154
1175
|
fields:
|
1155
|
-
- name: flags
|
1156
|
-
type: flags
|
1157
|
-
kind: CallNodeFlags
|
1158
1176
|
- name: receiver
|
1159
1177
|
type: node?
|
1160
1178
|
comment: |
|
@@ -1204,10 +1222,8 @@ nodes:
|
|
1204
1222
|
foo&.bar
|
1205
1223
|
^^^^^^^^
|
1206
1224
|
- name: CallOperatorWriteNode
|
1225
|
+
flags: CallNodeFlags
|
1207
1226
|
fields:
|
1208
|
-
- name: flags
|
1209
|
-
type: flags
|
1210
|
-
kind: CallNodeFlags
|
1211
1227
|
- name: receiver
|
1212
1228
|
type: node?
|
1213
1229
|
- name: call_operator_loc
|
@@ -1230,10 +1246,8 @@ nodes:
|
|
1230
1246
|
foo.bar += baz
|
1231
1247
|
^^^^^^^^^^^^^^
|
1232
1248
|
- name: CallOrWriteNode
|
1249
|
+
flags: CallNodeFlags
|
1233
1250
|
fields:
|
1234
|
-
- name: flags
|
1235
|
-
type: flags
|
1236
|
-
kind: CallNodeFlags
|
1237
1251
|
- name: receiver
|
1238
1252
|
type: node?
|
1239
1253
|
- name: call_operator_loc
|
@@ -1254,10 +1268,8 @@ nodes:
|
|
1254
1268
|
foo.bar ||= value
|
1255
1269
|
^^^^^^^^^^^^^^^^^
|
1256
1270
|
- name: CallTargetNode
|
1271
|
+
flags: CallNodeFlags
|
1257
1272
|
fields:
|
1258
|
-
- name: flags
|
1259
|
-
type: flags
|
1260
|
-
kind: CallNodeFlags
|
1261
1273
|
- name: receiver
|
1262
1274
|
type: node
|
1263
1275
|
- name: call_operator_loc
|
@@ -1298,7 +1310,7 @@ nodes:
|
|
1298
1310
|
type: node?
|
1299
1311
|
- name: conditions
|
1300
1312
|
type: node[]
|
1301
|
-
- name:
|
1313
|
+
- name: else_clause
|
1302
1314
|
type: node?
|
1303
1315
|
kind: ElseNode
|
1304
1316
|
- name: case_keyword_loc
|
@@ -1318,7 +1330,7 @@ nodes:
|
|
1318
1330
|
type: node?
|
1319
1331
|
- name: conditions
|
1320
1332
|
type: node[]
|
1321
|
-
- name:
|
1333
|
+
- name: else_clause
|
1322
1334
|
type: node?
|
1323
1335
|
kind: ElseNode
|
1324
1336
|
- name: case_keyword_loc
|
@@ -1852,10 +1864,8 @@ nodes:
|
|
1852
1864
|
foo in Foo(*bar, baz, *qux)
|
1853
1865
|
^^^^^^^^^^^^^^^^^^^^
|
1854
1866
|
- name: FlipFlopNode
|
1867
|
+
flags: RangeFlags
|
1855
1868
|
fields:
|
1856
|
-
- name: flags
|
1857
|
-
type: flags
|
1858
|
-
kind: RangeFlags
|
1859
1869
|
- name: left
|
1860
1870
|
type: node?
|
1861
1871
|
- name: right
|
@@ -2177,8 +2187,11 @@ nodes:
|
|
2177
2187
|
baz
|
2178
2188
|
^^^
|
2179
2189
|
end
|
2180
|
-
- name:
|
2190
|
+
- name: subsequent
|
2181
2191
|
type: node?
|
2192
|
+
kind:
|
2193
|
+
- ElseNode
|
2194
|
+
- IfNode
|
2182
2195
|
comment: |
|
2183
2196
|
Represents an `ElseNode` or an `IfNode` when there is an `else` or an `elsif` in the `if` statement.
|
2184
2197
|
|
@@ -2274,10 +2287,8 @@ nodes:
|
|
2274
2287
|
case a; in b then c end
|
2275
2288
|
^^^^^^^^^^^
|
2276
2289
|
- name: IndexAndWriteNode
|
2290
|
+
flags: CallNodeFlags
|
2277
2291
|
fields:
|
2278
|
-
- name: flags
|
2279
|
-
type: flags
|
2280
|
-
kind: CallNodeFlags
|
2281
2292
|
- name: receiver
|
2282
2293
|
type: node?
|
2283
2294
|
- name: call_operator_loc
|
@@ -2301,10 +2312,8 @@ nodes:
|
|
2301
2312
|
foo.bar[baz] &&= value
|
2302
2313
|
^^^^^^^^^^^^^^^^^^^^^^
|
2303
2314
|
- name: IndexOperatorWriteNode
|
2315
|
+
flags: CallNodeFlags
|
2304
2316
|
fields:
|
2305
|
-
- name: flags
|
2306
|
-
type: flags
|
2307
|
-
kind: CallNodeFlags
|
2308
2317
|
- name: receiver
|
2309
2318
|
type: node?
|
2310
2319
|
- name: call_operator_loc
|
@@ -2330,10 +2339,8 @@ nodes:
|
|
2330
2339
|
foo.bar[baz] += value
|
2331
2340
|
^^^^^^^^^^^^^^^^^^^^^
|
2332
2341
|
- name: IndexOrWriteNode
|
2342
|
+
flags: CallNodeFlags
|
2333
2343
|
fields:
|
2334
|
-
- name: flags
|
2335
|
-
type: flags
|
2336
|
-
kind: CallNodeFlags
|
2337
2344
|
- name: receiver
|
2338
2345
|
type: node?
|
2339
2346
|
- name: call_operator_loc
|
@@ -2357,10 +2364,8 @@ nodes:
|
|
2357
2364
|
foo.bar[baz] ||= value
|
2358
2365
|
^^^^^^^^^^^^^^^^^^^^^^
|
2359
2366
|
- name: IndexTargetNode
|
2367
|
+
flags: CallNodeFlags
|
2360
2368
|
fields:
|
2361
|
-
- name: flags
|
2362
|
-
type: flags
|
2363
|
-
kind: CallNodeFlags
|
2364
2369
|
- name: receiver
|
2365
2370
|
type: node
|
2366
2371
|
- name: opening_loc
|
@@ -2496,10 +2501,8 @@ nodes:
|
|
2496
2501
|
@foo = 1
|
2497
2502
|
^^^^^^^^
|
2498
2503
|
- name: IntegerNode
|
2504
|
+
flags: IntegerBaseFlags
|
2499
2505
|
fields:
|
2500
|
-
- name: flags
|
2501
|
-
type: flags
|
2502
|
-
kind: IntegerBaseFlags
|
2503
2506
|
- name: value
|
2504
2507
|
type: integer
|
2505
2508
|
comment: The value of the integer literal as a number.
|
@@ -2509,10 +2512,8 @@ nodes:
|
|
2509
2512
|
1
|
2510
2513
|
^
|
2511
2514
|
- name: InterpolatedMatchLastLineNode
|
2515
|
+
flags: RegularExpressionFlags
|
2512
2516
|
fields:
|
2513
|
-
- name: flags
|
2514
|
-
type: flags
|
2515
|
-
kind: RegularExpressionFlags
|
2516
2517
|
- name: opening_loc
|
2517
2518
|
type: location
|
2518
2519
|
- name: parts
|
@@ -2530,10 +2531,8 @@ nodes:
|
|
2530
2531
|
if /foo #{bar} baz/ then end
|
2531
2532
|
^^^^^^^^^^^^^^^^
|
2532
2533
|
- name: InterpolatedRegularExpressionNode
|
2534
|
+
flags: RegularExpressionFlags
|
2533
2535
|
fields:
|
2534
|
-
- name: flags
|
2535
|
-
type: flags
|
2536
|
-
kind: RegularExpressionFlags
|
2537
2536
|
- name: opening_loc
|
2538
2537
|
type: location
|
2539
2538
|
- name: parts
|
@@ -2551,10 +2550,8 @@ nodes:
|
|
2551
2550
|
/foo #{bar} baz/
|
2552
2551
|
^^^^^^^^^^^^^^^^
|
2553
2552
|
- name: InterpolatedStringNode
|
2553
|
+
flags: InterpolatedStringNodeFlags
|
2554
2554
|
fields:
|
2555
|
-
- name: flags
|
2556
|
-
type: flags
|
2557
|
-
kind: InterpolatedStringNodeFlags
|
2558
2555
|
- name: opening_loc
|
2559
2556
|
type: location?
|
2560
2557
|
- name: parts
|
@@ -2621,10 +2618,8 @@ nodes:
|
|
2621
2618
|
-> { it + it }
|
2622
2619
|
^^^^^^^^^^^^^^
|
2623
2620
|
- name: KeywordHashNode
|
2621
|
+
flags: KeywordHashNodeFlags
|
2624
2622
|
fields:
|
2625
|
-
- name: flags
|
2626
|
-
type: flags
|
2627
|
-
kind: KeywordHashNodeFlags
|
2628
2623
|
- name: elements
|
2629
2624
|
type: node[]
|
2630
2625
|
kind:
|
@@ -2636,10 +2631,8 @@ nodes:
|
|
2636
2631
|
foo(a: b)
|
2637
2632
|
^^^^
|
2638
2633
|
- name: KeywordRestParameterNode
|
2634
|
+
flags: ParameterFlags
|
2639
2635
|
fields:
|
2640
|
-
- name: flags
|
2641
|
-
type: flags
|
2642
|
-
kind: ParameterFlags
|
2643
2636
|
- name: name
|
2644
2637
|
type: constant?
|
2645
2638
|
- name: name_loc
|
@@ -2819,10 +2812,8 @@ nodes:
|
|
2819
2812
|
foo = 1
|
2820
2813
|
^^^^^^^
|
2821
2814
|
- name: MatchLastLineNode
|
2815
|
+
flags: RegularExpressionFlags
|
2822
2816
|
fields:
|
2823
|
-
- name: flags
|
2824
|
-
type: flags
|
2825
|
-
kind: RegularExpressionFlags
|
2826
2817
|
- name: opening_loc
|
2827
2818
|
type: location
|
2828
2819
|
- name: content_loc
|
@@ -2914,8 +2905,36 @@ nodes:
|
|
2914
2905
|
- RequiredParameterNode
|
2915
2906
|
- BackReferenceReadNode # On parsing error of `$',`
|
2916
2907
|
- NumberedReferenceReadNode # On parsing error of `$1,`
|
2908
|
+
comment: |
|
2909
|
+
Represents the targets expressions before a splat node.
|
2910
|
+
|
2911
|
+
a, (b, c, *) = 1, 2, 3, 4, 5
|
2912
|
+
^^^^
|
2913
|
+
|
2914
|
+
The splat node can be absent, in that case all target expressions are in the left field.
|
2915
|
+
|
2916
|
+
a, (b, c) = 1, 2, 3, 4, 5
|
2917
|
+
^^^^
|
2917
2918
|
- name: rest
|
2918
2919
|
type: node?
|
2920
|
+
kind:
|
2921
|
+
- ImplicitRestNode
|
2922
|
+
- SplatNode
|
2923
|
+
comment: |
|
2924
|
+
Represents a splat node in the target expression.
|
2925
|
+
|
2926
|
+
a, (b, *c) = 1, 2, 3, 4
|
2927
|
+
^^
|
2928
|
+
|
2929
|
+
The variable can be empty, this results in a `SplatNode` with a `nil` expression field.
|
2930
|
+
|
2931
|
+
a, (b, *) = 1, 2, 3, 4
|
2932
|
+
^
|
2933
|
+
|
2934
|
+
If the `*` is omitted, the field will containt an `ImplicitRestNode`
|
2935
|
+
|
2936
|
+
a, (b,) = 1, 2, 3, 4
|
2937
|
+
^
|
2919
2938
|
- name: rights
|
2920
2939
|
type: node[]
|
2921
2940
|
kind:
|
@@ -2930,15 +2949,35 @@ nodes:
|
|
2930
2949
|
- MultiTargetNode
|
2931
2950
|
- RequiredParameterNode
|
2932
2951
|
- BackReferenceReadNode # On parsing error of `*,$'`
|
2952
|
+
comment: |
|
2953
|
+
Represents the targets expressions after a splat node.
|
2954
|
+
|
2955
|
+
a, (*, b, c) = 1, 2, 3, 4, 5
|
2956
|
+
^^^^
|
2933
2957
|
- name: lparen_loc
|
2934
2958
|
type: location?
|
2959
|
+
comment: |
|
2960
|
+
The location of the opening parenthesis.
|
2961
|
+
|
2962
|
+
a, (b, c) = 1, 2, 3
|
2963
|
+
^
|
2935
2964
|
- name: rparen_loc
|
2936
2965
|
type: location?
|
2966
|
+
comment: |
|
2967
|
+
The location of the closing parenthesis.
|
2968
|
+
|
2969
|
+
a, (b, c) = 1, 2, 3
|
2970
|
+
^
|
2937
2971
|
comment: |
|
2938
2972
|
Represents a multi-target expression.
|
2939
2973
|
|
2940
2974
|
a, (b, c) = 1, 2, 3
|
2941
2975
|
^^^^^^
|
2976
|
+
|
2977
|
+
This can be a part of `MultiWriteNode` as above, or the target of a `for` loop
|
2978
|
+
|
2979
|
+
for a, b in [[1, 2], [3, 4]]
|
2980
|
+
^^^^
|
2942
2981
|
- name: MultiWriteNode
|
2943
2982
|
fields:
|
2944
2983
|
- name: lefts
|
@@ -2953,8 +2992,36 @@ nodes:
|
|
2953
2992
|
- CallTargetNode
|
2954
2993
|
- IndexTargetNode
|
2955
2994
|
- MultiTargetNode
|
2995
|
+
comment: |
|
2996
|
+
Represents the targets expressions before a splat node.
|
2997
|
+
|
2998
|
+
a, b, * = 1, 2, 3, 4, 5
|
2999
|
+
^^^^
|
3000
|
+
|
3001
|
+
The splat node can be absent, in that case all target expressions are in the left field.
|
3002
|
+
|
3003
|
+
a, b, c = 1, 2, 3, 4, 5
|
3004
|
+
^^^^^^^
|
2956
3005
|
- name: rest
|
2957
3006
|
type: node?
|
3007
|
+
kind:
|
3008
|
+
- ImplicitRestNode
|
3009
|
+
- SplatNode
|
3010
|
+
comment: |
|
3011
|
+
Represents a splat node in the target expression.
|
3012
|
+
|
3013
|
+
a, b, *c = 1, 2, 3, 4
|
3014
|
+
^^
|
3015
|
+
|
3016
|
+
The variable can be empty, this results in a `SplatNode` with a `nil` expression field.
|
3017
|
+
|
3018
|
+
a, b, * = 1, 2, 3, 4
|
3019
|
+
^
|
3020
|
+
|
3021
|
+
If the `*` is omitted, the field will containt an `ImplicitRestNode`
|
3022
|
+
|
3023
|
+
a, b, = 1, 2, 3, 4
|
3024
|
+
^
|
2958
3025
|
- name: rights
|
2959
3026
|
type: node[]
|
2960
3027
|
kind:
|
@@ -2967,14 +3034,39 @@ nodes:
|
|
2967
3034
|
- CallTargetNode
|
2968
3035
|
- IndexTargetNode
|
2969
3036
|
- MultiTargetNode
|
3037
|
+
comment: |
|
3038
|
+
Represents the targets expressions after a splat node.
|
3039
|
+
|
3040
|
+
a, *, b, c = 1, 2, 3, 4, 5
|
3041
|
+
^^^^
|
2970
3042
|
- name: lparen_loc
|
2971
3043
|
type: location?
|
3044
|
+
comment: |
|
3045
|
+
The location of the opening parenthesis.
|
3046
|
+
|
3047
|
+
(a, b, c) = 1, 2, 3
|
3048
|
+
^
|
2972
3049
|
- name: rparen_loc
|
2973
3050
|
type: location?
|
3051
|
+
comment: |
|
3052
|
+
The location of the closing parenthesis.
|
3053
|
+
|
3054
|
+
(a, b, c) = 1, 2, 3
|
3055
|
+
^
|
2974
3056
|
- name: operator_loc
|
2975
3057
|
type: location
|
3058
|
+
comment: |
|
3059
|
+
The location of the operator.
|
3060
|
+
|
3061
|
+
a, b, c = 1, 2, 3
|
3062
|
+
^
|
2976
3063
|
- name: value
|
2977
3064
|
type: node
|
3065
|
+
comment: |
|
3066
|
+
The value to write to the targets. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
|
3067
|
+
|
3068
|
+
a, b, c = 1, 2, 3
|
3069
|
+
^^^^^^^
|
2978
3070
|
comment: |
|
2979
3071
|
Represents a write to a multi-target expression.
|
2980
3072
|
|
@@ -3037,10 +3129,8 @@ nodes:
|
|
3037
3129
|
$1
|
3038
3130
|
^^
|
3039
3131
|
- name: OptionalKeywordParameterNode
|
3132
|
+
flags: ParameterFlags
|
3040
3133
|
fields:
|
3041
|
-
- name: flags
|
3042
|
-
type: flags
|
3043
|
-
kind: ParameterFlags
|
3044
3134
|
- name: name
|
3045
3135
|
type: constant
|
3046
3136
|
- name: name_loc
|
@@ -3054,10 +3144,8 @@ nodes:
|
|
3054
3144
|
^^^^
|
3055
3145
|
end
|
3056
3146
|
- name: OptionalParameterNode
|
3147
|
+
flags: ParameterFlags
|
3057
3148
|
fields:
|
3058
|
-
- name: flags
|
3059
|
-
type: flags
|
3060
|
-
kind: ParameterFlags
|
3061
3149
|
- name: name
|
3062
3150
|
type: constant
|
3063
3151
|
- name: name_loc
|
@@ -3232,10 +3320,8 @@ nodes:
|
|
3232
3320
|
kind: StatementsNode
|
3233
3321
|
comment: The top level node of any parse tree.
|
3234
3322
|
- name: RangeNode
|
3323
|
+
flags: RangeFlags
|
3235
3324
|
fields:
|
3236
|
-
- name: flags
|
3237
|
-
type: flags
|
3238
|
-
kind: RangeFlags
|
3239
3325
|
- name: left
|
3240
3326
|
type: node?
|
3241
3327
|
comment: |
|
@@ -3270,10 +3356,8 @@ nodes:
|
|
3270
3356
|
c if a =~ /left/ ... b =~ /right/
|
3271
3357
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
3272
3358
|
- name: RationalNode
|
3359
|
+
flags: IntegerBaseFlags
|
3273
3360
|
fields:
|
3274
|
-
- name: flags
|
3275
|
-
type: flags
|
3276
|
-
kind: IntegerBaseFlags
|
3277
3361
|
- name: numerator
|
3278
3362
|
type: integer
|
3279
3363
|
comment: |
|
@@ -3298,10 +3382,8 @@ nodes:
|
|
3298
3382
|
redo
|
3299
3383
|
^^^^
|
3300
3384
|
- name: RegularExpressionNode
|
3385
|
+
flags: RegularExpressionFlags
|
3301
3386
|
fields:
|
3302
|
-
- name: flags
|
3303
|
-
type: flags
|
3304
|
-
kind: RegularExpressionFlags
|
3305
3387
|
- name: opening_loc
|
3306
3388
|
type: location
|
3307
3389
|
- name: content_loc
|
@@ -3316,10 +3398,8 @@ nodes:
|
|
3316
3398
|
/foo/i
|
3317
3399
|
^^^^^^
|
3318
3400
|
- name: RequiredKeywordParameterNode
|
3401
|
+
flags: ParameterFlags
|
3319
3402
|
fields:
|
3320
|
-
- name: flags
|
3321
|
-
type: flags
|
3322
|
-
kind: ParameterFlags
|
3323
3403
|
- name: name
|
3324
3404
|
type: constant
|
3325
3405
|
- name: name_loc
|
@@ -3331,10 +3411,8 @@ nodes:
|
|
3331
3411
|
^^
|
3332
3412
|
end
|
3333
3413
|
- name: RequiredParameterNode
|
3414
|
+
flags: ParameterFlags
|
3334
3415
|
fields:
|
3335
|
-
- name: flags
|
3336
|
-
type: flags
|
3337
|
-
kind: ParameterFlags
|
3338
3416
|
- name: name
|
3339
3417
|
type: constant
|
3340
3418
|
comment: |
|
@@ -3370,7 +3448,7 @@ nodes:
|
|
3370
3448
|
- name: statements
|
3371
3449
|
type: node?
|
3372
3450
|
kind: StatementsNode
|
3373
|
-
- name:
|
3451
|
+
- name: subsequent
|
3374
3452
|
type: node?
|
3375
3453
|
kind: RescueNode
|
3376
3454
|
comment: |
|
@@ -3384,10 +3462,8 @@ nodes:
|
|
3384
3462
|
|
3385
3463
|
`Foo, *splat, Bar` are in the `exceptions` field. `ex` is in the `exception` field.
|
3386
3464
|
- name: RestParameterNode
|
3465
|
+
flags: ParameterFlags
|
3387
3466
|
fields:
|
3388
|
-
- name: flags
|
3389
|
-
type: flags
|
3390
|
-
kind: ParameterFlags
|
3391
3467
|
- name: name
|
3392
3468
|
type: constant?
|
3393
3469
|
- name: name_loc
|
@@ -3408,9 +3484,6 @@ nodes:
|
|
3408
3484
|
^^^^^
|
3409
3485
|
- name: ReturnNode
|
3410
3486
|
fields:
|
3411
|
-
- name: flags
|
3412
|
-
type: flags
|
3413
|
-
kind: ReturnNodeFlags
|
3414
3487
|
- name: keyword_loc
|
3415
3488
|
type: location
|
3416
3489
|
- name: arguments
|
@@ -3428,10 +3501,8 @@ nodes:
|
|
3428
3501
|
self
|
3429
3502
|
^^^^
|
3430
3503
|
- name: ShareableConstantNode
|
3504
|
+
flags: ShareableConstantNodeFlags
|
3431
3505
|
fields:
|
3432
|
-
- name: flags
|
3433
|
-
type: flags
|
3434
|
-
kind: ShareableConstantNodeFlags
|
3435
3506
|
- name: write
|
3436
3507
|
type: node
|
3437
3508
|
kind:
|
@@ -3476,10 +3547,8 @@ nodes:
|
|
3476
3547
|
__ENCODING__
|
3477
3548
|
^^^^^^^^^^^^
|
3478
3549
|
- name: SourceFileNode
|
3550
|
+
flags: StringFlags
|
3479
3551
|
fields:
|
3480
|
-
- name: flags
|
3481
|
-
type: flags
|
3482
|
-
kind: StringFlags
|
3483
3552
|
- name: filepath
|
3484
3553
|
type: string
|
3485
3554
|
comment: Represents the file path being parsed. This corresponds directly to the `filepath` option given to the various `Prism::parse*` APIs.
|
@@ -3515,10 +3584,8 @@ nodes:
|
|
3515
3584
|
foo; bar; baz
|
3516
3585
|
^^^^^^^^^^^^^
|
3517
3586
|
- name: StringNode
|
3587
|
+
flags: StringFlags
|
3518
3588
|
fields:
|
3519
|
-
- name: flags
|
3520
|
-
type: flags
|
3521
|
-
kind: StringFlags
|
3522
3589
|
- name: opening_loc
|
3523
3590
|
type: location?
|
3524
3591
|
- name: content_loc
|
@@ -3560,10 +3627,8 @@ nodes:
|
|
3560
3627
|
super foo, bar
|
3561
3628
|
^^^^^^^^^^^^^^
|
3562
3629
|
- name: SymbolNode
|
3630
|
+
flags: SymbolFlags
|
3563
3631
|
fields:
|
3564
|
-
- name: flags
|
3565
|
-
type: flags
|
3566
|
-
kind: SymbolFlags
|
3567
3632
|
- name: opening_loc
|
3568
3633
|
type: location?
|
3569
3634
|
- name: value_loc
|
@@ -3638,7 +3703,7 @@ nodes:
|
|
3638
3703
|
|
3639
3704
|
unless cond then bar end
|
3640
3705
|
^^^
|
3641
|
-
- name:
|
3706
|
+
- name: else_clause
|
3642
3707
|
type: node?
|
3643
3708
|
kind: ElseNode
|
3644
3709
|
comment: |
|
@@ -3663,10 +3728,8 @@ nodes:
|
|
3663
3728
|
unless foo then bar end
|
3664
3729
|
^^^^^^^^^^^^^^^^^^^^^^^
|
3665
3730
|
- name: UntilNode
|
3731
|
+
flags: LoopFlags
|
3666
3732
|
fields:
|
3667
|
-
- name: flags
|
3668
|
-
type: flags
|
3669
|
-
kind: LoopFlags
|
3670
3733
|
- name: keyword_loc
|
3671
3734
|
type: location
|
3672
3735
|
- name: closing_loc
|
@@ -3704,10 +3767,8 @@ nodes:
|
|
3704
3767
|
^^^^^^^^^
|
3705
3768
|
end
|
3706
3769
|
- name: WhileNode
|
3770
|
+
flags: LoopFlags
|
3707
3771
|
fields:
|
3708
|
-
- name: flags
|
3709
|
-
type: flags
|
3710
|
-
kind: LoopFlags
|
3711
3772
|
- name: keyword_loc
|
3712
3773
|
type: location
|
3713
3774
|
- name: closing_loc
|
@@ -3727,10 +3788,8 @@ nodes:
|
|
3727
3788
|
while foo do bar end
|
3728
3789
|
^^^^^^^^^^^^^^^^^^^^
|
3729
3790
|
- name: XStringNode
|
3791
|
+
flags: EncodingFlags
|
3730
3792
|
fields:
|
3731
|
-
- name: flags
|
3732
|
-
type: flags
|
3733
|
-
kind: EncodingFlags
|
3734
3793
|
- name: opening_loc
|
3735
3794
|
type: location
|
3736
3795
|
- name: content_loc
|