@@ -922,9 +922,7 @@ 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
+ markCommaDelimitedRegion ( node)
928
926
return . visitChildren
929
927
}
930
928
@@ -967,18 +965,7 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
967
965
}
968
966
}
969
967
970
- if let lastElement = node. last {
971
- if let trailingComma = lastElement. trailingComma {
972
- ignoredTokens. insert ( trailingComma)
973
- }
974
- before ( node. first? . firstToken ( viewMode: . sourceAccurate) , tokens: . commaDelimitedRegionStart)
975
- let endToken =
976
- Token . commaDelimitedRegionEnd (
977
- hasTrailingComma: lastElement. trailingComma != nil ,
978
- isSingleElement: node. first == lastElement
979
- )
980
- after ( lastElement. expression. lastToken ( viewMode: . sourceAccurate) , tokens: [ endToken] )
981
- }
968
+ markCommaDelimitedRegion ( node)
982
969
return . visitChildren
983
970
}
984
971
@@ -1011,18 +998,7 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
1011
998
}
1012
999
}
1013
1000
1014
- if let lastElement = node. last {
1015
- if let trailingComma = lastElement. trailingComma {
1016
- ignoredTokens. insert ( trailingComma)
1017
- }
1018
- before ( node. first? . firstToken ( viewMode: . sourceAccurate) , tokens: . commaDelimitedRegionStart)
1019
- let endToken =
1020
- Token . commaDelimitedRegionEnd (
1021
- hasTrailingComma: lastElement. trailingComma != nil ,
1022
- isSingleElement: node. first == node. last
1023
- )
1024
- after ( lastElement. lastToken ( viewMode: . sourceAccurate) , tokens: endToken)
1025
- }
1001
+ markCommaDelimitedRegion ( node)
1026
1002
return . visitChildren
1027
1003
}
1028
1004
@@ -1291,6 +1267,11 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
1291
1267
return . visitChildren
1292
1268
}
1293
1269
1270
+ override func visit( _ node: ClosureCaptureListSyntax ) -> SyntaxVisitorContinueKind {
1271
+ markCommaDelimitedRegion ( node)
1272
+ return . visitChildren
1273
+ }
1274
+
1294
1275
override func visit( _ node: ClosureCaptureSyntax ) -> SyntaxVisitorContinueKind {
1295
1276
before ( node. firstToken ( viewMode: . sourceAccurate) , tokens: . open)
1296
1277
after ( node. specifier? . lastToken ( viewMode: . sourceAccurate) , tokens: . break)
@@ -1405,6 +1386,11 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
1405
1386
return . visitChildren
1406
1387
}
1407
1388
1389
+ override func visit( _ node: EnumCaseParameterListSyntax ) -> SyntaxVisitorContinueKind {
1390
+ markCommaDelimitedRegion ( node)
1391
+ return . visitChildren
1392
+ }
1393
+
1408
1394
override func visit( _ node: FunctionParameterClauseSyntax ) -> SyntaxVisitorContinueKind {
1409
1395
// Prioritize keeping ") throws -> <return_type>" together. We can only do this if the function
1410
1396
// has arguments.
@@ -1417,6 +1403,11 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
1417
1403
return . visitChildren
1418
1404
}
1419
1405
1406
+ override func visit( _ node: FunctionParameterListSyntax ) -> SyntaxVisitorContinueKind {
1407
+ markCommaDelimitedRegion ( node)
1408
+ return . visitChildren
1409
+ }
1410
+
1420
1411
override func visit( _ node: ClosureParameterSyntax ) -> SyntaxVisitorContinueKind {
1421
1412
before ( node. firstToken ( viewMode: . sourceAccurate) , tokens: . open)
1422
1413
arrangeAttributeList ( node. attributes)
@@ -1722,6 +1713,11 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
1722
1713
return . visitChildren
1723
1714
}
1724
1715
1716
+ override func visit( _ node: GenericParameterListSyntax ) -> SyntaxVisitorContinueKind {
1717
+ markCommaDelimitedRegion ( node)
1718
+ return . visitChildren
1719
+ }
1720
+
1725
1721
override func visit( _ node: PrimaryAssociatedTypeClauseSyntax ) -> SyntaxVisitorContinueKind {
1726
1722
after ( node. leftAngle, tokens: . break( . open, size: 0 ) , . open( argumentListConsistency ( ) ) )
1727
1723
before ( node. rightAngle, tokens: . break( . close, size: 0 ) , . close)
@@ -1772,6 +1768,11 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
1772
1768
return . visitChildren
1773
1769
}
1774
1770
1771
+ override func visit( _ node: TuplePatternElementListSyntax ) -> SyntaxVisitorContinueKind {
1772
+ markCommaDelimitedRegion ( node)
1773
+ return . visitChildren
1774
+ }
1775
+
1775
1776
override func visit( _ node: TryExprSyntax ) -> SyntaxVisitorContinueKind {
1776
1777
before (
1777
1778
node. expression. firstToken ( viewMode: . sourceAccurate) ,
@@ -4283,6 +4284,24 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
4283
4284
let hasCompoundExpression = !expr. is ( DeclReferenceExprSyntax . self)
4284
4285
return ( hasCompoundExpression, false )
4285
4286
}
4287
+
4288
+ /// Marks a comma-delimited region for the given list, inserting start/end tokens
4289
+ /// and recording the last element’s trailing comma (if any) to be ignored.
4290
+ private func markCommaDelimitedRegion< Node: CommaSeparatedListSyntaxProtocol > ( _ node: Node ) {
4291
+ if let lastElement = node. last {
4292
+ if let trailingComma = lastElement. trailingComma {
4293
+ ignoredTokens. insert ( trailingComma)
4294
+ }
4295
+ before ( node. first? . firstToken ( viewMode: . sourceAccurate) , tokens: . commaDelimitedRegionStart)
4296
+ let endToken =
4297
+ Token . commaDelimitedRegionEnd (
4298
+ isCollection: node. isCollection,
4299
+ hasTrailingComma: lastElement. trailingComma != nil ,
4300
+ isSingleElement: node. first == lastElement
4301
+ )
4302
+ after ( node. lastNodeForTrailingComma? . lastToken ( viewMode: . sourceAccurate) , tokens: [ endToken] )
4303
+ }
4304
+ }
4286
4305
}
4287
4306
4288
4307
private func isNestedInPostfixIfConfig( node: Syntax ) -> Bool {
0 commit comments