@@ -85,6 +85,105 @@ private final class TokenStreamCreator: SyntaxVisitor {
85
85
86
86
override func visitPre( _ node: Syntax ) { }
87
87
88
+ // MARK: - Type declaration nodes
89
+
90
+ override func visit( _ node: ClassDeclSyntax ) {
91
+ arrangeTypeDeclBlock (
92
+ node,
93
+ attributes: node. attributes,
94
+ typeKeyword: node. classKeyword,
95
+ members: node. members,
96
+ genericWhereClause: node. genericWhereClause)
97
+ super. visit ( node)
98
+ }
99
+
100
+ override func visit( _ node: StructDeclSyntax ) {
101
+ arrangeTypeDeclBlock (
102
+ node,
103
+ attributes: node. attributes,
104
+ typeKeyword: node. structKeyword,
105
+ members: node. members,
106
+ genericWhereClause: node. genericWhereClause)
107
+ super. visit ( node)
108
+ }
109
+
110
+ override func visit( _ node: EnumDeclSyntax ) {
111
+ arrangeTypeDeclBlock (
112
+ node,
113
+ attributes: node. attributes,
114
+ typeKeyword: node. enumKeyword,
115
+ members: node. members,
116
+ genericWhereClause: node. genericWhereClause)
117
+ super. visit ( node)
118
+ }
119
+
120
+ override func visit( _ node: ProtocolDeclSyntax ) {
121
+ arrangeTypeDeclBlock (
122
+ node,
123
+ attributes: node. attributes,
124
+ typeKeyword: node. protocolKeyword,
125
+ members: node. members,
126
+ genericWhereClause: node. genericWhereClause)
127
+ super. visit ( node)
128
+ }
129
+
130
+ override func visit( _ node: ExtensionDeclSyntax ) {
131
+ arrangeTypeDeclBlock (
132
+ node,
133
+ attributes: node. attributes,
134
+ typeKeyword: node. extensionKeyword,
135
+ members: node. members,
136
+ genericWhereClause: node. genericWhereClause)
137
+ super. visit ( node)
138
+ }
139
+
140
+ /// Applies formatting tokens to the tokens in the given type declaration node (i.e., a class,
141
+ /// struct, enum, protocol, or extension).
142
+ private func arrangeTypeDeclBlock(
143
+ _ node: Syntax ,
144
+ attributes: AttributeListSyntax ? ,
145
+ typeKeyword: TokenSyntax ,
146
+ members: MemberDeclBlockSyntax ,
147
+ genericWhereClause: GenericWhereClauseSyntax ?
148
+ ) {
149
+ // TODO(allevato): If `EnumDeclSyntax` is updated to extend `DeclGroupSyntax` (I can't see a
150
+ // reason that it shouldn't), then we can simplify this function's signature by constraining
151
+ // `node` to that protocol and removing the explicit `attributes` and `members` arguments.
152
+
153
+ if let attributes = attributes {
154
+ before ( node. firstToken, tokens: . space( size: 0 ) , . open( . consistent, 0 ) )
155
+ after ( attributes. lastToken, tokens: . open)
156
+ } else {
157
+ before ( node. firstToken, tokens: . space( size: 0 ) , . open( . consistent, 0 ) , . open)
158
+ }
159
+
160
+ after ( typeKeyword, tokens: . break)
161
+
162
+ if let genericWhereClause = genericWhereClause {
163
+ before (
164
+ genericWhereClause. firstToken,
165
+ tokens: . break, . open( . inconsistent, 0 ) , . break( size: 0 ) , . open( . consistent, 0 )
166
+ )
167
+ after ( genericWhereClause. lastToken, tokens: . break, . close, . close)
168
+ } else {
169
+ before ( members. leftBrace, tokens: . break)
170
+ }
171
+
172
+ if !members. members. isEmpty {
173
+ after (
174
+ members. leftBrace,
175
+ tokens: . close, . close, . break( size: 0 , offset: 2 ) , . open( . consistent, 0 )
176
+ )
177
+ before ( members. rightBrace, tokens: . break( size: 0 , offset: - 2 ) , . close)
178
+ } else {
179
+ // The size-0 break in the empty case allows for a break between the braces in the rare event
180
+ // that the declaration would be exactly the column limit + 1.
181
+ after ( members. leftBrace, tokens: . close, . close, . break( size: 0 ) )
182
+ }
183
+ }
184
+
185
+ // TODO: - Other nodes (yet to be organized)
186
+
88
187
override func visit( _ node: DeclNameArgumentsSyntax ) {
89
188
super. visit ( node)
90
189
}
@@ -337,34 +436,6 @@ private final class TokenStreamCreator: SyntaxVisitor {
337
436
super. visit ( node)
338
437
}
339
438
340
- override func visit( _ node: EnumDeclSyntax ) {
341
- if let attributes = node. attributes {
342
- before ( node. firstToken, tokens: . space( size: 0 ) , . open( . consistent, 0 ) )
343
- after ( attributes. lastToken, tokens: . open)
344
- } else {
345
- before ( node. firstToken, tokens: . space( size: 0 ) , . open( . consistent, 0 ) , . open)
346
- }
347
-
348
- after ( node. enumKeyword, tokens: . break)
349
-
350
- before (
351
- node. genericWhereClause? . firstToken,
352
- tokens: . break, . open( . inconsistent, 0 ) , . break( size: 0 ) , . open( . consistent, 0 )
353
- )
354
- after ( node. genericWhereClause? . lastToken, tokens: . break, . close, . close)
355
-
356
- if node. genericWhereClause == nil {
357
- before ( node. members. leftBrace, tokens: . break)
358
- }
359
- after (
360
- node. members. leftBrace,
361
- tokens: . close, . close, . break( size: 0 , offset: 2 ) , . open( . consistent, 0 )
362
- )
363
- before ( node. members. rightBrace, tokens: . break( size: 0 , offset: - 2 ) , . close)
364
-
365
- super. visit ( node)
366
- }
367
-
368
439
override func visit( _ node: EnumCaseDeclSyntax ) {
369
440
before ( node. firstToken, tokens: . open)
370
441
after ( node. caseKeyword, tokens: . break)
@@ -645,34 +716,6 @@ private final class TokenStreamCreator: SyntaxVisitor {
645
716
super. visit ( node)
646
717
}
647
718
648
- override func visit( _ node: ClassDeclSyntax ) {
649
- if let attributes = node. attributes {
650
- before ( node. firstToken, tokens: . space( size: 0 ) , . open( . consistent, 0 ) )
651
- after ( attributes. lastToken, tokens: . open)
652
- } else {
653
- before ( node. firstToken, tokens: . space( size: 0 ) , . open( . consistent, 0 ) , . open)
654
- }
655
-
656
- after ( node. classKeyword, tokens: . break)
657
-
658
- before (
659
- node. genericWhereClause? . firstToken,
660
- tokens: . break, . open( . inconsistent, 0 ) , . break( size: 0 ) , . open( . consistent, 0 )
661
- )
662
- after ( node. genericWhereClause? . lastToken, tokens: . break, . close, . close)
663
-
664
- if node. genericWhereClause == nil {
665
- before ( node. members. leftBrace, tokens: . break)
666
- }
667
- after (
668
- node. members. leftBrace,
669
- tokens: . close, . close, . break( size: 0 , offset: 2 ) , . open( . consistent, 0 )
670
- )
671
- before ( node. members. rightBrace, tokens: . break( size: 0 , offset: - 2 ) , . close)
672
-
673
- super. visit ( node)
674
- }
675
-
676
719
override func visit( _ node: DeferStmtSyntax ) {
677
720
after ( node. deferKeyword, tokens: . break)
678
721
after ( node. body. leftBrace, tokens: . break( offset: 2 ) , . open( . consistent, 0 ) )
@@ -755,35 +798,6 @@ private final class TokenStreamCreator: SyntaxVisitor {
755
798
super. visit ( node)
756
799
}
757
800
758
- override func visit( _ node: StructDeclSyntax ) {
759
- if let attributes = node. attributes {
760
- before ( node. firstToken, tokens: . space( size: 0 ) , . open( . consistent, 0 ) )
761
- after ( attributes. lastToken, tokens: . open)
762
- } else {
763
- before ( node. firstToken, tokens: . space( size: 0 ) , . open( . consistent, 0 ) , . open)
764
- }
765
-
766
- after ( node. structKeyword, tokens: . break)
767
-
768
- before (
769
- node. genericWhereClause? . firstToken,
770
- tokens: . break, . open( . inconsistent, 0 ) , . break( size: 0 ) , . open( . consistent, 0 )
771
- )
772
- after ( node. genericWhereClause? . lastToken, tokens: . break, . close, . close)
773
-
774
-
775
- if node. genericWhereClause == nil {
776
- before ( node. members. leftBrace, tokens: . break)
777
- }
778
- after (
779
- node. members. leftBrace,
780
- tokens: . close, . close, . break( size: 0 , offset: 2 ) , . open( . consistent, 0 )
781
- )
782
- before ( node. members. rightBrace, tokens: . break( size: 0 , offset: - 2 ) , . close)
783
-
784
- super. visit ( node)
785
- }
786
-
787
801
override func visit( _ node: DotSelfExprSyntax ) {
788
802
super. visit ( node)
789
803
}
@@ -955,25 +969,6 @@ private final class TokenStreamCreator: SyntaxVisitor {
955
969
super. visit ( node)
956
970
}
957
971
958
- override func visit( _ node: ProtocolDeclSyntax ) {
959
- if let attributes = node. attributes {
960
- before ( node. firstToken, tokens: . space( size: 0 ) , . open( . consistent, 0 ) )
961
- after ( attributes. lastToken, tokens: . open)
962
- } else {
963
- before ( node. firstToken, tokens: . space( size: 0 ) , . open( . consistent, 0 ) , . open)
964
- }
965
-
966
- after ( node. protocolKeyword, tokens: . break)
967
- before ( node. members. leftBrace, tokens: . break)
968
- after (
969
- node. members. leftBrace,
970
- tokens: . close, . close, . break( size: 0 , offset: 2 ) , . open( . consistent, 0 )
971
- )
972
- before ( node. members. rightBrace, tokens: . break( size: 0 , offset: - 2 ) , . close)
973
-
974
- super. visit ( node)
975
- }
976
-
977
972
override func visit( _ node: SequenceExprSyntax ) {
978
973
before ( node. firstToken, tokens: . open)
979
974
after ( node. lastToken, tokens: . close)
@@ -1000,34 +995,6 @@ private final class TokenStreamCreator: SyntaxVisitor {
1000
995
super. visit ( node)
1001
996
}
1002
997
1003
- override func visit( _ node: ExtensionDeclSyntax ) {
1004
- if let attributes = node. attributes {
1005
- before ( node. firstToken, tokens: . space( size: 0 ) , . open( . consistent, 0 ) )
1006
- after ( attributes. lastToken, tokens: . open)
1007
- } else {
1008
- before ( node. firstToken, tokens: . space( size: 0 ) , . open( . consistent, 0 ) , . open)
1009
- }
1010
-
1011
- after ( node. extensionKeyword, tokens: . break)
1012
-
1013
- before (
1014
- node. genericWhereClause? . firstToken,
1015
- tokens: . break, . open( . inconsistent, 0 ) , . break( size: 0 ) , . open( . consistent, 0 )
1016
- )
1017
- after ( node. genericWhereClause? . lastToken, tokens: . break, . close, . close)
1018
-
1019
- if node. genericWhereClause == nil {
1020
- before ( node. members. leftBrace, tokens: . break)
1021
- }
1022
- after (
1023
- node. members. leftBrace,
1024
- tokens: . close, . close, . break( size: 0 , offset: 2 ) , . open( . consistent, 0 )
1025
- )
1026
- before ( node. members. rightBrace, tokens: . break( size: 0 , offset: - 2 ) , . close)
1027
-
1028
- super. visit ( node)
1029
- }
1030
-
1031
998
override func visit( _ node: InheritedTypeSyntax ) {
1032
999
before ( node. firstToken, tokens: . open( . inconsistent, 0 ) )
1033
1000
if let trailingComma = node. trailingComma {
0 commit comments