Skip to content

Commit c4955ed

Browse files
committed
[ASTGen] Skip value decls missing the name
1 parent 2891d9e commit c4955ed

File tree

1 file changed

+69
-35
lines changed

1 file changed

+69
-35
lines changed

lib/ASTGen/Sources/ASTGen/Decls.swift

Lines changed: 69 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,23 @@ extension ASTGenVisitor {
2323
case .accessorDecl:
2424
fatalError("Should be generated as a part of another decl")
2525
case .actorDecl(let node):
26-
return self.generate(actorDecl: node).asDecl
26+
return self.generate(actorDecl: node)?.asDecl
2727
case .associatedTypeDecl(let node):
28-
return self.generate(associatedTypeDecl: node).asDecl
28+
return self.generate(associatedTypeDecl: node)?.asDecl
2929
case .classDecl(let node):
30-
return self.generate(classDecl: node).asDecl
30+
return self.generate(classDecl: node)?.asDecl
3131
case .deinitializerDecl(let node):
3232
return self.generate(deinitializerDecl: node).asDecl
3333
case .editorPlaceholderDecl:
3434
break
3535
case .enumCaseDecl(let node):
3636
return self.generate(enumCaseDecl: node).asDecl
3737
case .enumDecl(let node):
38-
return self.generate(enumDecl: node).asDecl
38+
return self.generate(enumDecl: node)?.asDecl
3939
case .extensionDecl(let node):
4040
return self.generate(extensionDecl: node).asDecl
4141
case .functionDecl(let node):
42-
return self.generate(functionDecl: node).asDecl
42+
return self.generate(functionDecl: node)?.asDecl
4343
case .ifConfigDecl:
4444
fatalError("Should have been handled by the caller")
4545
case .importDecl(let node):
@@ -53,19 +53,19 @@ extension ASTGenVisitor {
5353
case .missingDecl:
5454
break
5555
case .operatorDecl(let node):
56-
return self.generate(operatorDecl: node).asDecl
56+
return self.generate(operatorDecl: node)?.asDecl
5757
case .poundSourceLocation:
5858
break
5959
case .precedenceGroupDecl(let node):
60-
return self.generate(precedenceGroupDecl: node).asDecl
60+
return self.generate(precedenceGroupDecl: node)?.asDecl
6161
case .protocolDecl(let node):
62-
return self.generate(protocolDecl: node).asDecl
62+
return self.generate(protocolDecl: node)?.asDecl
6363
case .structDecl(let node):
64-
return self.generate(structDecl: node).asDecl
64+
return self.generate(structDecl: node)?.asDecl
6565
case .subscriptDecl(let node):
6666
return self.generate(subscriptDecl: node).asDecl
6767
case .typeAliasDecl(let node):
68-
return self.generate(typeAliasDecl: node).asDecl
68+
return self.generate(typeAliasDecl: node)?.asDecl
6969
case .variableDecl(let node):
7070
return self.generate(variableDecl: node).asDecl
7171
}
@@ -77,9 +77,22 @@ extension ASTGenVisitor {
7777
generate(decl: node.decl)
7878
}
7979

80-
func generate(typeAliasDecl node: TypeAliasDeclSyntax) -> BridgedTypeAliasDecl {
80+
func generateIdentifierDeclNameAndLoc(_ node: TokenSyntax) -> (identifier: BridgedIdentifier, sourceLoc: BridgedSourceLoc)? {
81+
guard node.presence == .present else {
82+
return nil
83+
}
84+
let result = self.generateIdentifierAndSourceLoc(node)
85+
guard result.identifier != nil else {
86+
return nil
87+
}
88+
return result
89+
}
90+
91+
func generate(typeAliasDecl node: TypeAliasDeclSyntax) -> BridgedTypeAliasDecl? {
8192
let attrs = self.generateDeclAttributes(node, allowStatic: false)
82-
let (name, nameLoc) = self.generateIdentifierAndSourceLoc(node.name)
93+
guard let (name, nameLoc) = self.generateIdentifierDeclNameAndLoc(node.name) else {
94+
return nil
95+
}
8396

8497
let decl = BridgedTypeAliasDecl.createParsed(
8598
self.ctx,
@@ -96,9 +109,11 @@ extension ASTGenVisitor {
96109
return decl
97110
}
98111

99-
func generate(enumDecl node: EnumDeclSyntax) -> BridgedNominalTypeDecl {
112+
func generate(enumDecl node: EnumDeclSyntax) -> BridgedNominalTypeDecl? {
100113
let attrs = self.generateDeclAttributes(node, allowStatic: false)
101-
let (name, nameLoc) = self.generateIdentifierAndSourceLoc(node.name)
114+
guard let (name, nameLoc) = self.generateIdentifierDeclNameAndLoc(node.name) else {
115+
return nil
116+
}
102117

103118
let decl = BridgedEnumDecl.createParsed(
104119
self.ctx,
@@ -123,9 +138,11 @@ extension ASTGenVisitor {
123138
return decl
124139
}
125140

126-
func generate(structDecl node: StructDeclSyntax) -> BridgedNominalTypeDecl {
141+
func generate(structDecl node: StructDeclSyntax) -> BridgedNominalTypeDecl? {
127142
let attrs = self.generateDeclAttributes(node, allowStatic: false)
128-
let (name, nameLoc) = self.generateIdentifierAndSourceLoc(node.name)
143+
guard let (name, nameLoc) = self.generateIdentifierDeclNameAndLoc(node.name) else {
144+
return nil
145+
}
129146

130147
let decl = BridgedStructDecl.createParsed(
131148
self.ctx,
@@ -150,9 +167,11 @@ extension ASTGenVisitor {
150167
return decl
151168
}
152169

153-
func generate(classDecl node: ClassDeclSyntax) -> BridgedNominalTypeDecl {
170+
func generate(classDecl node: ClassDeclSyntax) -> BridgedNominalTypeDecl? {
154171
let attrs = self.generateDeclAttributes(node, allowStatic: false)
155-
let (name, nameLoc) = self.generateIdentifierAndSourceLoc(node.name)
172+
guard let (name, nameLoc) = self.generateIdentifierDeclNameAndLoc(node.name) else {
173+
return nil
174+
}
156175

157176
let decl = BridgedClassDecl.createParsed(
158177
self.ctx,
@@ -178,9 +197,11 @@ extension ASTGenVisitor {
178197
return decl
179198
}
180199

181-
func generate(actorDecl node: ActorDeclSyntax) -> BridgedNominalTypeDecl {
200+
func generate(actorDecl node: ActorDeclSyntax) -> BridgedNominalTypeDecl? {
182201
let attrs = self.generateDeclAttributes(node, allowStatic: false)
183-
let (name, nameLoc) = self.generateIdentifierAndSourceLoc(node.name)
202+
guard let (name, nameLoc) = self.generateIdentifierDeclNameAndLoc(node.name) else {
203+
return nil
204+
}
184205

185206
let decl = BridgedClassDecl.createParsed(
186207
self.ctx,
@@ -206,9 +227,11 @@ extension ASTGenVisitor {
206227
return decl
207228
}
208229

209-
func generate(protocolDecl node: ProtocolDeclSyntax) -> BridgedNominalTypeDecl {
230+
func generate(protocolDecl node: ProtocolDeclSyntax) -> BridgedNominalTypeDecl? {
210231
let attrs = self.generateDeclAttributes(node, allowStatic: false)
211-
let (name, nameLoc) = self.generateIdentifierAndSourceLoc(node.name)
232+
guard let (name, nameLoc) = self.generateIdentifierDeclNameAndLoc(node.name) else {
233+
return nil
234+
}
212235
let primaryAssociatedTypeNames = node.primaryAssociatedTypeClause?.primaryAssociatedTypes.lazy.map {
213236
self.generateLocatedIdentifier($0.name)
214237
}
@@ -236,9 +259,11 @@ extension ASTGenVisitor {
236259
return decl
237260
}
238261

239-
func generate(associatedTypeDecl node: AssociatedTypeDeclSyntax) -> BridgedAssociatedTypeDecl {
262+
func generate(associatedTypeDecl node: AssociatedTypeDeclSyntax) -> BridgedAssociatedTypeDecl? {
240263
let attrs = self.generateDeclAttributes(node, allowStatic: false)
241-
let (name, nameLoc) = self.generateIdentifierAndSourceLoc(node.name)
264+
guard let (name, nameLoc) = self.generateIdentifierDeclNameAndLoc(node.name) else {
265+
return nil
266+
}
242267

243268
let decl = BridgedAssociatedTypeDecl.createParsed(
244269
self.ctx,
@@ -285,8 +310,10 @@ extension ASTGenVisitor {
285310
// MARK: - EnumCaseDecl
286311

287312
extension ASTGenVisitor {
288-
func generate(enumCaseElement node: EnumCaseElementSyntax) -> BridgedEnumElementDecl {
289-
let (name, nameLoc) = self.generateIdentifierAndSourceLoc(node.name)
313+
func generate(enumCaseElement node: EnumCaseElementSyntax) -> BridgedEnumElementDecl? {
314+
guard let (name, nameLoc) = self.generateIdentifierDeclNameAndLoc(node.name) else {
315+
return nil
316+
}
290317

291318
return .createParsed(
292319
self.ctx,
@@ -303,8 +330,10 @@ extension ASTGenVisitor {
303330
let attrs = self.generateDeclAttributes(node, allowStatic: false)
304331

305332
// All attributes goes to each element.
306-
let elements = node.elements.lazy.map({ elem -> BridgedEnumElementDecl in
307-
let elemDecl = self.generate(enumCaseElement: elem)
333+
let elements = node.elements.lazy.compactMap({ elem -> BridgedEnumElementDecl? in
334+
guard let elemDecl = self.generate(enumCaseElement: elem) else {
335+
return nil
336+
}
308337
elemDecl.asDecl.setAttrs(attrs.attributes)
309338
return elemDecl
310339
})
@@ -548,10 +577,11 @@ extension ASTGenVisitor {
548577
// MARK: - AbstractFunctionDecl
549578

550579
extension ASTGenVisitor {
551-
func generate(functionDecl node: FunctionDeclSyntax) -> BridgedFuncDecl {
580+
func generate(functionDecl node: FunctionDeclSyntax) -> BridgedFuncDecl? {
552581
let attrs = self.generateDeclAttributes(node, allowStatic: true)
553-
554-
let (name, nameLoc) = self.generateIdentifierAndSourceLoc(node.name)
582+
guard let (name, nameLoc) = self.generateIdentifierDeclNameAndLoc(node.name) else {
583+
return nil
584+
}
555585

556586
let decl = BridgedFuncDecl.createParsed(
557587
self.ctx,
@@ -664,8 +694,10 @@ extension BridgedOperatorFixity {
664694
}
665695

666696
extension ASTGenVisitor {
667-
func generate(operatorDecl node: OperatorDeclSyntax) -> BridgedOperatorDecl {
668-
let (name, nameLoc) = self.generateIdentifierAndSourceLoc(node.name)
697+
func generate(operatorDecl node: OperatorDeclSyntax) -> BridgedOperatorDecl? {
698+
guard let (name, nameLoc) = self.generateIdentifierDeclNameAndLoc(node.name) else {
699+
return nil
700+
}
669701
let (precedenceGroupName, precedenceGroupLoc) =
670702
self.generateIdentifierAndSourceLoc(node.operatorPrecedenceAndTypes?.precedenceGroup)
671703

@@ -705,9 +737,11 @@ extension BridgedAssociativity {
705737
}
706738

707739
extension ASTGenVisitor {
708-
func generate(precedenceGroupDecl node: PrecedenceGroupDeclSyntax) -> BridgedPrecedenceGroupDecl {
740+
func generate(precedenceGroupDecl node: PrecedenceGroupDeclSyntax) -> BridgedPrecedenceGroupDecl? {
709741
let attrs = self.generateDeclAttributes(node, allowStatic: false)
710-
let (name, nameLoc) = self.generateIdentifierAndSourceLoc(node.name)
742+
guard let (name, nameLoc) = self.generateIdentifierDeclNameAndLoc(node.name) else {
743+
return nil
744+
}
711745

712746
struct PrecedenceGroupBody {
713747
var associativity: PrecedenceGroupAssociativitySyntax? = nil

0 commit comments

Comments
 (0)