@@ -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)
@@ -1405,6 +1438,27 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
1405
1438
return . visitChildren
1406
1439
}
1407
1440
1441
+ override func visit( _ node: EnumCaseParameterListSyntax ) -> SyntaxVisitorContinueKind {
1442
+ if let lastElement = node. last {
1443
+ if let trailingComma = lastElement. trailingComma {
1444
+ ignoredTokens. insert ( trailingComma)
1445
+ }
1446
+ before ( node. first? . firstToken ( viewMode: . sourceAccurate) , tokens: . commaDelimitedRegionStart)
1447
+ let endToken =
1448
+ Token . commaDelimitedRegionEnd (
1449
+ isCollection: false ,
1450
+ hasTrailingComma: lastElement. trailingComma != nil ,
1451
+ isSingleElement: node. first == lastElement
1452
+ )
1453
+ if lastElement. defaultValue != nil {
1454
+ after ( lastElement. defaultValue? . lastToken ( viewMode: . sourceAccurate) , tokens: [ endToken] )
1455
+ } else {
1456
+ after ( lastElement. type. lastToken ( viewMode: . sourceAccurate) , tokens: [ endToken] )
1457
+ }
1458
+ }
1459
+ return . visitChildren
1460
+ }
1461
+
1408
1462
override func visit( _ node: FunctionParameterClauseSyntax ) -> SyntaxVisitorContinueKind {
1409
1463
// Prioritize keeping ") throws -> <return_type>" together. We can only do this if the function
1410
1464
// has arguments.
@@ -1417,6 +1471,29 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
1417
1471
return . visitChildren
1418
1472
}
1419
1473
1474
+ override func visit( _ node: FunctionParameterListSyntax ) -> SyntaxVisitorContinueKind {
1475
+ if let lastElement = node. last {
1476
+ if let trailingComma = lastElement. trailingComma {
1477
+ ignoredTokens. insert ( trailingComma)
1478
+ }
1479
+ before ( node. first? . firstToken ( viewMode: . sourceAccurate) , tokens: . commaDelimitedRegionStart)
1480
+ let endToken =
1481
+ Token . commaDelimitedRegionEnd (
1482
+ isCollection: false ,
1483
+ hasTrailingComma: lastElement. trailingComma != nil ,
1484
+ isSingleElement: node. first == lastElement
1485
+ )
1486
+ if lastElement. defaultValue != nil {
1487
+ after ( lastElement. defaultValue? . lastToken ( viewMode: . sourceAccurate) , tokens: [ endToken] )
1488
+ } else if lastElement. ellipsis != nil {
1489
+ after ( lastElement. ellipsis? . lastToken ( viewMode: . sourceAccurate) , tokens: [ endToken] )
1490
+ } else {
1491
+ after ( lastElement. type. lastToken ( viewMode: . sourceAccurate) , tokens: [ endToken] )
1492
+ }
1493
+ }
1494
+ return . visitChildren
1495
+ }
1496
+
1420
1497
override func visit( _ node: ClosureParameterSyntax ) -> SyntaxVisitorContinueKind {
1421
1498
before ( node. firstToken ( viewMode: . sourceAccurate) , tokens: . open)
1422
1499
arrangeAttributeList ( node. attributes)
@@ -1722,6 +1799,28 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
1722
1799
return . visitChildren
1723
1800
}
1724
1801
1802
+ override func visit( _ node: GenericParameterListSyntax ) -> SyntaxVisitorContinueKind {
1803
+ if let lastElement = node. last {
1804
+ if let trailingComma = lastElement. trailingComma {
1805
+ ignoredTokens. insert ( trailingComma)
1806
+ }
1807
+ before ( node. first? . firstToken ( viewMode: . sourceAccurate) , tokens: . commaDelimitedRegionStart)
1808
+ let endToken =
1809
+ Token . commaDelimitedRegionEnd (
1810
+ isCollection: false ,
1811
+ hasTrailingComma: lastElement. trailingComma != nil ,
1812
+ isSingleElement: node. first == lastElement
1813
+ )
1814
+
1815
+ if lastElement. inheritedType != nil {
1816
+ after ( lastElement. inheritedType? . lastToken ( viewMode: . sourceAccurate) , tokens: [ endToken] )
1817
+ } else {
1818
+ after ( lastElement. name. lastToken ( viewMode: . sourceAccurate) , tokens: [ endToken] )
1819
+ }
1820
+ }
1821
+ return . visitChildren
1822
+ }
1823
+
1725
1824
override func visit( _ node: PrimaryAssociatedTypeClauseSyntax ) -> SyntaxVisitorContinueKind {
1726
1825
after ( node. leftAngle, tokens: . break( . open, size: 0 ) , . open( argumentListConsistency ( ) ) )
1727
1826
before ( node. rightAngle, tokens: . break( . close, size: 0 ) , . close)
@@ -1772,6 +1871,24 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
1772
1871
return . visitChildren
1773
1872
}
1774
1873
1874
+ override func visit( _ node: TuplePatternElementListSyntax ) -> SyntaxVisitorContinueKind {
1875
+ if let lastElement = node. last {
1876
+ if let trailingComma = lastElement. trailingComma {
1877
+ ignoredTokens. insert ( trailingComma)
1878
+ }
1879
+ before ( node. first? . firstToken ( viewMode: . sourceAccurate) , tokens: . commaDelimitedRegionStart)
1880
+ let endToken =
1881
+ Token . commaDelimitedRegionEnd (
1882
+ isCollection: false ,
1883
+ hasTrailingComma: lastElement. trailingComma != nil ,
1884
+ isSingleElement: node. first == lastElement
1885
+ )
1886
+
1887
+ after ( lastElement. pattern. lastToken ( viewMode: . sourceAccurate) , tokens: [ endToken] )
1888
+ }
1889
+ return . visitChildren
1890
+ }
1891
+
1775
1892
override func visit( _ node: TryExprSyntax ) -> SyntaxVisitorContinueKind {
1776
1893
before (
1777
1894
node. expression. firstToken ( viewMode: . sourceAccurate) ,
0 commit comments