8000 Correct the Syntax of Primary Associated Types · swiftlang/swift-syntax@530d9a5 · GitHub
[go: up one dir, main page]

Skip to content

Commit 530d9a5

Browse files
committed
Correct the Syntax of Primary Associated Types
The prior syntax tree did not take into account that the clause itself should own the angle brackets.
1 parent b21da9a commit 530d9a5

13 files changed

+437
-12
lines changed

Sources/SwiftSyntax/gyb_generated/Misc.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1255,6 +1255,12 @@ extension SyntaxNode {
12551255
return ConformanceRequirementSyntax(asSyntaxData)
12561256
}
12571257

1258+
public var isPrimaryAssociatedTypeClause: Bool { return raw.kind == .primaryAssociatedTypeClause }
1259+
public var asPrimaryAssociatedTypeClause: PrimaryAssociatedTypeClauseSyntax? {
1260+
guard isPrimaryAssociatedTypeClause else { return nil }
1261+
return PrimaryAssociatedTypeClauseSyntax(asSyntaxData)
1262+
}
1263+
12581264
public var isSimpleTypeIdentifier: Bool { return raw.kind == .simpleTypeIdentifier }
12591265
public var asSimpleTypeIdentifier: SimpleTypeIdentifierSyntax? {
12601266
guard isSimpleTypeIdentifier else { return nil }
@@ -1917,6 +1923,8 @@ extension Syntax {
19171923
return node
19181924
case .conformanceRequirement(let node):
19191925
return node
1926+
case .primaryAssociatedTypeClause(let node):
1927+
return node
19201928
case .simpleTypeIdentifier(let node):
19211929
return node
19221930
case .memberTypeIdentifier(let node):

Sources/SwiftSyntax/gyb_generated/SyntaxAnyVisitor.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1506,6 +1506,13 @@ open class SyntaxAnyVisitor: SyntaxVisitor {
15061506
override open func visitPost(_ node: ConformanceRequirementSyntax) {
15071507
visitAnyPost(node._syntaxNode)
15081508
}
1509+
override open func visit(_ node: PrimaryAssociatedTypeClauseSyntax) -> SyntaxVisitorContinueKind {
1510+
return visitAny(node._syntaxNode)
1511+
}
1512+
1513+
override open func visitPost(_ node: PrimaryAssociatedTypeClauseSyntax) {
1514+
visitA B428 nyPost(node._syntaxNode)
1515+
}
15091516
override open func visit(_ node: SimpleTypeIdentifierSyntax) -> SyntaxVisitorContinueKind {
15101517
return visitAny(node._syntaxNode)
15111518
}

Sources/SwiftSyntax/gyb_generated/SyntaxBuilders.swift

Lines changed: 68 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4207,7 +4207,7 @@ extension StructDeclSyntax {
42074207

42084208
public struct ProtocolDeclSyntaxBuilder {
42094209
private var layout =
4210-
Array<RawSyntax?>(repeating: nil, count: 7)
4210+
Array<RawSyntax?>(repeating: nil, count: 8)
42114211

42124212
internal init() {}
42134213

@@ -4243,6 +4243,11 @@ public struct ProtocolDeclSyntaxBuilder {
42434243
layout[idx] = node.raw
42444244
}
42454245

4246+
public mutating func usePrimaryAssociatedTypeClause(_ node: PrimaryAssociatedTypeClauseSyntax) {
4247+
let idx = ProtocolDeclSyntax.Cursor.primaryAssociatedTypeClause.rawValue
4248+
layout[idx] = node.raw
4249+
}
4250+
42464251
public mutating func useInheritanceClause(_ node: TypeInheritanceClauseSyntax) {
42474252
let idx = ProtocolDeclSyntax.Cursor.inheritanceClause.rawValue
42484253
layout[idx] = node.raw
@@ -4265,8 +4270,8 @@ public struct ProtocolDeclSyntaxBuilder {
42654270
if (layout[3] == nil) {
42664271
layout[3] = RawSyntax.missingToken(TokenKind.identifier(""))
42674272
}
4268-
if (layout[6] == nil) {
4269-
layout[6] = RawSyntax.missing(SyntaxKind.memberDeclBlock)
4273+
if (layout[7] == nil) {
4274+
layout[7] = RawSyntax.missing(SyntaxKind.memberDeclBlock)
42704275
}
42714276

42724277
return .forRoot(RawSyntax.createAndCalcLength(kind: .protocolDecl,
@@ -9249,6 +9254,66 @@ extension ConformanceRequirementSyntax {
92499254
}
92509255
}
92519256

9257+
public struct PrimaryAssociatedTypeClauseSyntaxBuilder {
9258+
private var layout =
9259+
Array<RawSyntax?>(repeating: nil, count: 3)
9260+
9261+
internal init() {}
9262+
9263+
public mutating func useLeftAngleBracket(_ node: TokenSyntax) {
9264+
let idx = PrimaryAssociatedTypeClauseSyntax.Cursor.leftAngleBracket.rawValue
9265+
layout[idx] = node.raw
9266+
}
9267+
9268+
public mutating func addPrimaryAssociatedType(_ elt: PrimaryAssociatedTypeSyntax) {
9269+
let idx = PrimaryAssociatedTypeClauseSyntax.Cursor.primaryAssociatedTypeList.rawValue
9270+
if let list = layout[idx] {
9271+
layout[idx] = list.appending(elt.raw)
9272+
} else {
9273+
layout[idx] = RawSyntax.create(kind: SyntaxKind.primaryAssociatedTypeList,
9274+
layout: [elt.raw], length: elt.raw.totalLength,
9275+
presence: SourcePresence.present)
9276+
}
9277+
}
9278+
9279+
public mutating func useRightAngleBracket(_ node: TokenSyntax) {
9280+
let idx = PrimaryAssociatedTypeClauseSyntax.Cursor.rightAngleBracket.rawValue
9281+
layout[idx] = node.raw
9282+
}
9283+
9284+
internal mutating func buildData() -> SyntaxData {
9285+
if (layout[0] == nil) {
9286+
layout[0] = RawSyntax.missingToken(TokenKind.leftAngle)
9287+
}
9288+
if (layout[1] == nil) {
9289+
layout[1] = RawSyntax.missing(SyntaxKind.primaryAssociatedTypeList)
9290+
}
9291+
if (layout[2] == nil) {
9292+
layout[2] = RawSyntax.missingToken(TokenKind.rightAngle)
9293+
}
9294+
9295+
return .forRoot(RawSyntax.createAndCalcLength(kind: .primaryAssociatedTypeClause,
9296+
layout: layout, presence: .present))
9297+
}
9298+
}
9299+
9300+
extension PrimaryAssociatedTypeClauseSyntax {
9301+
/// Creates a `PrimaryAssociatedTypeClauseSyntax` using the provided build function.
9302+
/// - Parameter:
9303+
/// - build: A closure that will be invoked in order to initialize
9304+
/// the fields of the syntax node.
9305+
/// This closure is passed a `PrimaryAssociatedTypeClauseSyntaxBuilder` which you can use to
9306+
/// incrementally build the structure of the node.
9307+
/// - Returns: A `PrimaryAssociatedTypeClauseSyntax` with all the fields populated in the builder
9308+
/// closure.
9309+
public init(_ build: (inout PrimaryAssociatedTypeClauseSyntaxBuilder) -> Void) {
9310+
var builder = PrimaryAssociatedTypeClauseSyntaxBuilder()
9311+
build(&builder)
9312+
let data = builder.buildData()
9313+
self.init(data)
9314+
}
9315+
}
9316+
92529317
public struct SimpleTypeIdentifierSyntaxBuilder {
92539318
private var layout =
92549319
Array<RawSyntax?>(repeating: nil, count: 2)

Sources/SwiftSyntax/gyb_generated/SyntaxEnum.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ public enum SyntaxEnum {
227227
case primaryAssociatedType(PrimaryAssociatedTypeSyntax)
228228
case genericParameterClause(GenericParameterClauseSyntax)
229229
case conformanceRequirement(ConformanceRequirementSyntax)
230+
case primaryAssociatedTypeClause(PrimaryAssociatedTypeClauseSyntax)
230231
case simpleTypeIdentifier(SimpleTypeIdentifierSyntax)
231232
case memberTypeIdentifier(MemberTypeIdentifierSyntax)
232233
case classRestrictionType(ClassRestrictionTypeSyntax)
@@ -696,6 +697,8 @@ public extension Syntax {
696697
return .genericParameterClause(GenericParameterClauseSyntax(self)!)
697698
case .conformanceRequirement:
698699
return .conformanceRequirement(ConformanceRequirementSyntax(self)!)
700+
case .primaryAssociatedTypeClause:
701+
return .primaryAssociatedTypeClause(PrimaryAssociatedTypeClauseSyntax(self)!)
699702
case .simpleTypeIdentifier:
700703
return .simpleTypeIdentifier(SimpleTypeIdentifierSyntax(self)!)
701704
case .memberTypeIdentifier:

Sources/SwiftSyntax/gyb_generated/SyntaxFactory.swift

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1937,12 +1937,13 @@ public enum SyntaxFactory {
19371937
], length: .zero, presence: .present))
19381938
return StructDeclSyntax(data)
19391939
}
1940-
public static func makeProtocolDecl(attributes: AttributeListSyntax?, modifiers: ModifierListSyntax?, protocolKeyword: TokenSyntax, identifier: TokenSyntax, inheritanceClause: TypeInheritanceClauseSyntax?, genericWhereClause: GenericWhereClauseSyntax?, members: MemberDeclBlockSyntax) -> ProtocolDeclSyntax {
1940+
public static func makeProtocolDecl(attributes: AttributeListSyntax?, modifiers: ModifierListSyntax?, protocolKeyword: TokenSyntax, identifier: TokenSyntax, primaryAssociatedTypeClause: PrimaryAssociatedTypeClauseSyntax?, inheritanceClause: TypeInheritanceClauseSyntax?, genericWhereClause: GenericWhereClauseSyntax?, members: MemberDeclBlockSyntax) -> ProtocolDeclSyntax {
19411941
let layout: [RawSyntax?] = [
19421942
attributes?.raw,
19431943
modifiers?.raw,
19441944
protocolKeyword.raw,
19451945
identifier.raw,
1946+
primaryAssociatedTypeClause?.raw,
19461947
inheritanceClause?.raw,
19471948
genericWhereClause?.raw,
19481949
members.raw,
@@ -1962,6 +1963,7 @@ public enum SyntaxFactory {
19621963
RawSyntax.missingToken(TokenKind.identifier("")),
19631964
nil,
19641965
nil,
1966+
nil,
19651967
RawSyntax.missing(SyntaxKind.memberDeclBlock),
19661968
], length: .zero, presence: .present))
19671969
return ProtocolDeclSyntax(data)
@@ -4177,6 +4179,27 @@ public enum SyntaxFactory {
41774179
], length: .zero, presence: .present))
41784180
return ConformanceRequirementSyntax(data)
41794181
}
4182+
public static func makePrimaryAssociatedTypeClause(leftAngleBracket: TokenSyntax, primaryAssociatedTypeList: PrimaryAssociatedTypeListSyntax, rightAngleBracket: TokenSyntax) -> PrimaryAssociatedTypeClauseSyntax {
4183+
let layout: [RawSyntax?] = [
4184+
leftAngleBracket.raw,
4185+
primaryAssociatedTypeList.raw,
4186+
rightAngleBracket.raw,
4187+
]
4188+
let raw = RawSyntax.createAndCalcLength(kind: SyntaxKind.primaryAssociatedTypeClause,
4189+
layout: layout, presence: SourcePresence.present)
4190+
let data = SyntaxData.forRoot(raw)
4191+
return PrimaryAssociatedTypeClauseSyntax(data)
4192+
}
4193+
4194+
public static func makeBlankPrimaryAssociatedTypeClause() -> PrimaryAssociatedTypeClauseSyntax {
4195+
let data = SyntaxData.forRoot(RawSyntax.create(kind: .primaryAssociatedTypeClause,
4196+
layout: [
4197+
RawSyntax.missingToken(TokenKind.leftAngle),
4198+
RawSyntax.missing(SyntaxKind.primaryAssociatedTypeList),
4199+
RawSyntax.missingToken(TokenKind.rightAngle),
4200+
], length: .zero, presence: .present))
4201+
return PrimaryAssociatedTypeClauseSyntax(data)
4202+
}
41804203
public static func makeSimpleTypeIdentifier(name: TokenSyntax, genericArgumentClause: GenericArgumentClauseSyntax?) -> SimpleTypeIdentifierSyntax {
41814204
let layout: [RawSyntax?] = [
41824205
name.raw,

Sources/SwiftSyntax/gyb_generated/SyntaxKind.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ internal enum SyntaxKind: CSyntaxKind {
227227
case primaryAssociatedType = 255
228228
case genericParameterClause = 151
229229
case conformanceRequirement = 152
230+
case primaryAssociatedTypeClause = 256
230231
case simpleTypeIdentifier = 212
231232
case memberTypeIdentifier = 213
232233
case classRestrictionType = 214

Sources/SwiftSyntax/gyb_generated/SyntaxRewriter.swift

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1465,6 +1465,13 @@ open class SyntaxRewriter {
14651465
return Syntax(visitChildren(node))
14661466
}
14671467

1468+
/// Visit a `PrimaryAssociatedTypeClauseSyntax`.
1469+
/// - Parameter node: the node that is being visited
1470+
/// - Returns: the rewritten node
1471+
open func visit(_ node: PrimaryAssociatedTypeClauseSyntax) -> Syntax {
1472+
return Syntax(visitChildren(node))
1473+
}
1474+
14681475
/// Visit a `SimpleTypeIdentifierSyntax`.
14691476
/// - Parameter node: the node that is being visited
14701477
/// - Returns: the rewritten node
@@ -3875,6 +3882,16 @@ open class SyntaxRewriter {
38753882
return visit(node)
38763883
}
38773884

3885+
/// Implementation detail of visit(_:). Do not call directly.
3886+
private func visitImplPrimaryAssociatedTypeClauseSyntax(_ data: SyntaxData) -> Syntax {
3887+
let node = PrimaryAssociatedTypeClauseSyntax(data)
3888+
// Accessing _syntaxNode directly is faster than calling Syntax(node)
3889+
visitPre(node._syntaxNode)
3890+
defer { visitPost(node._syntaxNode) }
3891+
if let newNode = visitAny(node._syntaxNode) { return newNode }
3892+
return visit(node)
3893+
}
3894+
38783895
/// Implementation detail of visit(_:). Do not call directly.
38793896
private func visitImplSimpleTypeIdentifierSyntax(_ data: SyntaxData) -> Syntax {
38803897
let node = SimpleTypeIdentifierSyntax(data)
@@ -4719,6 +4736,8 @@ open class SyntaxRewriter {
47194736
return visitImplGenericParameterClauseSyntax
47204737
case .conformanceRequirement:
47214738
return visitImplConformanceRequirementSyntax
4739+
case .primaryAssociatedTypeClause:
4740+
return visitImplPrimaryAssociatedTypeClauseSyntax
47224741
case .simpleTypeIdentifier:
47234742
return visitImplSimpleTypeIdentifierSyntax
47244743
case .memberTypeIdentifier:
@@ -5230,6 +5249,8 @@ open class SyntaxRewriter {
52305249
return visitImplGenericParameterClauseSyntax(data)
52315250
case .conformanceRequirement:
52325251
return visitImplConformanceRequirementSyntax(data)
5252+
case .primaryAssociatedTypeClause:
5253+
return visitImplPrimaryAssociatedTypeClauseSyntax(data)
52335254
case .simpleTypeIdentifier:
52345255
return visitImplSimpleTypeIdentifierSyntax(data)
52355256
case .memberTypeIdentifier:

Sources/SwiftSyntax/gyb_generated/SyntaxVisitor.swift

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2092,6 +2092,16 @@ open class SyntaxVisitor {
20922092
/// The function called after visiting `ConformanceRequirementSyntax` and its descendents.
20932093
/// - node: the node we just finished visiting.
20942094
open func visitPost(_ node: ConformanceRequirementSyntax) {}
2095+
/// Visiting `PrimaryAssociatedTypeClauseSyntax` specifically.
2096+
/// - Parameter node: the node we are visiting.
2097+
/// - Returns: how should we continue visiting.
2098+
open func visit(_ node: PrimaryAssociatedTypeClauseSyntax) -> SyntaxVisitorContinueKind {
2099+
return .visitChildren
2100+
}
2101+
2102+
/// The function called after visiting `PrimaryAssociatedTypeClauseSyntax` and its descendents.
2103+
/// - node: the node we just finished visiting.
2104+
open func visitPost(_ node: PrimaryAssociatedTypeClauseSyntax) {}
20952105
/// Visiting `SimpleTypeIdentifierSyntax` specifically.
20962106
/// - Parameter node: the node we are visiting.
20972107
/// - Returns: how should we continue visiting.
@@ -4806,6 +4816,17 @@ open class SyntaxVisitor {
48064816
visitPost(node)
48074817
}
48084818

4819+
/// Implementation detail of doVisit(_:_:). Do not call directly.
4820+
private func visitImplPrimaryAssociatedTypeClauseSyntax(_ data: SyntaxData) {
4821+
let node = PrimaryAssociatedTypeClauseSyntax(data)
4822+
let needsChildren = (visit(node) == .visitChildren)
4823+
// Avoid calling into visitChildren if possible.
4824+
if needsChildren && node.raw.numberOfChildren > 0 {
4825+
visitChildren(node)
4826+
}
4827+
visitPost(node)
4828+
}
4829+
48094830
/// Implementation detail of doVisit(_:_:). Do not call directly.
48104831
private func visitImplSimpleTypeIdentifierSyntax(_ data: SyntaxData) {
48114832
let node = SimpleTypeIdentifierSyntax(data)
@@ -5655,6 +5676,8 @@ open class SyntaxVisitor {
56555676
visitImplGenericParameterClauseSyntax(data)
56565677
case .conformanceRequirement:
56575678
visitImplConformanceRequirementSyntax(data)
5679+
case .primaryAssociatedTypeClause:
5680+
visitImplPrimaryAssociatedTypeClauseSyntax(data)
56585681
case .simpleTypeIdentifier:
56595682
visitImplSimpleTypeIdentifierSyntax(data)
56605683
case .memberTypeIdentifier:

0 commit comments

Comments
 (0)
0