@@ -43,7 +43,7 @@ public final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor {
4343 parse (
4444 modifiers: node. modifiers,
4545 attributes: node. attributes,
46- trivia: node. leadingTrivia ,
46+ trivia: node. commentCommandTrivia ,
4747 inheritanceClause: node. inheritanceClause,
4848 genericParameterClause: node. genericParameterClause,
4949 genericWhereClause: node. genericWhereClause,
@@ -56,7 +56,7 @@ public final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor {
5656 parse (
5757 modifiers: node. modifiers,
5858 attributes: node. attributes,
59- trivia: node. leadingTrivia ,
59+ trivia: node. commentCommandTrivia ,
6060 inheritanceClause: node. inheritanceClause,
6161 genericParameterClause: node. genericParameterClause,
6262 genericWhereClause: node. genericWhereClause,
@@ -69,7 +69,7 @@ public final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor {
6969 parse (
7070 modifiers: node. modifiers,
7171 attributes: node. attributes,
72- trivia: node. leadingTrivia ,
72+ trivia: node. commentCommandTrivia ,
7373 inheritanceClause: node. inheritanceClause,
7474 genericWhereClause: node. genericWhereClause,
7575 at: node. name. positionAfterSkippingLeadingTrivia
@@ -80,7 +80,7 @@ public final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor {
8080 parse (
8181 modifiers: node. modifiers,
8282 attributes: node. attributes,
83- trivia: node. leadingTrivia ,
83+ trivia: node. commentCommandTrivia ,
8484 inheritanceClause: node. inheritanceClause,
8585 genericParameterClause: node. genericParameterClause,
8686 genericWhereClause: node. genericWhereClause,
@@ -93,7 +93,7 @@ public final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor {
9393 parse (
9494 modifiers: node. modifiers,
9595 attributes: node. attributes,
96- trivia: node. leadingTrivia ,
96+ trivia: node. commentCommandTrivia ,
9797 inheritanceClause: node. inheritanceClause,
9898 genericParameterClause: node. genericParameterClause,
9999 genericWhereClause: node. genericWhereClause,
@@ -128,7 +128,7 @@ public final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor {
128128 parse (
129129 modifiers: node. modifiers,
130130 attributes: node. attributes,
131- trivia: node. leadingTrivia ,
131+ trivia: node. commentCommandTrivia ,
132132 inheritanceClause: node. inheritanceClause,
133133 genericWhereClause: node. genericWhereClause,
134134 consumeCapitalSelfFunctionCalls: true ,
@@ -140,7 +140,7 @@ public final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor {
140140 parse (
141141 modifiers: node. modifiers,
142142 attributes: node. attributes,
143- trivia: node. leadingTrivia ,
143+ trivia: node. commentCommandTrivia ,
144144 parameterClause: node. signature. parameterClause,
145145 returnClause: node. signature. returnClause,
146146 genericParameterClause: node. genericParameterClause,
@@ -153,7 +153,7 @@ public final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor {
153153 parse (
154154 modifiers: node. modifiers,
155155 attributes: node. attributes,
156- trivia: node. leadingTrivia ,
156+ trivia: node. commentCommandTrivia ,
157157 parameterClause: node. signature. parameterClause,
158158 genericParameterClause: node. genericParameterClause,
159159 genericWhereClause: node. genericWhereClause,
@@ -165,7 +165,7 @@ public final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor {
165165 parse (
166166 modifiers: node. modifiers,
167167 attributes: node. attributes,
168- trivia: node. leadingTrivia ,
168+ trivia: node. commentCommandTrivia ,
169169 at: node. deinitKeyword. positionAfterSkippingLeadingTrivia
170170 )
171171 }
@@ -174,7 +174,7 @@ public final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor {
174174 parse (
175175 modifiers: node. modifiers,
176176 attributes: node. attributes,
177- trivia: node. leadingTrivia ,
177+ trivia: node. commentCommandTrivia ,
178178 parameterClause: node. parameterClause,
179179 returnClause: node. returnClause,
180180 genericParameterClause: node. genericParameterClause,
@@ -192,7 +192,7 @@ public final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor {
192192 parse (
193193 modifiers: node. modifiers,
194194 attributes: node. attributes,
195- trivia: node. leadingTrivia ,
195+ trivia: node. commentCommandTrivia ,
196196 variableType: binding. typeAnnotation? . type,
197197 closureParameterClause: closureParameters,
198198 returnClause: closureSignature? . returnClause,
@@ -210,7 +210,7 @@ public final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor {
210210 parse (
211211 modifiers: node. modifiers,
212212 attributes: node. attributes,
213- trivia: node. leadingTrivia,
213+ trivia: node. leadingTrivia. merging ( node . trailingTrivia ) ,
214214 at: binding. positionAfterSkippingLeadingTrivia
215215 )
216216 }
@@ -237,7 +237,7 @@ public final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor {
237237 parse (
238238 modifiers: node. modifiers,
239239 attributes: node. attributes,
240- trivia: node. leadingTrivia ,
240+ trivia: node. commentCommandTrivia ,
241241 variableType: type? . type,
242242 variableInitFunctionCallExpr: initializer? . expression. as ( FunctionCallExprSyntax . self) ,
243243 at: element. positionAfterSkippingLeadingTrivia
@@ -250,7 +250,7 @@ public final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor {
250250 parse (
251251 modifiers: node. modifiers,
252252 attributes: node. attributes,
253- trivia: node. leadingTrivia,
253+ trivia: node. leadingTrivia. merging ( node . trailingTrivia ) ,
254254 genericParameterClause: node. genericParameterClause,
255255 genericWhereClause: node. genericWhereClause,
256256 typeInitializerClause: node. initializer,
@@ -262,7 +262,7 @@ public final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor {
262262 parse (
263263 modifiers: node. modifiers,
264264 attributes: node. attributes,
265- trivia: node. leadingTrivia,
265+ trivia: node. leadingTrivia. merging ( node . trailingTrivia ) ,
266266 inheritanceClause: node. inheritanceClause,
267267 genericWhereClause: node. genericWhereClause,
268268 typeInitializerClause: node. initializer,
@@ -274,7 +274,7 @@ public final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor {
274274 parse (
275275 modifiers: nil ,
276276 attributes: nil ,
277- trivia: node. leadingTrivia ,
277+ trivia: node. commentCommandTrivia ,
278278 at: node. name. positionAfterSkippingLeadingTrivia
279279 )
280280 }
@@ -283,7 +283,7 @@ public final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor {
283283 parse (
284284 modifiers: node. modifiers,
285285 attributes: node. attributes,
286- trivia: node. leadingTrivia ,
286+ trivia: node. commentCommandTrivia ,
287287 at: node. name. positionAfterSkippingLeadingTrivia
288288 )
289289 }
@@ -517,3 +517,64 @@ public final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor {
517517 }
518518 }
519519}
520+
521+ // MARK: - Inline Comment Commands
522+
523+ private extension SyntaxProtocol {
524+ /// All trivia where inline comment commands can be found.
525+ ///
526+ /// Matches uses like these:
527+ ///
528+ /// ```
529+ /// // periphery:ignore
530+ /// Foo {
531+ /// }
532+ /// ```
533+ ///
534+ /// ```
535+ /// Foo { // periphery:ignore
536+ /// }
537+ /// ```
538+ ///
539+ /// ```
540+ /// Foo {} // periphery:ignore
541+ /// ```
542+ var commentCommandTrivia : Trivia {
543+ var commandTrivia = leadingTrivia
544+
545+ if let hasMemberBlock = self as? HasMemberBlock {
546+ commandTrivia = commandTrivia
547+ . merging ( hasMemberBlock. memberBlock. leftBrace. trailingTrivia)
548+ . merging ( hasMemberBlock. memberBlock. rightBrace. trailingTrivia)
549+ }
550+
551+ if let hasCodeBody = self as? HasCodeBody , let body = hasCodeBody. body {
552+ commandTrivia = commandTrivia
553+ . merging ( body. leftBrace. trailingTrivia)
554+ . merging ( body. rightBrace. trailingTrivia)
555+ }
556+
557+ return commandTrivia
558+ }
559+ }
560+
561+ /// Identifies types with a MemberBlockSyntax child
562+ private protocol HasMemberBlock {
563+ var memberBlock : MemberBlockSyntax { get }
564+ }
565+
566+ extension ActorDeclSyntax : HasMemberBlock { }
567+ extension ClassDeclSyntax : HasMemberBlock { }
568+ extension ProtocolDeclSyntax : HasMemberBlock { }
569+ extension ExtensionDeclSyntax : HasMemberBlock { }
570+ extension StructDeclSyntax : HasMemberBlock { }
571+ extension EnumDeclSyntax : HasMemberBlock { }
572+
573+ /// Identifies types with a CodeBlockSyntax child
574+ private protocol HasCodeBody {
575+ var body : CodeBlockSyntax ? { get }
576+ }
577+
578+ extension FunctionDeclSyntax : HasCodeBody { }
579+ extension InitializerDeclSyntax : HasCodeBody { }
580+ extension DeinitializerDeclSyntax : HasCodeBody { }
0 commit comments