Skip to content

Commit f2e4643

Browse files
authored
Merge pull request #1470 from DougGregor/macro-decl-representation-5.9
2 parents c52427a + d076303 commit f2e4643

File tree

7 files changed

+19
-110
lines changed

7 files changed

+19
-110
lines changed

CodeGeneration/Sources/SyntaxSupport/DeclNodes.swift

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1026,18 +1026,7 @@ public let DECL_NODES: [Node] = [
10261026
),
10271027
Child(
10281028
name: "Signature",
1029-
kind: .nodeChoices(choices: [
1030-
Child(
1031-
name: "FunctionLike",
1032-
kind: .node(kind: "FunctionSignature"),
1033-
nameForDiagnostics: "macro signature"
1034-
),
1035-
Child(
1036-
name: "ValueLike",
1037-
kind: .node(kind: "TypeAnnotation"),
1038-
nameForDiagnostics: "macro signature"
1039-
),
1040-
]),
1029+
kind: .node(kind: "FunctionSignature"),
10411030
nameForDiagnostics: "macro signature"
10421031
),
10431032
Child(

Sources/SwiftParser/Declarations.swift

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2158,15 +2158,7 @@ extension Parser {
21582158
}
21592159

21602160
// Macro signature, which is either value-like or function-like.
2161-
let signature: RawMacroDeclSyntax.Signature
2162-
if let colon = self.consume(if: .colon) {
2163-
let type = self.parseType()
2164-
signature = .valueLike(
2165-
RawTypeAnnotationSyntax(colon: colon, type: type, arena: self.arena)
2166-
)
2167-
} else {
2168-
signature = .functionLike(self.parseFunctionSignature())
2169-
}
2161+
let signature = self.parseFunctionSignature()
21702162

21712163
// Initializer, if any.
21722164
let definition: RawInitializerClauseSyntax?

Sources/SwiftSyntax/generated/raw/RawSyntaxNodes.swift

Lines changed: 3 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -11746,37 +11746,6 @@ public struct RawLayoutRequirementSyntax: RawSyntaxNodeProtocol {
1174611746

1174711747
@_spi(RawSyntax)
1174811748
public struct RawMacroDeclSyntax: RawDeclSyntaxNodeProtocol {
11749-
@frozen // FIXME: Not actually stable, works around a miscompile
11750-
public enum Signature: RawSyntaxNodeProtocol {
11751-
case `functionLike`(RawFunctionSignatureSyntax)
11752-
case `valueLike`(RawTypeAnnotationSyntax)
11753-
11754-
public static func isKindOf(_ raw: RawSyntax) -> Bool {
11755-
return RawFunctionSignatureSyntax.isKindOf(raw) || RawTypeAnnotationSyntax.isKindOf(raw)
11756-
}
11757-
11758-
public var raw: RawSyntax {
11759-
switch self {
11760-
case .functionLike(let node):
11761-
return node.raw
11762-
case .valueLike(let node):
11763-
return node.raw
11764-
}
11765-
}
11766-
11767-
public init?<T>(_ other: T) where T : RawSyntaxNodeProtocol {
11768-
if let node = RawFunctionSignatureSyntax(other) {
11769-
self = .functionLike(node)
11770-
return
11771-
}
11772-
if let node = RawTypeAnnotationSyntax(other) {
11773-
self = .valueLike(node)
11774-
return
11775-
}
11776-
return nil
11777-
}
11778-
}
11779-
1178011749
@_spi(RawSyntax)
1178111750
public var layoutView: RawSyntaxLayoutView {
1178211751
return raw.layoutView!
@@ -11812,7 +11781,7 @@ public struct RawMacroDeclSyntax: RawDeclSyntaxNodeProtocol {
1181211781
_ unexpectedBetweenIdentifierAndGenericParameterClause: RawUnexpectedNodesSyntax? = nil,
1181311782
genericParameterClause: RawGenericParameterClauseSyntax?,
1181411783
_ unexpectedBetweenGenericParameterClauseAndSignature: RawUnexpectedNodesSyntax? = nil,
11815-
signature: Signature,
11784+
signature: RawFunctionSignatureSyntax,
1181611785
_ unexpectedBetweenSignatureAndDefinition: RawUnexpectedNodesSyntax? = nil,
1181711786
definition: RawInitializerClauseSyntax?,
1181811787
_ unexpectedBetweenDefinitionAndGenericWhereClause: RawUnexpectedNodesSyntax? = nil,
@@ -11888,8 +11857,8 @@ public struct RawMacroDeclSyntax: RawDeclSyntaxNodeProtocol {
1188811857
layoutView.children[10].map(RawUnexpectedNodesSyntax.init(raw:))
1188911858
}
1189011859

11891-
public var signature: RawSyntax {
11892-
layoutView.children[11]!
11860+
public var signature: RawFunctionSignatureSyntax {
11861+
layoutView.children[11].map(RawFunctionSignatureSyntax.init(raw:))!
1189311862
}
1189411863

1189511864
public var unexpectedBetweenSignatureAndDefinition: RawUnexpectedNodesSyntax? {

Sources/SwiftSyntax/generated/raw/RawSyntaxValidation.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1402,8 +1402,7 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) {
14021402
assertNoError(kind, 8, verify(layout[8], as: RawUnexpectedNodesSyntax?.self))
14031403
assertNoError(kind, 9, verify(layout[9], as: RawGenericParameterClauseSyntax?.self))
14041404
assertNoError(kind, 10, verify(layout[10], as: RawUnexpectedNodesSyntax?.self))
1405-
assertAnyHasNoError(kind, 11, [
1406-
verify(layout[11], as: RawSyntax.self)])
1405+
assertNoError(kind, 11, verify(layout[11], as: RawFunctionSignatureSyntax.self))
14071406
assertNoError(kind, 12, verify(layout[12], as: RawUnexpectedNodesSyntax?.self))
14081407
assertNoError(kind, 13, verify(layout[13], as: RawInitializerClauseSyntax?.self))
14091408
assertNoError(kind, 14, verify(layout[14], as: RawUnexpectedNodesSyntax?.self))

Sources/SwiftSyntax/generated/syntaxNodes/SyntaxDeclNodes.swift

Lines changed: 3 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -3943,48 +3943,6 @@ extension InitializerDeclSyntax: CustomReflectable {
39433943

39443944

39453945
public struct MacroDeclSyntax: DeclSyntaxProtocol, SyntaxHashable {
3946-
public enum Signature: SyntaxChildChoices {
3947-
case `functionLike`(FunctionSignatureSyntax)
3948-
case `valueLike`(TypeAnnotationSyntax)
3949-
3950-
public var _syntaxNode: Syntax {
3951-
switch self {
3952-
case .functionLike(let node):
3953-
return node._syntaxNode
3954-
case .valueLike(let node):
3955-
return node._syntaxNode
3956-
}
3957-
}
3958-
3959-
init(_ data: SyntaxData) {
3960-
self.init(Syntax(data))!
3961-
}
3962-
3963-
public init(_ node: FunctionSignatureSyntax) {
3964-
self = .functionLike(node)
3965-
}
3966-
3967-
public init(_ node: TypeAnnotationSyntax) {
3968-
self = .valueLike(node)
3969-
}
3970-
3971-
public init?<S: SyntaxProtocol>(_ node: S) {
3972-
if let node = node.as(FunctionSignatureSyntax.self) {
3973-
self = .functionLike(node)
3974-
return
3975-
}
3976-
if let node = node.as(TypeAnnotationSyntax.self) {
3977-
self = .valueLike(node)
3978-
return
3979-
}
3980-
return nil
3981-
}
3982-
3983-
public static var structure: SyntaxNodeStructure {
3984-
return .choices([.node(FunctionSignatureSyntax.self), .node(TypeAnnotationSyntax.self)])
3985-
}
3986-
}
3987-
39883946
public let _syntaxNode: Syntax
39893947

39903948
public init?<S: SyntaxProtocol>(_ node: S) {
@@ -4015,7 +3973,7 @@ public struct MacroDeclSyntax: DeclSyntaxProtocol, SyntaxHashable {
40153973
_ unexpectedBetweenIdentifierAndGenericParameterClause: UnexpectedNodesSyntax? = nil,
40163974
genericParameterClause: GenericParameterClauseSyntax? = nil,
40173975
_ unexpectedBetweenGenericParameterClauseAndSignature: UnexpectedNodesSyntax? = nil,
4018-
signature: Signature,
3976+
signature: FunctionSignatureSyntax,
40193977
_ unexpectedBetweenSignatureAndDefinition: UnexpectedNodesSyntax? = nil,
40203978
definition: InitializerClauseSyntax? = nil,
40213979
_ unexpectedBetweenDefinitionAndGenericWhereClause: UnexpectedNodesSyntax? = nil,
@@ -4213,9 +4171,9 @@ public struct MacroDeclSyntax: DeclSyntaxProtocol, SyntaxHashable {
42134171
}
42144172
}
42154173

4216-
public var signature: Signature {
4174+
public var signature: FunctionSignatureSyntax {
42174175
get {
4218-
return Signature(data.child(at: 11, parent: Syntax(self))!)
4176+
return FunctionSignatureSyntax(data.child(at: 11, parent: Syntax(self))!)
42194177
}
42204178
set(value) {
42214179
self = MacroDeclSyntax(data.replacingChild(at: 11, with: value.raw, arena: SyntaxArena()))

Sources/SwiftSyntaxMacros/MacroReplacement.swift

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -114,11 +114,7 @@ fileprivate class ParameterReplacementVisitor: SyntaxAnyVisitor {
114114
// of a macro.
115115
override func visit(_ node: IdentifierExprSyntax) -> SyntaxVisitorContinueKind {
116116
let identifier = node.identifier
117-
118-
// FIXME: This will go away.
119-
guard case let .functionLike(signature) = macro.signature else {
120-
return .visitChildren
121-
}
117+
let signature = macro.signature
122118

123119
let matchedParameter = signature.input.parameterList.enumerated().first { (index, parameter) in
124120
if identifier.text == "_" {

Tests/SwiftParserTest/DeclarationTests.swift

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1334,12 +1334,18 @@ final class DeclarationTests: XCTestCase {
13341334
func testMacroDecl() {
13351335
assertParse(
13361336
"""
1337-
macro m1: Int = A.M1
1337+
macro m11️⃣: Int = A.M1
13381338
macro m2(_: Int) = A.M2
13391339
macro m3(a b: Int) -> Int = A.M3
1340-
macro m4<T>: T = A.M4 where T.Assoc: P
1340+
macro m4<T>2️⃣: T = A.M4 where T.Assoc: P
13411341
macro m5<T: P>(_: T)
1342-
"""
1342+
""",
1343+
diagnostics: [
1344+
DiagnosticSpec(locationMarker: "1️⃣", message: "expected parameter clause in function signature"),
1345+
DiagnosticSpec(locationMarker: "1️⃣", message: "unexpected code ': Int = A.M1' before macro"),
1346+
DiagnosticSpec(locationMarker: "2️⃣", message: "expected parameter clause in function signature"),
1347+
DiagnosticSpec(locationMarker: "2️⃣", message: "unexpected code ': T = A.M4 where T.Assoc: P' before macro"),
1348+
]
13431349
)
13441350

13451351
assertParse(

0 commit comments

Comments
 (0)