Skip to content

Commit 0805792

Browse files
authored
Merge pull request #556 from CodaFi/label-maker
Formalize Labeled Syntax
2 parents 47dcde4 + 3343ff6 commit 0805792

21 files changed

+784
-1409
lines changed

Sources/SwiftSyntax/gyb_generated/Misc.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,6 +1045,12 @@ extension SyntaxNode {
10451045
return BackDeployVersionArgumentSyntax(asSyntaxData)
10461046
}
10471047

1048+
public var isLabeledStmt: Bool { return raw.kind == .labeledStmt }
1049+
public var asLabeledStmt: LabeledStmtSyntax? {
1050+
guard isLabeledStmt else { return nil }
1051+
return LabeledStmtSyntax(asSyntaxData)
1052+
}
1053+
10481054
public var isContinueStmt: Bool { return raw.kind == .continueStmt }
10491055
public var asContinueStmt: ContinueStmtSyntax? {
10501056
guard isContinueStmt else { return nil }
@@ -1921,6 +1927,8 @@ extension Syntax {
19211927
return node
19221928
case .backDeployVersionArgument(let node):
19231929
return node
1930+
case .labeledStmt(let node):
1931+
return node
19241932
case .continueStmt(let node):
19251933
return node
19261934
case .whileStmt(let node):

Sources/SwiftSyntax/gyb_generated/SyntaxAnyVisitor.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1258,6 +1258,13 @@ open class SyntaxAnyVisitor: SyntaxVisitor {
12581258
override open func visitPost(_ node: BackDeployVersionArgumentSyntax) {
12591259
visitAnyPost(node._syntaxNode)
12601260
}
1261+
override open func visit(_ node: LabeledStmtSyntax) -> SyntaxVisitorContinueKind {
1262+
return visitAny(node._syntaxNode)
1263+
}
1264+
1265+
override open func visitPost(_ node: LabeledStmtSyntax) {
1266+
visitAnyPost(node._syntaxNode)
1267+
}
12611268
override open func visit(_ node: ContinueStmtSyntax) -> SyntaxVisitorContinueKind {
12621269
return visitAny(node._syntaxNode)
12631270
}

Sources/SwiftSyntax/gyb_generated/SyntaxBaseNodes.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ public struct StmtSyntax: StmtSyntaxProtocol, SyntaxHashable {
272272
/// `nil` if the conversion is not possible.
273273
public init?(_ syntax: Syntax) {
274274
switch syntax.raw.kind {
275-
case .unknownStmt, .missingStmt, .continueStmt, .whileStmt, .deferStmt, .expressionStmt, .repeatWhileStmt, .guardStmt, .forInStmt, .switchStmt, .doStmt, .returnStmt, .yieldStmt, .fallthroughStmt, .breakStmt, .declarationStmt, .throwStmt, .ifStmt, .poundAssertStmt:
275+
case .unknownStmt, .missingStmt, .labeledStmt, .continueStmt, .whileStmt, .deferStmt, .expressionStmt, .repeatWhileStmt, .guardStmt, .forInStmt, .switchStmt, .doStmt, .returnStmt, .yieldStmt, .fallthroughStmt, .breakStmt, .declarationStmt, .throwStmt, .ifStmt, .poundAssertStmt:
276276
self._syntaxNode = syntax
277277
default:
278278
return nil
@@ -286,7 +286,7 @@ public struct StmtSyntax: StmtSyntaxProtocol, SyntaxHashable {
286286
// Assert that the kind of the given data matches in debug builds.
287287
#if DEBUG
288288
switch data.raw.kind {
289-
case .unknownStmt, .missingStmt, .continueStmt, .whileStmt, .deferStmt, .expressionStmt, .repeatWhileStmt, .guardStmt, .forInStmt, .switchStmt, .doStmt, .returnStmt, .yieldStmt, .fallthroughStmt, .breakStmt, .declarationStmt, .throwStmt, .ifStmt, .poundAssertStmt:
289+
case .unknownStmt, .missingStmt, .labeledStmt, .continueStmt, .whileStmt, .deferStmt, .expressionStmt, .repeatWhileStmt, .guardStmt, .forInStmt, .switchStmt, .doStmt, .returnStmt, .yieldStmt, .fallthroughStmt, .breakStmt, .declarationStmt, .throwStmt, .ifStmt, .poundAssertStmt:
290290
break
291291
default:
292292
fatalError("Unable to create StmtSyntax from \(data.raw.kind)")

Sources/SwiftSyntax/gyb_generated/SyntaxBuilders.swift

Lines changed: 102 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -7275,6 +7275,60 @@ extension BackDeployVersionArgumentSyntax {
72757275
}
72767276
}
72777277

7278+
public struct LabeledStmtSyntaxBuilder {
7279+
private var layout =
7280+
Array<RawSyntax?>(repeating: nil, count: 6)
7281+
7282+
internal init() {}
7283+
7284+
public mutating func useLabelName(_ node: TokenSyntax) {
7285+
let idx = LabeledStmtSyntax.Cursor.labelName.rawValue
7286+
layout[idx] = node.raw
7287+
}
7288+
7289+
public mutating func useLabelColon(_ node: TokenSyntax) {
7290+
let idx = LabeledStmtSyntax.Cursor.labelColon.rawValue
7291+
layout[idx] = node.raw
7292+
}
7293+
7294+
public mutating func useStatement(_ node: StmtSyntax) {
7295+
let idx = LabeledStmtSyntax.Cursor.statement.rawValue
7296+
layout[idx] = node.raw
7297+
}
7298+
7299+
internal mutating func buildData() -> SyntaxData {
7300+
if (layout[1] == nil) {
7301+
layout[1] = RawSyntax.missingToken(TokenKind.identifier(""))
7302+
}
7303+
if (layout[3] == nil) {
7304+
layout[3] = RawSyntax.missingToken(TokenKind.colon)
7305+
}
7306+
if (layout[5] == nil) {
7307+
layout[5] = RawSyntax.missing(SyntaxKind.missingStmt)
7308+
}
7309+
7310+
return .forRoot(RawSyntax.createAndCalcLength(kind: .labeledStmt,
7311+
layout: layout, presence: .present))
7312+
}
7313+
}
7314+
7315+
extension LabeledStmtSyntax {
7316+
/// Creates a `LabeledStmtSyntax` using the provided build function.
7317+
/// - Parameter:
7318+
/// - build: A closure that will be invoked in order to initialize
7319+
/// the fields of the syntax node.
7320+
/// This closure is passed a `LabeledStmtSyntaxBuilder` which you can use to
7321+
/// incrementally build the structure of the node.
7322+
/// - Returns: A `LabeledStmtSyntax` with all the fields populated in the builder
7323+
/// closure.
7324+
public init(_ build: (inout LabeledStmtSyntaxBuilder) -> Void) {
7325+
var builder = LabeledStmtSyntaxBuilder()
7326+
build(&builder)
7327+
let data = builder.buildData()
7328+
self.init(data)
7329+
}
7330+
}
7331+
72787332
public struct ContinueStmtSyntaxBuilder {
72797333
private var layout =
72807334
Array<RawSyntax?>(repeating: nil, count: 4)
@@ -7320,20 +7374,10 @@ extension ContinueStmtSyntax {
73207374

73217375
public struct WhileStmtSyntaxBuilder {
73227376
private var layout =
7323-
Array<RawSyntax?>(repeating: nil, count: 10)
7377+
Array<RawSyntax?>(repeating: nil, count: 6)
73247378

73257379
internal init() {}
73267380

7327-
public mutating func useLabelName(_ node: TokenSyntax) {
7328-
let idx = WhileStmtSyntax.Cursor.labelName.rawValue
7329-
layout[idx] = node.raw
7330-
}
7331-
7332-
public mutating func useLabelColon(_ node: TokenSyntax) {
7333-
let idx = WhileStmtSyntax.Cursor.labelColon.rawValue
7334-
layout[idx] = node.raw
7335-
}
7336-
73377381
public mutating func useWhileKeyword(_ node: TokenSyntax) {
73387382
let idx = WhileStmtSyntax.Cursor.whileKeyword.rawValue
73397383
layout[idx] = node.raw
@@ -7356,14 +7400,14 @@ public struct WhileStmtSyntaxBuilder {
73567400
}
73577401

73587402
internal mutating func buildData() -> SyntaxData {
7359-
if (layout[5] == nil) {
7360-
layout[5] = RawSyntax.missingToken(TokenKind.whileKeyword)
7403+
if (layout[1] == nil) {
7404+
layout[1] = RawSyntax.missingToken(TokenKind.whileKeyword)
73617405
}
7362-
if (layout[7] == nil) {
7363-
layout[7] = RawSyntax.missing(SyntaxKind.conditionElementList)
7406+
if (layout[3] == nil) {
7407+
layout[3] = RawSyntax.missing(SyntaxKind.conditionElementList)
73647408
}
7365-
if (layout[9] == nil) {
7366-
layout[9] = RawSyntax.missing(SyntaxKind.codeBlock)
7409+
if (layout[5] == nil) {
7410+
layout[5] = RawSyntax.missing(SyntaxKind.codeBlock)
73677411
}
73687412

73697413
return .forRoot(RawSyntax.createAndCalcLength(kind: .whileStmt,
@@ -7474,20 +7518,10 @@ extension ExpressionStmtSyntax {
74747518

74757519
public struct RepeatWhileStmtSyntaxBuilder {
74767520
private var layout =
7477-
Array<RawSyntax?>(repeating: nil, count: 12)
7521+
Array<RawSyntax?>(repeating: nil, count: 8)
74787522

74797523
internal init() {}
74807524

7481-
public mutating func useLabelName(_ node: TokenSyntax) {
7482-
let idx = RepeatWhileStmtSyntax.Cursor.labelName.rawValue
7483-
layout[idx] = node.raw
7484-
}
7485-
7486-
public mutating func useLabelColon(_ node: TokenSyntax) {
7487-
let idx = RepeatWhileStmtSyntax.Cursor.labelColon.rawValue
7488-
layout[idx] = node.raw
7489-
}
7490-
74917525
public mutating func useRepeatKeyword(_ node: TokenSyntax) {
74927526
let idx = RepeatWhileStmtSyntax.Cursor.repeatKeyword.rawValue
74937527
layout[idx] = node.raw
@@ -7509,17 +7543,17 @@ public struct RepeatWhileStmtSyntaxBuilder {
75097543
}
75107544

75117545
internal mutating func buildData() -> SyntaxData {
7512-
if (layout[5] == nil) {
7513-
layout[5] = RawSyntax.missingToken(TokenKind.repeatKeyword)
7546+
if (layout[1] == nil) {
7547+
layout[1] = RawSyntax.missingToken(TokenKind.repeatKeyword)
75147548
}
7515-
if (layout[7] == nil) {
7516-
layout[7] = RawSyntax.missing(SyntaxKind.codeBlock)
7549+
if (layout[3] == nil) {
7550+
layout[3] = RawSyntax.missing(SyntaxKind.codeBlock)
75177551
}
7518-
if (layout[9] == nil) {
7519-
layout[9] = RawSyntax.missingToken(TokenKind.whileKeyword)
7552+
if (layout[5] == nil) {
7553+
layout[5] = RawSyntax.missingToken(TokenKind.whileKeyword)
75207554
}
7521-
if (layout[11] == nil) {
7522-
layout[11] = RawSyntax.missing(SyntaxKind.missingExpr)
7555+
if (layout[7] == nil) {
7556+
layout[7] = RawSyntax.missing(SyntaxKind.missingExpr)
75237557
}
75247558

75257559
return .forRoot(RawSyntax.createAndCalcLength(kind: .repeatWhileStmt,
@@ -7660,20 +7694,10 @@ extension WhereClauseSyntax {
76607694

76617695
public struct ForInStmtSyntaxBuilder {
76627696
private var layout =
7663-
Array<RawSyntax?>(repeating: nil, count: 24)
7697+
Array<RawSyntax?>(repeating: nil, count: 20)
76647698

76657699
internal init() {}
76667700

7667-
public mutating func useLabelName(_ node: TokenSyntax) {
7668-
let idx = ForInStmtSyntax.Cursor.labelName.rawValue
7669-
layout[idx] = node.raw
7670-
}
7671-
7672-
public mutating func useLabelColon(_ node: TokenSyntax) {
7673-
let idx = ForInStmtSyntax.Cursor.labelColon.rawValue
7674-
layout[idx] = node.raw
7675-
}
7676-
76777701
public mutating func useForKeyword(_ node: TokenSyntax) {
76787702
let idx = ForInStmtSyntax.Cursor.forKeyword.rawValue
76797703
layout[idx] = node.raw
@@ -7725,20 +7749,20 @@ public struct ForInStmtSyntaxBuilder {
77257749
}
77267750

77277751
internal mutating func buildData() -> SyntaxData {
7728-
if (layout[5] == nil) {
7729-
layout[5] = RawSyntax.missingToken(TokenKind.forKeyword)
7752+
if (layout[1] == nil) {
7753+
layout[1] = RawSyntax.missingToken(TokenKind.forKeyword)
7754+
}
7755+
if (layout[9] == nil) {
7756+
layout[9] = RawSyntax.missing(SyntaxKind.missingPattern)
77307757
}
77317758
if (layout[13] == nil) {
7732-
layout[13] = RawSyntax.missing(SyntaxKind.missingPattern)
7759+
layout[13] = RawSyntax.missingToken(TokenKind.inKeyword)
77337760
}
7734-
if (layout[17] == nil) {
7735-
layout[17] = RawSyntax.missingToken(TokenKind.inKeyword)
7761+
if (layout[15] == nil) {
7762+
layout[15] = RawSyntax.missing(SyntaxKind.missingExpr)
77367763
}
77377764
if (layout[19] == nil) {
7738-
layout[19] = RawSyntax.missing(SyntaxKind.missingExpr)
7739-
}
7740-
if (layout[23] == nil) {
7741-
layout[23] = RawSyntax.missing(SyntaxKind.codeBlock)
7765+
layout[19] = RawSyntax.missing(SyntaxKind.codeBlock)
77427766
}
77437767

77447768
return .forRoot(RawSyntax.createAndCalcLength(kind: .forInStmt,
@@ -7765,20 +7789,10 @@ extension ForInStmtSyntax {
77657789

77667790
public struct SwitchStmtSyntaxBuilder {
77677791
private var layout =
7768-
Array<RawSyntax?>(repeating: nil, count: 14)
7792+
Array<RawSyntax?>(repeating: nil, count: 10)
77697793

77707794
internal init() {}
77717795

7772-
public mutating func useLabelName(_ node: TokenSyntax) {
7773-
let idx = SwitchStmtSyntax.Cursor.labelName.rawValue
7774-
layout[idx] = node.raw
7775-
}
7776-
7777-
public mutating func useLabelColon(_ node: TokenSyntax) {
7778-
let idx = SwitchStmtSyntax.Cursor.labelColon.rawValue
7779-
layout[idx] = node.raw
7780-
}
7781-
77827796
public mutating func useSwitchKeyword(_ node: TokenSyntax) {
77837797
let idx = SwitchStmtSyntax.Cursor.switchKeyword.rawValue
77847798
layout[idx] = node.raw
@@ -7811,20 +7825,20 @@ public struct SwitchStmtSyntaxBuilder {
78117825
}
78127826

78137827
internal mutating func buildData() -> SyntaxData {
7828+
if (layout[1] == nil) {
7829+
layout[1] = RawSyntax.missingToken(TokenKind.switchKeyword)
7830+
}
7831+
if (layout[3] == nil) {
7832+
layout[3] = RawSyntax.missing(SyntaxKind.missingExpr)
7833+
}
78147834
if (layout[5] == nil) {
7815-
layout[5] = RawSyntax.missingToken(TokenKind.switchKeyword)
7835+
layout[5] = RawSyntax.missingToken(TokenKind.leftBrace)
78167836
}
78177837
if (layout[7] == nil) {
7818-
layout[7] = RawSyntax.missing(SyntaxKind.missingExpr)
7838+
layout[7] = RawSyntax.missing(SyntaxKind.switchCaseList)
78197839
}
78207840
if (layout[9] == nil) {
7821-
layout[9] = RawSyntax.missingToken(TokenKind.leftBrace)
7822-
}
7823-
if (layout[11] == nil) {
7824-
layout[11] = RawSyntax.missing(SyntaxKind.switchCaseList)
7825-
}
7826-
if (layout[13] == nil) {
7827-
layout[13] = RawSyntax.missingToken(TokenKind.rightBrace)
7841+
layout[9] = RawSyntax.missingToken(TokenKind.rightBrace)
78287842
}
78297843

78307844
return .forRoot(RawSyntax.createAndCalcLength(kind: .switchStmt,
@@ -7851,20 +7865,10 @@ extension SwitchStmtSyntax {
78517865

78527866
public struct DoStmtSyntaxBuilder {
78537867
private var layout =
7854-
Array<RawSyntax?>(repeating: nil, count: 10)
7868+
Array<RawSyntax?>(repeating: nil, count: 6)
78557869

78567870
internal init() {}
78577871

7858-
public mutating func useLabelName(_ node: TokenSyntax) {
7859-
let idx = DoStmtSyntax.Cursor.labelName.rawValue
7860-
layout[idx] = node.raw
7861-
}
7862-
7863-
public mutating func useLabelColon(_ node: TokenSyntax) {
7864-
let idx = DoStmtSyntax.Cursor.labelColon.rawValue
7865-
layout[idx] = node.raw
7866-
}
7867-
78687872
public mutating func useDoKeyword(_ node: TokenSyntax) {
78697873
let idx = DoStmtSyntax.Cursor.doKeyword.rawValue
78707874
layout[idx] = node.raw
@@ -7887,11 +7891,11 @@ public struct DoStmtSyntaxBuilder {
78877891
}
78887892

78897893
internal mutating func buildData() -> SyntaxData {
7890-
if (layout[5] == nil) {
7891-
layout[5] = RawSyntax.missingToken(TokenKind.doKeyword)
7894+
if (layout[1] == nil) {
7895+
layout[1] = RawSyntax.missingToken(TokenKind.doKeyword)
78927896
}
7893-
if (layout[7] == nil) {
7894-
layout[7] = RawSyntax.missing(SyntaxKind.codeBlock)
7897+
if (layout[3] == nil) {
7898+
layout[3] = RawSyntax.missing(SyntaxKind.codeBlock)
78957899
}
78967900

78977901
return .forRoot(RawSyntax.createAndCalcLength(kind: .doStmt,
@@ -8531,20 +8535,10 @@ extension ThrowStmtSyntax {
85318535

85328536
public struct IfStmtSyntaxBuilder {
85338537
private var layout =
8534-
Array<RawSyntax?>(repeating: nil, count: 14)
8538+
Array<RawSyntax?>(repeating: nil, count: 10)
85358539

85368540
internal init() {}
85378541

8538-
public mutating func useLabelName(_ node: TokenSyntax) {
8539-
let idx = IfStmtSyntax.Cursor.labelName.rawValue
8540-
layout[idx] = node.raw
8541-
}
8542-
8543-
public mutating func useLabelColon(_ node: TokenSyntax) {
8544-
let idx = IfStmtSyntax.Cursor.labelColon.rawValue
8545-
layout[idx] = node.raw
8546-
}
8547-
85488542
public mutating func useIfKeyword(_ node: TokenSyntax) {
85498543
let idx = IfStmtSyntax.Cursor.ifKeyword.rawValue
85508544
layout[idx] = node.raw
@@ -8577,14 +8571,14 @@ public struct IfStmtSyntaxBuilder {
85778571
}
85788572

85798573
internal mutating func buildData() -> SyntaxData {
8580-
if (layout[5] == nil) {
8581-
layout[5] = RawSyntax.missingToken(TokenKind.ifKeyword)
8574+
if (layout[1] == nil) {
8575+
layout[1] = RawSyntax.missingToken(TokenKind.ifKeyword)
85828576
}
8583-
if (layout[7] == nil) {
8584-
layout[7] = RawSyntax.missing(SyntaxKind.conditionElementList)
8577+
if (layout[3] == nil) {
8578+
layout[3] = RawSyntax.missing(SyntaxKind.conditionElementList)
85858579
}
8586-
if (layout[9] == nil) {
8587-
layout[9] = RawSyntax.missing(SyntaxKind.codeBlock)
8580+
if (layout[5] == nil) {
8581+
layout[5] = RawSyntax.missing(SyntaxKind.codeBlock)
85888582
}
85898583

85908584
return .forRoot(RawSyntax.createAndCalcLength(kind: .ifStmt,

Sources/SwiftSyntax/gyb_generated/SyntaxClassification.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ extension SyntaxClassification {
7979
return (.keyword, false)
8080
case (.attribute, 3):
8181
return (.attribute, false)
82-
case (.forInStmt, 9):
82+
case (.forInStmt, 5):
8383
return (.keyword, false)
8484
case (.simpleTypeIdentifier, 1):
8585
return (.typeIdentifier, false)

0 commit comments

Comments
 (0)