Skip to content

Commit 62254a4

Browse files
committed
[NFC] [ASTGen] Refactor attribute attachment
Create a method that is used to attach attributes to a decl instead of assigning them directly. This is a convenient place to add logic which processes attributes after the decl they’re attached to has been converted to AST.
1 parent 73f1ec9 commit 62254a4

File tree

2 files changed

+22
-17
lines changed

2 files changed

+22
-17
lines changed

lib/ASTGen/Sources/ASTGen/DeclAttrs.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ extension ASTGenVisitor {
2323
var staticSpelling: BridgedStaticSpelling
2424
var staticLoc: BridgedSourceLoc
2525
var initContext: BridgedPatternBindingInitializer?
26+
27+
func attach(to decl: BridgedDecl) {
28+
decl.attrs = attributes
29+
}
2630
}
2731

2832
func generateDeclAttributes(_ node: some WithAttributesSyntax & WithModifiersSyntax, allowStatic: Bool) -> DeclAttributesResult {

lib/ASTGen/Sources/ASTGen/Decls.swift

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ extension ASTGenVisitor {
105105
underlyingType: self.generate(type: node.initializer.value),
106106
genericWhereClause: self.generate(genericWhereClause: node.genericWhereClause)
107107
)
108-
decl.asDecl.attrs = attrs.attributes
108+
attrs.attach(to: decl.asDecl)
109109
return decl
110110
}
111111

@@ -129,7 +129,7 @@ extension ASTGenVisitor {
129129
end: node.memberBlock.rightBrace
130130
)
131131
)
132-
decl.asDecl.attrs = attrs.attributes
132+
attrs.attach(to: decl.asDecl)
133133

134134
self.withDeclContext(decl.asDeclContext) {
135135
decl.setParsedMembers(self.generate(memberBlockItemList: node.memberBlock.members).lazy.bridgedArray(in: self))
@@ -158,7 +158,7 @@ extension ASTGenVisitor {
158158
end: node.memberBlock.rightBrace
159159
)
160160
)
161-
decl.asDecl.attrs = attrs.attributes
161+
attrs.attach(to: decl.asDecl)
162162

163163
self.withDeclContext(decl.asDeclContext) {
164164
decl.setParsedMembers(self.generate(memberBlockItemList: node.memberBlock.members).lazy.bridgedArray(in: self))
@@ -188,7 +188,7 @@ extension ASTGenVisitor {
188188
),
189189
isActor: false
190190
)
191-
decl.asDecl.attrs = attrs.attributes
191+
attrs.attach(to: decl.asDecl)
192192

193193
self.withDeclContext(decl.asDeclContext) {
194194
decl.setParsedMembers(self.generate(memberBlockItemList: node.memberBlock.members).lazy.bridgedArray(in: self))
@@ -218,7 +218,7 @@ extension ASTGenVisitor {
218218
),
219219
isActor: true
220220
)
221-
decl.asDecl.attrs = attrs.attributes
221+
attrs.attach(to: decl.asDecl)
222222

223223
self.withDeclContext(decl.asDeclContext) {
224224
decl.setParsedMembers(self.generate(memberBlockItemList: node.memberBlock.members).lazy.bridgedArray(in: self))
@@ -250,7 +250,7 @@ extension ASTGenVisitor {
250250
end: node.memberBlock.rightBrace
251251
)
252252
)
253-
decl.asDecl.attrs = attrs.attributes
253+
attrs.attach(to: decl.asDecl)
254254

255255
self.withDeclContext(decl.asDeclContext) {
256256
decl.setParsedMembers(self.generate(memberBlockItemList: node.memberBlock.members).lazy.bridgedArray(in: self))
@@ -275,7 +275,7 @@ extension ASTGenVisitor {
275275
defaultType: self.generate(type: node.initializer?.value),
276276
genericWhereClause: self.generate(genericWhereClause: node.genericWhereClause)
277277
)
278-
decl.asDecl.attrs = attrs.attributes
278+
attrs.attach(to: decl.asDecl)
279279
return decl
280280
}
281281
}
@@ -297,7 +297,7 @@ extension ASTGenVisitor {
297297
end: node.memberBlock.rightBrace
298298
)
299299
)
300-
decl.asDecl.attrs = attrs.attributes
300+
attrs.attach(to: decl.asDecl)
301301

302302
self.withDeclContext(decl.asDeclContext) {
303303
decl.setParsedMembers(self.generate(memberBlockItemList: node.memberBlock.members).lazy.bridgedArray(in: self))
@@ -334,7 +334,7 @@ extension ASTGenVisitor {
334334
guard let elemDecl = self.generate(enumCaseElement: elem) else {
335335
return nil
336336
}
337-
elemDecl.asDecl.attrs = attrs.attributes
337+
attrs.attach(to: elemDecl.asDecl)
338338
return elemDecl
339339
})
340340
return .createParsed(
@@ -419,7 +419,8 @@ extension ASTGenVisitor {
419419
throwsSpecifierLoc: self.generateSourceLoc(node.effectSpecifiers?.throwsClause),
420420
thrownType: self.generate(type: node.effectSpecifiers?.thrownError)
421421
)
422-
accessor.asDecl.setAttrs(attrs)
422+
// FIXME: Ought to use DeclAttributesResult.attach(to:)
423+
accessor.asDecl.attrs = attrs
423424
if let body = node.body {
424425
self.withDeclContext(accessor.asDeclContext) {
425426
accessor.setParsedBody(self.generate(codeBlock: body))
@@ -580,7 +581,7 @@ extension ASTGenVisitor {
580581
arrowLoc: self.generateSourceLoc(node.returnClause.arrow),
581582
returnType: self.generate(type: node.returnClause.type)
582583
)
583-
subscriptDecl.asDecl.attrs = attrs.attributes
584+
attrs.attach(to: subscriptDecl.asDecl)
584585

585586
if let accessors = node.accessorBlock {
586587
let storage = subscriptDecl.asAbstractStorageDecl
@@ -615,7 +616,7 @@ extension ASTGenVisitor {
615616
returnType: self.generate(type: node.signature.returnClause?.type),
616617
genericWhereClause: self.generate(genericWhereClause: node.genericWhereClause)
617618
)
618-
decl.asDecl.attrs = attrs.attributes
619+
attrs.attach(to: decl.asDecl)
619620

620621
if let body = node.body {
621622
self.withDeclContext(decl.asDeclContext) {
@@ -642,7 +643,7 @@ extension ASTGenVisitor {
642643
thrownType: self.generate(type: node.signature.effectSpecifiers?.thrownError),
643644
genericWhereClause: self.generate(genericWhereClause: node.genericWhereClause)
644645
)
645-
decl.asDecl.attrs = attrs.attributes
646+
attrs.attach(to: decl.asDecl)
646647

647648
if let body = node.body {
648649
self.withDeclContext(decl.asDeclContext) {
@@ -661,7 +662,7 @@ extension ASTGenVisitor {
661662
declContext: self.declContext,
662663
deinitKeywordLoc: self.generateSourceLoc(node.deinitKeyword)
663664
)
664-
decl.asDecl.attrs = attrs.attributes
665+
attrs.attach(to: decl.asDecl)
665666

666667
if let body = node.body {
667668
self.withDeclContext(decl.asDeclContext) {
@@ -691,7 +692,7 @@ extension ASTGenVisitor {
691692
resultType: self.generate(type: node.signature.returnClause?.type),
692693
definition: self.generate(expr: node.definition?.value)
693694
)
694-
decl.asDecl.setAttrs(attrs.attributes);
695+
attrs.attach(to: decl.asDecl)
695696
return decl;
696697
}
697698
}
@@ -870,7 +871,7 @@ extension ASTGenVisitor {
870871
lowerThanNames: self.generate(precedenceGroupNameList: body.lowerThanRelation?.precedenceGroups),
871872
rightBraceLoc: self.generateSourceLoc(node.rightBrace)
872873
)
873-
decl.asDecl.attrs = attrs.attributes
874+
attrs.attach(to: decl.asDecl)
874875
return decl
875876
}
876877
}
@@ -917,7 +918,7 @@ extension ASTGenVisitor {
917918
self.generateLocatedIdentifier($0.name)
918919
}.bridgedArray(in: self)
919920
)
920-
decl.asDecl.attrs = attrs.attributes
921+
attrs.attach(to: decl.asDecl)
921922
return decl
922923
}
923924
}

0 commit comments

Comments
 (0)