prism 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +39 -1
  3. data/Makefile +1 -1
  4. data/config.yml +422 -3
  5. data/docs/build_system.md +8 -11
  6. data/docs/relocation.md +34 -0
  7. data/ext/prism/api_node.c +18 -10
  8. data/ext/prism/extconf.rb +13 -36
  9. data/ext/prism/extension.c +68 -0
  10. data/ext/prism/extension.h +1 -1
  11. data/include/prism/ast.h +427 -3
  12. data/include/prism/defines.h +22 -7
  13. data/include/prism/diagnostic.h +1 -0
  14. data/include/prism/parser.h +25 -12
  15. data/include/prism/version.h +2 -2
  16. data/include/prism.h +47 -0
  17. data/lib/prism/dot_visitor.rb +10 -0
  18. data/lib/prism/dsl.rb +4 -4
  19. data/lib/prism/ffi.rb +49 -2
  20. data/lib/prism/inspect_visitor.rb +2 -0
  21. data/lib/prism/node.rb +1839 -96
  22. data/lib/prism/parse_result/errors.rb +1 -1
  23. data/lib/prism/parse_result.rb +140 -3
  24. data/lib/prism/reflection.rb +2 -2
  25. data/lib/prism/relocation.rb +504 -0
  26. data/lib/prism/serialize.rb +17 -5
  27. data/lib/prism/string_query.rb +30 -0
  28. data/lib/prism/translation/parser/compiler.rb +36 -26
  29. data/lib/prism/translation/parser.rb +3 -3
  30. data/lib/prism/translation/ripper.rb +1 -5
  31. data/lib/prism/translation/ruby_parser.rb +14 -5
  32. data/lib/prism.rb +6 -4
  33. data/prism.gemspec +7 -1
  34. data/rbi/prism/dsl.rbi +4 -4
  35. data/rbi/prism/node.rbi +5118 -1030
  36. data/rbi/prism/parse_result.rbi +29 -0
  37. data/rbi/prism/string_query.rbi +12 -0
  38. data/rbi/prism.rbi +34 -34
  39. data/sig/prism/dsl.rbs +2 -2
  40. data/sig/prism/node.rbs +13 -98
  41. data/sig/prism/parse_result.rbs +20 -0
  42. data/sig/prism/relocation.rbs +185 -0
  43. data/sig/prism/string_query.rbs +11 -0
  44. data/src/diagnostic.c +3 -1
  45. data/src/node.c +18 -0
  46. data/src/prettyprint.c +32 -0
  47. data/src/prism.c +586 -195
  48. data/src/regexp.c +7 -3
  49. data/src/serialize.c +12 -0
  50. data/src/static_literals.c +1 -1
  51. data/src/util/pm_char.c +1 -1
  52. data/src/util/pm_string.c +1 -0
  53. metadata +9 -3
data/config.yml CHANGED
@@ -141,6 +141,7 @@ errors:
141
141
  - INSTANCE_VARIABLE_BARE
142
142
  - INVALID_BLOCK_EXIT
143
143
  - INVALID_CHARACTER
144
+ - INVALID_COMMA
144
145
  - INVALID_ENCODING_MAGIC_COMMENT
145
146
  - INVALID_ESCAPE_CHARACTER
146
147
  - INVALID_FLOAT_EXPONENT
@@ -854,6 +855,11 @@ nodes:
854
855
  ^^^^^^^^^
855
856
  - name: keyword_loc
856
857
  type: location
858
+ comment: |
859
+ Represents the location of the `alias` keyword.
860
+
861
+ alias foo bar
862
+ ^^^^^
857
863
  comment: |
858
864
  Represents the use of the `alias` keyword to alias a method.
859
865
 
@@ -931,6 +937,11 @@ nodes:
931
937
  - name: arguments
932
938
  type: node[]
933
939
  kind: non-void expression
940
+ comment: |
941
+ The list of arguments, if present. These can be any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
942
+
943
+ foo(bar, baz)
944
+ ^^^^^^^^
934
945
  comment: |
935
946
  Represents a set of arguments to a method or a keyword.
936
947
 
@@ -976,16 +987,41 @@ nodes:
976
987
  - name: requireds
977
988
  type: node[]
978
989
  kind: pattern expression
990
+ comment: |
991
+ Represents the required elements of the array pattern.
992
+
993
+ foo in [1, 2]
994
+ ^ ^
979
995
  - name: rest
980
996
  type: node?
981
997
  kind: pattern expression
998
+ comment: |
999
+ Represents the rest element of the array pattern.
1000
+
1001
+ foo in *bar
1002
+ ^^^^
982
1003
  - name: posts
983
1004
  type: node[]
984
1005
  kind: pattern expression
1006
+ comment: |
1007
+ Represents the elements after the rest element of the array pattern.
1008
+
1009
+ foo in *bar, baz
1010
+ ^^^
985
1011
  - name: opening_loc
986
1012
  type: location?
1013
+ comment: |
1014
+ Represents the opening location of the array pattern.
1015
+
1016
+ foo in [1, 2]
1017
+ ^
987
1018
  - name: closing_loc
988
1019
  type: location?
1020
+ comment: |
1021
+ Represents the closing location of the array pattern.
1022
+
1023
+ foo in [1, 2]
1024
+ ^
989
1025
  comment: |
990
1026
  Represents an array pattern in pattern matching.
991
1027
 
@@ -995,8 +1031,8 @@ nodes:
995
1031
  foo in [1, 2]
996
1032
  ^^^^^^^^^^^^^
997
1033
 
998
- foo in *1
999
- ^^^^^^^^^
1034
+ foo in *bar
1035
+ ^^^^^^^^^^^
1000
1036
 
1001
1037
  foo in Bar[]
1002
1038
  ^^^^^^^^^^^^
@@ -1083,20 +1119,50 @@ nodes:
1083
1119
  fields:
1084
1120
  - name: begin_keyword_loc
1085
1121
  type: location?
1122
+ comment: |
1123
+ Represents the location of the `begin` keyword.
1124
+
1125
+ begin x end
1126
+ ^^^^^
1086
1127
  - name: statements
1087
1128
  type: node?
1088
1129
  kind: StatementsNode
1130
+ comment: |
1131
+ Represents the statements within the begin block.
1132
+
1133
+ begin x end
1134
+ ^
1089
1135
  - name: rescue_clause
1090
1136
  type: node?
1091
1137
  kind: RescueNode
1138
+ comment: |
1139
+ Represents the rescue clause within the begin block.
1140
+
1141
+ begin x; rescue y; end
1142
+ ^^^^^^^^
1092
1143
  - name: else_clause
1093
1144
  type: node?
1094
1145
  kind: ElseNode
1146
+ comment: |
1147
+ Represents the else clause within the begin block.
1148
+
1149
+ begin x; rescue y; else z; end
1150
+ ^^^^^^
1095
1151
  - name: ensure_clause
1096
1152
  type: node?
1097
1153
  kind: EnsureNode
1154
+ comment: |
1155
+ Represents the ensure clause within the begin block.
1156
+
1157
+ begin x; ensure y; end
1158
+ ^^^^^^^^
1098
1159
  - name: end_keyword_loc
1099
1160
  type: location?
1161
+ comment: |
1162
+ Represents the location of the `end` keyword.
1163
+
1164
+ begin x end
1165
+ ^^^
1100
1166
  newline: false
1101
1167
  comment: |
1102
1168
  Represents a begin statement.
@@ -1110,8 +1176,18 @@ nodes:
1110
1176
  - name: expression
1111
1177
  type: node?
1112
1178
  kind: non-void expression
1179
+ comment: |
1180
+ The expression that is being passed as a block argument. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
1181
+
1182
+ foo(&args)
1183
+ ^^^^^
1113
1184
  - name: operator_loc
1114
1185
  type: location
1186
+ comment: |
1187
+ Represents the location of the `&` operator.
1188
+
1189
+ foo(&args)
1190
+ ^
1115
1191
  comment: |
1116
1192
  Represents a block argument using `&`.
1117
1193
 
@@ -1122,6 +1198,11 @@ nodes:
1122
1198
  fields:
1123
1199
  - name: name
1124
1200
  type: constant
1201
+ comment: |
1202
+ The name of the block local variable.
1203
+
1204
+ a { |; b| } # name `:b`
1205
+ ^
1125
1206
  comment: |
1126
1207
  Represents a block local variable.
1127
1208
 
@@ -1131,21 +1212,50 @@ nodes:
1131
1212
  fields:
1132
1213
  - name: locals
1133
1214
  type: constant[]
1215
+ comment: |
1216
+ The local variables declared in the block.
1217
+
1218
+ [1, 2, 3].each { |i| puts x } # locals: [:i]
1219
+ ^
1134
1220
  - name: parameters
1135
1221
  type: node?
1136
1222
  kind:
1137
1223
  - BlockParametersNode
1138
1224
  - NumberedParametersNode
1139
1225
  - ItParametersNode
1226
+ comment: |
1227
+ The parameters of the block.
1228
+
1229
+ [1, 2, 3].each { |i| puts x }
1230
+ ^^^
1231
+ [1, 2, 3].each { puts _1 }
1232
+ ^^^^^^^^^^^
1233
+ [1, 2, 3].each { puts it }
1234
+ ^^^^^^^^^^^
1140
1235
  - name: body
1141
1236
  type: node?
1142
1237
  kind:
1143
1238
  - StatementsNode
1144
1239
  - BeginNode
1240
+ comment: |
1241
+ The body of the block.
1242
+
1243
+ [1, 2, 3].each { |i| puts x }
1244
+ ^^^^^^
1145
1245
  - name: opening_loc
1146
1246
  type: location
1247
+ comment: |
1248
+ Represents the location of the opening `|`.
1249
+
1250
+ [1, 2, 3].each { |i| puts x }
1251
+ ^
1147
1252
  - name: closing_loc
1148
1253
  type: location
1254
+ comment: |
1255
+ Represents the location of the closing `|`.
1256
+
1257
+ [1, 2, 3].each { |i| puts x }
1258
+ ^
1149
1259
  comment: |
1150
1260
  Represents a block of ruby code.
1151
1261
 
@@ -1156,10 +1266,27 @@ nodes:
1156
1266
  fields:
1157
1267
  - name: name
1158
1268
  type: constant?
1269
+ comment: |
1270
+ The name of the block parameter.
1271
+
1272
+ def a(&b) # name `:b`
1273
+ ^
1274
+ end
1159
1275
  - name: name_loc
1160
1276
  type: location?
1277
+ comment: |
1278
+ Represents the location of the block parameter name.
1279
+
1280
+ def a(&b)
1281
+ ^
1161
1282
  - name: operator_loc
1162
1283
  type: location
1284
+ comment: |
1285
+ Represents the location of the `&` operator.
1286
+
1287
+ def a(&b)
1288
+ ^
1289
+ end
1163
1290
  comment: |
1164
1291
  Represents a block parameter of a method, block, or lambda definition.
1165
1292
 
@@ -1171,13 +1298,49 @@ nodes:
1171
1298
  - name: parameters
1172
1299
  type: node?
1173
1300
  kind: ParametersNode
1301
+ comment: |
1302
+ Represents the parameters of the block.
1303
+
1304
+ -> (a, b = 1; local) { }
1305
+ ^^^^^^^^
1306
+
1307
+ foo do |a, b = 1; local|
1308
+ ^^^^^^^^
1309
+ end
1174
1310
  - name: locals
1175
1311
  type: node[]
1176
1312
  kind: BlockLocalVariableNode
1313
+ comment: |
1314
+ Represents the local variables of the block.
1315
+
1316
+ -> (a, b = 1; local) { }
1317
+ ^^^^^
1318
+
1319
+ foo do |a, b = 1; local|
1320
+ ^^^^^
1321
+ end
1177
1322
  - name: opening_loc
1178
1323
  type: location?
1324
+ comment: |
1325
+ Represents the opening location of the block parameters.
1326
+
1327
+ -> (a, b = 1; local) { }
1328
+ ^
1329
+
1330
+ foo do |a, b = 1; local|
1331
+ ^
1332
+ end
1179
1333
  - name: closing_loc
1180
1334
  type: location?
1335
+ comment: |
1336
+ Represents the closing location of the block parameters.
1337
+
1338
+ -> (a, b = 1; local) { }
1339
+ ^
1340
+
1341
+ foo do |a, b = 1; local|
1342
+ ^
1343
+ end
1181
1344
  comment: |
1182
1345
  Represents a block's parameters declaration.
1183
1346
 
@@ -1215,19 +1378,54 @@ nodes:
1215
1378
  - name: receiver
1216
1379
  type: node?
1217
1380
  kind: non-void expression
1381
+ comment: |
1382
+ The object that the method is being called on. This can be either `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
1383
+
1384
+ foo.bar &&= value
1385
+ ^^^
1218
1386
  - name: call_operator_loc
1219
1387
  type: location?
1388
+ comment: |
1389
+ Represents the location of the call operator.
1390
+
1391
+ foo.bar &&= value
1392
+ ^
1220
1393
  - name: message_loc
1221
1394
  type: location?
1395
+ comment: |
1396
+ Represents the location of the message.
1397
+
1398
+ foo.bar &&= value
1399
+ ^^^
1222
1400
  - name: read_name
1223
1401
  type: constant
1402
+ comment: |
1403
+ Represents the name of the method being called.
1404
+
1405
+ foo.bar &&= value # read_name `:bar`
1406
+ ^^^
1224
1407
  - name: write_name
1225
1408
  type: constant
1409
+ comment: |
1410
+ Represents the name of the method being written to.
1411
+
1412
+ foo.bar &&= value # write_name `:bar=`
1413
+ ^^^
1226
1414
  - name: operator_loc
1227
1415
  type: location
1416
+ comment: |
1417
+ Represents the location of the operator.
1418
+
1419
+ foo.bar &&= value
1420
+ ^^^
1228
1421
  - name: value
1229
1422
  type: node
1230
1423
  kind: non-void expression
1424
+ comment: |
1425
+ Represents the value being assigned.
1426
+
1427
+ foo.bar &&= value
1428
+ ^^^^^
1231
1429
  comment: |
1232
1430
  Represents the use of the `&&=` operator on a call.
1233
1431
 
@@ -1252,22 +1450,59 @@ nodes:
1252
1450
  ^^^
1253
1451
  - name: call_operator_loc
1254
1452
  type: location?
1453
+ comment: |
1454
+ Represents the location of the call operator.
1455
+
1456
+ foo.bar
1457
+ ^
1458
+
1459
+ foo&.bar
1460
+ ^^
1255
1461
  - name: name
1256
1462
  type: constant
1463
+ comment: |
1464
+ Represents the name of the method being called.
1465
+
1466
+ foo.bar # name `:foo`
1467
+ ^^^
1257
1468
  - name: message_loc
1258
1469
  type: location?
1470
+ comment: |
1471
+ Represents the location of the message.
1472
+
1473
+ foo.bar
1474
+ ^^^
1259
1475
  - name: opening_loc
1260
1476
  type: location?
1477
+ comment: |
1478
+ Represents the location of the left parenthesis.
1479
+ foo(bar)
1480
+ ^
1261
1481
  - name: arguments
1262
1482
  type: node?
1263
1483
  kind: ArgumentsNode
1484
+ comment: |
1485
+ Represents the arguments to the method call. These can be any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
1486
+
1487
+ foo(bar)
1488
+ ^^^
1264
1489
  - name: closing_loc
1265
1490
  type: location?
1491
+ comment: |
1492
+ Represents the location of the right parenthesis.
1493
+
1494
+ foo(bar)
1495
+ ^
1266
1496
  - name: block
1267
1497
  type: node?
1268
1498
  kind:
1269
1499
  - BlockNode
1270
1500
  - BlockArgumentNode
1501
+ comment: |
1502
+ Represents the block that is being passed to the method.
1503
+
1504
+ foo { |a| a }
1505
+ ^^^^^^^^^
1271
1506
  comment: |
1272
1507
  Represents a method call, in all of the various forms that can take.
1273
1508
 
@@ -1294,21 +1529,61 @@ nodes:
1294
1529
  - name: receiver
1295
1530
  type: node?
1296
1531
  kind: non-void expression
1532
+ comment: |
1533
+ The object that the method is being called on. This can be either `nil` or any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
1534
+
1535
+ foo.bar += value
1536
+ ^^^
1297
1537
  - name: call_operator_loc
1298
1538
  type: location?
1539
+ comment: |
1540
+ Represents the location of the call operator.
1541
+
1542
+ foo.bar += value
1543
+ ^
1299
1544
  - name: message_loc
1300
1545
  type: location?
1546
+ comment: |
1547
+ Represents the location of the message.
1548
+
1549
+ foo.bar += value
1550
+ ^^^
1301
1551
  - name: read_name
1302
1552
  type: constant
1553
+ comment: |
1554
+ Represents the name of the method being called.
1555
+
1556
+ foo.bar += value # read_name `:bar`
1557
+ ^^^
1303
1558
  - name: write_name
1304
1559
  type: constant
1560
+ comment: |
1561
+ Represents the name of the method being written to.
1562
+
1563
+ foo.bar += value # write_name `:bar=`
1564
+ ^^^
1305
1565
  - name: binary_operator
1306
1566
  type: constant
1567
+ comment: |
1568
+ Represents the binary operator being used.
1569
+
1570
+ foo.bar += value # binary_operator `:+`
1571
+ ^
1307
1572
  - name: binary_operator_loc
1308
1573
  type: location
1574
+ comment: |
1575
+ Represents the location of the binary operator.
1576
+
1577
+ foo.bar += value
1578
+ ^^
1309
1579
  - name: value
1310
1580
  type: node
1311
1581
  kind: non-void expression
1582
+ comment: |
1583
+ Represents the value being assigned.
1584
+
1585
+ foo.bar += value
1586
+ ^^^^^
1312
1587
  comment: |
1313
1588
  Represents the use of an assignment operator on a call.
1314
1589
 
@@ -1320,19 +1595,54 @@ nodes:
1320
1595
  - name: receiver
1321
1596
  type: node?
1322
1597
  kind: non-void expression
1598
+ comment: |
1599
+ The object that the method is being called on. This can be either `nil` or any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
1600
+
1601
+ foo.bar ||= value
1602
+ ^^^
1323
1603
  - name: call_operator_loc
1324
1604
  type: location?
1605
+ comment: |
1606
+ Represents the location of the call operator.
1607
+
1608
+ foo.bar ||= value
1609
+ ^
1325
1610
  - name: message_loc
1326
1611
  type: location?
1612
+ comment: |
1613
+ Represents the location of the message.
1614
+
1615
+ foo.bar ||= value
1616
+ ^^^
1327
1617
  - name: read_name
1328
1618
  type: constant
1619
+ comment: |
1620
+ Represents the name of the method being called.
1621
+
1622
+ foo.bar ||= value # read_name `:bar`
1623
+ ^^^
1329
1624
  - name: write_name
1330
1625
  type: constant
1626
+ comment: |
1627
+ Represents the name of the method being written to.
1628
+
1629
+ foo.bar ||= value # write_name `:bar=`
1630
+ ^^^
1331
1631
  - name: operator_loc
1332
1632
  type: location
1633
+ comment: |
1634
+ Represents the location of the operator.
1635
+
1636
+ foo.bar ||= value
1637
+ ^^^
1333
1638
  - name: value
1334
1639
  type: node
1335
1640
  kind: non-void expression
1641
+ comment: |
1642
+ Represents the value being assigned.
1643
+
1644
+ foo.bar ||= value
1645
+ ^^^^^
1336
1646
  comment: |
1337
1647
  Represents the use of the `||=` operator on a call.
1338
1648
 
@@ -1344,12 +1654,32 @@ nodes:
1344
1654
  - name: receiver
1345
1655
  type: node
1346
1656
  kind: non-void expression
1657
+ comment: |
1658
+ The object that the method is being called on. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
1659
+
1660
+ foo.bar = 1
1661
+ ^^^
1347
1662
  - name: call_operator_loc
1348
1663
  type: location
1664
+ comment: |
1665
+ Represents the location of the call operator.
1666
+
1667
+ foo.bar = 1
1668
+ ^
1349
1669
  - name: name
1350
1670
  type: constant
1671
+ comment: |
1672
+ Represents the name of the method being called.
1673
+
1674
+ foo.bar = 1 # name `:foo`
1675
+ ^^^
1351
1676
  - name: message_loc
1352
1677
  type: location
1678
+ comment: |
1679
+ Represents the location of the message.
1680
+
1681
+ foo.bar = 1
1682
+ ^^^
1353
1683
  comment: |
1354
1684
  Represents assigning to a method call.
1355
1685
 
@@ -1368,11 +1698,26 @@ nodes:
1368
1698
  - name: value
1369
1699
  type: node
1370
1700
  kind: pattern expression
1701
+ comment: |
1702
+ Represents the value to capture.
1703
+
1704
+ foo => bar
1705
+ ^^^
1371
1706
  - name: target
1372
1707
  type: node
1373
1708
  kind: LocalVariableTargetNode
1709
+ comment: |
1710
+ Represents the target of the capture.
1711
+
1712
+ foo => bar
1713
+ ^^^
1374
1714
  - name: operator_loc
1375
1715
  type: location
1716
+ comment: |
1717
+ Represents the location of the `=>` operator.
1718
+
1719
+ foo => bar
1720
+ ^^
1376
1721
  comment: |
1377
1722
  Represents assigning to a local variable in pattern matching.
1378
1723
 
@@ -1383,16 +1728,41 @@ nodes:
1383
1728
  - name: predicate
1384
1729
  type: node?
1385
1730
  kind: non-void expression
1731
+ comment: |
1732
+ Represents the predicate of the case match. This can be either `nil` or any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
1733
+
1734
+ case true; in false; end
1735
+ ^^^^
1386
1736
  - name: conditions
1387
1737
  type: node[]
1388
1738
  kind: InNode
1739
+ comment: |
1740
+ Represents the conditions of the case match.
1741
+
1742
+ case true; in false; end
1743
+ ^^^^^^^^
1389
1744
  - name: else_clause
1390
1745
  type: node?
1391
1746
  kind: ElseNode
1747
+ comment: |
1748
+ Represents the else clause of the case match.
1749
+
1750
+ case true; in false; else; end
1751
+ ^^^^
1392
1752
  - name: case_keyword_loc
1393
1753
  type: location
1754
+ comment: |
1755
+ Represents the location of the `case` keyword.
1756
+
1757
+ case true; in false; end
1758
+ ^^^^
1394
1759
  - name: end_keyword_loc
1395
1760
  type: location
1761
+ comment: |
1762
+ Represents the location of the `end` keyword.
1763
+
1764
+ case true; in false; end
1765
+ ^^^
1396
1766
  comment: |
1397
1767
  Represents the use of a case statement for pattern matching.
1398
1768
 
@@ -1405,16 +1775,41 @@ nodes:
1405
1775
  - name: predicate
1406
1776
  type: node?
1407
1777
  kind: non-void expression
1778
+ comment: |
1779
+ Represents the predicate of the case statement. This can be either `nil` or any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
1780
+
1781
+ case true; when false; end
1782
+ ^^^^
1408
1783
  - name: conditions
1409
1784
  type: node[]
1410
1785
  kind: WhenNode
1786
+ comment: |
1787
+ Represents the conditions of the case statement.
1788
+
1789
+ case true; when false; end
1790
+ ^^^^^^^^^^
1411
1791
  - name: else_clause
1412
1792
  type: node?
1413
1793
  kind: ElseNode
1794
+ comment: |
1795
+ Represents the else clause of the case statement.
1796
+
1797
+ case true; when false; else; end
1798
+ ^^^^
1414
1799
  - name: case_keyword_loc
1415
1800
  type: location
1801
+ comment: |
1802
+ Represents the location of the `case` keyword.
1803
+
1804
+ case true; when false; end
1805
+ ^^^^
1416
1806
  - name: end_keyword_loc
1417
1807
  type: location
1808
+ comment: |
1809
+ Represents the location of the `end` keyword.
1810
+
1811
+ case true; when false; end
1812
+ ^^^
1418
1813
  comment: |
1419
1814
  Represents the use of a case statement.
1420
1815
 
@@ -1457,13 +1852,33 @@ nodes:
1457
1852
  fields:
1458
1853
  - name: name
1459
1854
  type: constant
1855
+ comment: |
1856
+ The name of the class variable, which is a `@@` followed by an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifiers).
1857
+
1858
+ @@target &&= value # name `:@@target`
1859
+ ^^^^^^^^
1460
1860
  - name: name_loc
1461
1861
  type: location
1862
+ comment: |
1863
+ Represents the location of the variable name.
1864
+
1865
+ @@target &&= value
1866
+ ^^^^^^^^
1462
1867
  - name: operator_loc
1463
1868
  type: location
1869
+ comment: |
1870
+ Represents the location of the `&&=` operator.
1871
+
1872
+ @@target &&= value
1873
+ ^^^
1464
1874
  - name: value
1465
1875
  type: node
1466
1876
  kind: non-void expression
1877
+ comment: |
1878
+ Represents the value being assigned. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
1879
+
1880
+ @@target &&= value
1881
+ ^^^^^
1467
1882
  comment: |
1468
1883
  Represents the use of the `&&=` operator for assignment to a class variable.
1469
1884
 
@@ -3684,7 +4099,7 @@ nodes:
3684
4099
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3685
4100
  end
3686
4101
 
3687
- `Foo, *splat, Bar` are in the `exceptions` field. `ex` is in the `exception` field.
4102
+ `Foo, *splat, Bar` are in the `exceptions` field. `ex` is in the `reference` field.
3688
4103
  - name: RestParameterNode
3689
4104
  flags: ParameterFlags
3690
4105
  fields:
@@ -3966,6 +4381,8 @@ nodes:
3966
4381
  fields:
3967
4382
  - name: keyword_loc
3968
4383
  type: location
4384
+ - name: do_keyword_loc
4385
+ type: location?
3969
4386
  - name: closing_loc
3970
4387
  type: location?
3971
4388
  - name: predicate
@@ -4007,6 +4424,8 @@ nodes:
4007
4424
  fields:
4008
4425
  - name: keyword_loc
4009
4426
  type: location
4427
+ - name: do_keyword_loc
4428
+ type: location?
4010
4429
  - name: closing_loc
4011
4430
  type: location?
4012
4431
  - name: predicate