@@ -922,9 +922,19 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
922
922
}
923
923
924
924
override func visit( _ node: LabeledExprListSyntax ) -> SyntaxVisitorContinueKind {
925
- // Intentionally do nothing here. Since `TupleExprElement`s are used both in tuple expressions
926
- // and function argument lists, which need to be formatted, differently, those nodes manually
927
- // loop over the nodes and arrange them in those contexts.
925
+ if let lastElement = node. last {
926
+ if let trailingComma = lastElement. trailingComma {
927
+ ignoredTokens. insert ( trailingComma)
928
+ }
929
+ before ( node. first? . firstToken ( viewMode: . sourceAccurate) , tokens: . commaDelimitedRegionStart)
930
+ let endToken =
931
+ Token . commaDelimitedRegionEnd (
932
+ isCollection: false ,
933
+ hasTrailingComma: lastElement. trailingComma != nil ,
934
+ isSingleElement: node. first == lastElement
935
+ )
936
+ after ( lastElement. expression. lastToken ( viewMode: . sourceAccurate) , tokens: [ endToken] )
937
+ }
928
938
return . visitChildren
929
939
}
930
940
@@ -974,6 +984,7 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
974
984
before ( node. first? . firstToken ( viewMode: . sourceAccurate) , tokens: . commaDelimitedRegionStart)
975
985
let endToken =
976
986
Token . commaDelimitedRegionEnd (
987
+ isCollection: true ,
977
988
hasTrailingComma: lastElement. trailingComma != nil ,
978
989
isSingleElement: node. first == lastElement
979
990
)
@@ -1018,6 +1029,7 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
1018
1029
before ( node. first? . firstToken ( viewMode: . sourceAccurate) , tokens: . commaDelimitedRegionStart)
1019
1030
let endToken =
1020
1031
Token . commaDelimitedRegionEnd (
1032
+ isCollection: true ,
1021
1033
hasTrailingComma: lastElement. trailingComma != nil ,
1022
1034
isSingleElement: node. first == node. last
1023
1035
)
@@ -1291,6 +1303,27 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
1291
1303
return . visitChildren
1292
1304
}
1293
1305
1306
+ override func visit( _ node: ClosureCaptureListSyntax ) -> SyntaxVisitorContinueKind {
1307
+ if let lastElement = node. last {
1308
+ if let trailingComma = lastElement. trailingComma {
1309
+ ignoredTokens. insert ( trailingComma)
1310
+ }
1311
+ before ( node. first? . firstToken ( viewMode: . sourceAccurate) , tokens: . commaDelimitedRegionStart)
1312
+ let endToken =
1313
+ Token . commaDelimitedRegionEnd (
1314
+ isCollection: false ,
1315
+ hasTrailingComma: lastElement. trailingComma != nil ,
1316
+ isSingleElement: node. first == lastElement
1317
+ )
1318
+ if lastElement. initializer != nil {
1319
+ after ( lastElement. initializer? . lastToken ( viewMode: . sourceAccurate) , tokens: [ endToken] )
1320
+ } else {
1321
+ after ( lastElement. name. lastToken ( viewMode: . sourceAccurate) , tokens: [ endToken] )
1322
+ }
1323
+ }
1324
+ return . visitChildren
1325
+ }
1326
+
1294
1327
override func visit( _ node: ClosureCaptureSyntax ) -> SyntaxVisitorContinueKind {
1295
1328
before ( node. firstToken ( viewMode: . sourceAccurate) , tokens: . open)
1296
1329
after ( node. specifier? . lastToken ( viewMode: . sourceAccurate) , tokens: . break)
@@ -1363,6 +1396,7 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
1363
1396
rightDelimiter: node. rightParen,
1364
1397
forcesBreakBeforeRightDelimiter: false
1365
1398
)
1399
+
1366
1400
return . visitChildren
1367
1401
}
1368
1402
@@ -1405,6 +1439,27 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
1405
1439
return . visitChildren
1406
1440
}
1407
1441
1442
+ override func visit( _ node: EnumCaseParameterListSyntax ) -> SyntaxVisitorContinueKind {
1443
+ if let lastElement = node. last {
1444
+ if let trailingComma = lastElement. trailingComma {
1445
+ ignoredTokens. insert ( trailingComma)
1446
+ }
1447
+ before ( node. first? . firstToken ( viewMode: . sourceAccurate) , tokens: . commaDelimitedRegionStart)
1448
+ let endToken =
1449
+ Token . commaDelimitedRegionEnd (
1450
+ isCollection: false ,
1451
+ hasTrailingComma: lastElement. trailingComma != nil ,
1452
+ isSingleElement: node. first == lastElement
1453
+ )
1454
+ if lastElement. defaultValue != nil {
1455
+ after ( lastElement. defaultValue? . lastToken ( viewMode: . sourceAccurate) , tokens: [ endToken] )
1456
+ } else {
1457
+ after ( lastElement. type. lastToken ( viewMode: . sourceAccurate) , tokens: [ endToken] )
1458
+ }
1459
+ }
1460
+ return . visitChildren
1461
+ }
1462
+
1408
1463
override func visit( _ node: FunctionParameterClauseSyntax ) -> SyntaxVisitorContinueKind {
1409
1464
// Prioritize keeping ") throws -> <return_type>" together. We can only do this if the function
1410
1465
// has arguments.
@@ -1417,6 +1472,29 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
1417
1472
return . visitChildren
1418
1473
}
1419
1474
1475
+ override func visit( _ node: FunctionParameterListSyntax ) -> SyntaxVisitorContinueKind {
1476
+ if let lastElement = node. last {
1477
+ if let trailingComma = lastElement. trailingComma {
1478
+ ignoredTokens. insert ( trailingComma)
1479
+ }
1480
+ before ( node. first? . firstToken ( viewMode: . sourceAccurate) , tokens: . commaDelimitedRegionStart)
1481
+ let endToken =
1482
+ Token . commaDelimitedRegionEnd (
1483
+ isCollection: false ,
1484
+ hasTrailingComma: lastElement. trailingComma != nil ,
1485
+ isSingleElement: node. first == lastElement
1486
+ )
1487
+ if lastElement. defaultValue != nil {
1488
+ after ( lastElement. defaultValue? . lastToken ( viewMode: . sourceAccurate) , tokens: [ endToken] )
1489
+ } else if lastElement. ellipsis != nil {
1490
+ after ( lastElement. ellipsis? . lastToken ( viewMode: . sourceAccurate) , tokens: [ endToken] )
1491
+ } else {
1492
+ after ( lastElement. type. lastToken ( viewMode: . sourceAccurate) , tokens: [ endToken] )
1493
+ }
1494
+ }
1495
+ return . visitChildren
1496
+ }
1497
+
1420
1498
override func visit( _ node: ClosureParameterSyntax ) -> SyntaxVisitorContinueKind {
1421
1499
before ( node. firstToken ( viewMode: . sourceAccurate) , tokens: . open)
1422
1500
arrangeAttributeList ( node. attributes)
@@ -1722,6 +1800,28 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
1722
1800
return . visitChildren
1723
1801
}
1724
1802
1803
+ override func visit( _ node: GenericParameterListSyntax ) -> SyntaxVisitorContinueKind {
1804
+ if let lastElement = node. last {
1805
+ if let trailingComma = lastElement. trailingComma {
1806
+ ignoredTokens. insert ( trailingComma)
1807
+ }
1808
+ before ( node. first? . firstToken ( viewMode: . sourceAccurate) , tokens: . commaDelimitedRegionStart)
1809
+ let endToken =
1810
+ Token . commaDelimitedRegionEnd (
1811
+ isCollection: false ,
1812
+ hasTrailingComma: lastElement. trailingComma != nil ,
1813
+ isSingleElement: node. first == lastElement
1814
+ )
1815
+
1816
+ if lastElement. inheritedType != nil {
1817
+ after ( lastElement. inheritedType? . lastToken ( viewMode: . sourceAccurate) , tokens: [ endToken] )
1818
+ } else {
1819
+ after ( lastElement. name. lastToken ( viewMode: . sourceAccurate) , tokens: [ endToken] )
1820
+ }
1821
+ }
1822
+ return . visitChildren
1823
+ }
1824
+
1725
1825
override func visit( _ node: PrimaryAssociatedTypeClauseSyntax ) -> SyntaxVisitorContinueKind {
1726
1826
after ( node. leftAngle, tokens: . break( . open, size: 0 ) , . open( argumentListConsistency ( ) ) )
1727
1827
before ( node. rightAngle, tokens: . break( . close, size: 0 ) , . close)
@@ -1772,6 +1872,24 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
1772
1872
return . visitChildren
1773
1873
}
1774
1874
1875
+ override func visit( _ node: TuplePatternElementListSyntax ) -> SyntaxVisitorContinueKind {
1876
+ if let lastElement = node. last {
1877
+ if let trailingComma = lastElement. trailingComma {
1878
+ ignoredTokens. insert ( trailingComma)
1879
+ }
1880
+ before ( node. first? . firstToken ( viewMode: . sourceAccurate) , tokens: . commaDelimitedRegionStart)
1881
+ let endToken =
1882
+ Token . commaDelimitedRegionEnd (
1883
+ isCollection: false ,
1884
+ hasTrailingComma: lastElement. trailingComma != nil ,
1885
+ isSingleElement: node. first == lastElement
1886
+ )
1887
+
1888
+ after ( lastElement. pattern. lastToken ( viewMode: . sourceAccurate) , tokens: [ endToken] )
1889
+ }
1890
+ return . visitChildren
1891
+ }
1892
+
1775
1893
override func visit( _ node: TryExprSyntax ) -> SyntaxVisitorContinueKind {
1776
1894
before (
1777
1895
node. expression. firstToken ( viewMode: . sourceAccurate) ,
0 commit comments