Skip to content

Commit 2fb77b4

Browse files
committed
-
1 parent b6753bb commit 2fb77b4

1 file changed

Lines changed: 19 additions & 33 deletions

File tree

Sources/PrincipleMacros/Syntax/Extensions/ClassDeclSyntax.swift

Lines changed: 19 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -10,53 +10,39 @@ import SwiftSyntaxMacros
1010

1111
extension ClassDeclSyntax {
1212

13-
public var unverifiedInferredSuperclassType: TypeSyntax? {
14-
inheritanceClause?.inheritedTypes.first?.type.trimmed
15-
}
16-
17-
public func inferredSuperclassType() -> TypeSyntax? {
18-
let verifier = SuperclassVerifier(for: self)
19-
return verifier.verifiedSuperclassType()
20-
}
21-
2213
public func inferredSuperclassType(
23-
isExpected: Bool?
24-
) throws -> TypeSyntax? {
25-
switch isExpected {
26-
case nil:
27-
return inferredSuperclassType()
28-
case true:
29-
if let type = unverifiedInferredSuperclassType {
30-
return type
31-
}
32-
throw DiagnosticsError(
33-
node: self,
34-
message: "\(name.trimmed) should have a superclass"
35-
)
36-
case false:
37-
return nil
38-
}
14+
isKnownToBeSubclass: Bool = false
15+
) -> TypeSyntax? {
16+
let finder = SuperclassFinder(for: self)
17+
let needsCheck = !isKnownToBeSubclass
18+
return finder.find(checkAgainstSubclassSpecificKeywords: needsCheck)
3919
}
4020
}
4121

4222
extension ClassDeclSyntax {
4323

44-
private final class SuperclassVerifier: SyntaxVisitor {
24+
private final class SuperclassFinder: SyntaxVisitor {
4525

4626
private let classDecl: ClassDeclSyntax
47-
private var didVerify = false
27+
private var didFind = false
4828

4929
init(for classDecl: ClassDeclSyntax) {
5030
self.classDecl = classDecl
5131
super.init(viewMode: .sourceAccurate)
5232
}
5333

54-
func verifiedSuperclassType() -> TypeSyntax? {
55-
if let unverified = classDecl.unverifiedInferredSuperclassType {
34+
func find(checkAgainstSubclassSpecificKeywords: Bool) -> TypeSyntax? {
35+
guard let inheritedTypes = classDecl.inheritanceClause?.inheritedTypes,
36+
let superclassType = inheritedTypes.first?.type.trimmed
37+
else {
38+
return nil
39+
}
40+
41+
if checkAgainstSubclassSpecificKeywords {
5642
walk(classDecl)
57-
return didVerify ? unverified : nil
43+
return didFind ? superclassType : nil
5844
} else {
59-
return nil
45+
return superclassType
6046
}
6147
}
6248

@@ -65,12 +51,12 @@ extension ClassDeclSyntax {
6551
}
6652

6753
override func visit(_ node: DeclModifierSyntax) -> SyntaxVisitorContinueKind {
68-
didVerify = didVerify || node.overrideSpecifier != nil
54+
didFind = didFind || node.overrideSpecifier != nil
6955
return .visitChildren
7056
}
7157

7258
override func visit(_: SuperExprSyntax) -> SyntaxVisitorContinueKind {
73-
didVerify = true
59+
didFind = true
7460
return .visitChildren
7561
}
7662
}

0 commit comments

Comments
 (0)