Skip to content

Commit 55d793d

Browse files
Merge pull request #296 from rockbruno/unavailable-token
[SE-0290] GYB: Unavailable tokens
2 parents 0793d1a + c39d0ca commit 55d793d

14 files changed

+425
-1
lines changed

Sources/SwiftSyntax/gyb_generated/Misc.swift

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1101,6 +1101,12 @@ extension SyntaxNode {
11011101
return OptionalBindingConditionSyntax(asSyntaxData)
11021102
}
11031103

1104+
public var isUnavailabilityCondition: Bool { return raw.kind == .unavailabilityCondition }
1105+
public var asUnavailabilityCondition: UnavailabilityConditionSyntax? {
1106+
guard isUnavailabilityCondition else { return nil }
1107+
return UnavailabilityConditionSyntax(asSyntaxData)
1108+
}
1109+
11041110
public var isConditionElementList: Bool { return raw.kind == .conditionElementList }
11051111
public var asConditionElementList: ConditionElementListSyntax? {
11061112
guard isConditionElementList else { return nil }
@@ -1837,6 +1843,8 @@ extension Syntax {
18371843
return node
18381844
case .optionalBindingCondition(let node):
18391845
return node
1846+
case .unavailabilityCondition(let node):
1847+
return node
18401848
case .conditionElementList(let node):
18411849
return node
18421850
case .declarationStmt(let node):
@@ -1960,6 +1968,6 @@ extension Syntax {
19601968
extension SyntaxParser {
19611969
static func verifyNodeDeclarationHash() -> Bool {
19621970
return String(cString: swiftparse_syntax_structure_versioning_identifier()!) ==
1963-
"a66df9d44b9128aee3da17e9b0d2aed27ce7ec61"
1971+
"0b9cec009c8c03b20b21615c4b4386bb21ea5a01"
19641972
}
19651973
}

Sources/SwiftSyntax/gyb_generated/SyntaxAnyVisitor.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1324,6 +1324,13 @@ open class SyntaxAnyVisitor: SyntaxVisitor {
13241324
override open func visitPost(_ node: OptionalBindingConditionSyntax) {
13251325
visitAnyPost(node._syntaxNode)
13261326
}
1327+
override open func visit(_ node: UnavailabilityConditionSyntax) -> SyntaxVisitorContinueKind {
1328+
return visitAny(node._syntaxNode)
1329+
}
1330+
1331+
override open func visitPost(_ node: UnavailabilityConditionSyntax) {
1332+
visitAnyPost(node._syntaxNode)
1333+
}
13271334
override open func visit(_ node: ConditionElementListSyntax) -> SyntaxVisitorContinueKind {
13281335
return visitAny(node._syntaxNode)
13291336
}

Sources/SwiftSyntax/gyb_generated/SyntaxBuilders.swift

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8049,6 +8049,74 @@ extension OptionalBindingConditionSyntax {
80498049
}
80508050
}
80518051

8052+
public struct UnavailabilityConditionSyntaxBuilder {
8053+
private var layout =
8054+
Array<RawSyntax?>(repeating: nil, count: 4)
8055+
8056+
internal init() {}
8057+
8058+
public mutating func usePoundUnavailableKeyword(_ node: TokenSyntax) {
8059+
let idx = UnavailabilityConditionSyntax.Cursor.poundUnavailableKeyword.rawValue
8060+
layout[idx] = node.raw
8061+
}
8062+
8063+
public mutating func useLeftParen(_ node: TokenSyntax) {
8064+
let idx = UnavailabilityConditionSyntax.Cursor.leftParen.rawValue
8065+
layout[idx] = node.raw
8066+
}
8067+
8068+
public mutating func addAvailabilityArgument(_ elt: AvailabilityArgumentSyntax) {
8069+
let idx = UnavailabilityConditionSyntax.Cursor.availabilitySpec.rawValue
8070+
if let list = layout[idx] {
8071+
layout[idx] = list.appending(elt.raw)
8072+
} else {
8073+
layout[idx] = RawSyntax.create(kind: SyntaxKind.availabilitySpecList,
8074+
layout: [elt.raw], length: elt.raw.totalLength,
8075+
presence: SourcePresence.present)
8076+
}
8077+
}
8078+
8079+
public mutating func useRightParen(_ node: TokenSyntax) {
8080+
let idx = UnavailabilityConditionSyntax.Cursor.rightParen.rawValue
8081+
layout[idx] = node.raw
8082+
}
8083+
8084+
internal mutating func buildData() -> SyntaxData {
8085+
if (layout[0] == nil) {
8086+
layout[0] = RawSyntax.missingToken(TokenKind.poundUnavailableKeyword)
8087+
}
8088+
if (layout[1] == nil) {
8089+
layout[1] = RawSyntax.missingToken(TokenKind.leftParen)
8090+
}
8091+
if (layout[2] == nil) {
8092+
layout[2] = RawSyntax.missing(SyntaxKind.availabilitySpecList)
8093+
}
8094+
if (layout[3] == nil) {
8095+
layout[3] = RawSyntax.missingToken(TokenKind.rightParen)
8096+
}
8097+
8098+
return .forRoot(RawSyntax.createAndCalcLength(kind: .unavailabilityCondition,
8099+
layout: layout, presence: .present))
8100+
}
8101+
}
8102+
8103+
extension UnavailabilityConditionSyntax {
8104+
/// Creates a `UnavailabilityConditionSyntax` using the provided build function.
8105+
/// - Parameter:
8106+
/// - build: A closure that will be invoked in order to initialize
8107+
/// the fields of the syntax node.
8108+
/// This closure is passed a `UnavailabilityConditionSyntaxBuilder` which you can use to
8109+
/// incrementally build the structure of the node.
8110+
/// - Returns: A `UnavailabilityConditionSyntax` with all the fields populated in the builder
8111+
/// closure.
8112+
public init(_ build: (inout UnavailabilityConditionSyntaxBuilder) -> Void) {
8113+
var builder = UnavailabilityConditionSyntaxBuilder()
8114+
build(&builder)
8115+
let data = builder.buildData()
8116+
self.init(data)
8117+
}
8118+
}
8119+
80528120
public struct DeclarationStmtSyntaxBuilder {
80538121
private var layout =
80548122
Array<RawSyntax?>(repeating: nil, count: 1)

Sources/SwiftSyntax/gyb_generated/SyntaxClassification.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,8 @@ extension RawTokenKind {
328328
return .poundDirectiveKeyword
329329
case .poundAvailableKeyword:
330330
return .keyword
331+
case .poundUnavailableKeyword:
332+
return .keyword
331333
case .poundFileLiteralKeyword:
332334
return .objectLiteral
333335
case .poundImageLiteralKeyword:

Sources/SwiftSyntax/gyb_generated/SyntaxEnum.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ public enum SyntaxEnum {
201201
case availabilityCondition(AvailabilityConditionSyntax)
202202
case matchingPatternCondition(MatchingPatternConditionSyntax)
203203
case optionalBindingCondition(OptionalBindingConditionSyntax)
204+
case unavailabilityCondition(UnavailabilityConditionSyntax)
204205
case conditionElementList(ConditionElementListSyntax)
205206
case declarationStmt(DeclarationStmtSyntax)
206207
case throwStmt(ThrowStmtSyntax)
@@ -639,6 +640,8 @@ public extension Syntax {
639640
return .matchingPatternCondition(MatchingPatternConditionSyntax(self)!)
640641
case .optionalBindingCondition:
641642
return .optionalBindingCondition(OptionalBindingConditionSyntax(self)!)
643+
case .unavailabilityCondition:
644+
return .unavailabilityCondition(UnavailabilityConditionSyntax(self)!)
642645
case .conditionElementList:
643646
return .conditionElementList(ConditionElementListSyntax(self)!)
644647
case .declarationStmt:

Sources/SwiftSyntax/gyb_generated/SyntaxFactory.swift

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3653,6 +3653,29 @@ public enum SyntaxFactory {
36533653
], length: .zero, presence: .present))
36543654
return OptionalBindingConditionSyntax(data)
36553655
}
3656+
public static func makeUnavailabilityCondition(poundUnavailableKeyword: TokenSyntax, leftParen: TokenSyntax, availabilitySpec: AvailabilitySpecListSyntax, rightParen: TokenSyntax) -> UnavailabilityConditionSyntax {
3657+
let layout: [RawSyntax?] = [
3658+
poundUnavailableKeyword.raw,
3659+
leftParen.raw,
3660+
availabilitySpec.raw,
3661+
rightParen.raw,
3662+
]
3663+
let raw = RawSyntax.createAndCalcLength(kind: SyntaxKind.unavailabilityCondition,
3664+
layout: layout, presence: SourcePresence.present)
3665+
let data = SyntaxData.forRoot(raw)
3666+
return UnavailabilityConditionSyntax(data)
3667+
}
3668+
3669+
public static func makeBlankUnavailabilityCondition() -> UnavailabilityConditionSyntax {
3670+
let data = SyntaxData.forRoot(RawSyntax.create(kind: .unavailabilityCondition,
3671+
layout: [
3672+
RawSyntax.missingToken(TokenKind.poundUnavailableKeyword),
3673+
RawSyntax.missingToken(TokenKind.leftParen),
3674+
RawSyntax.missing(SyntaxKind.availabilitySpecList),
3675+
RawSyntax.missingToken(TokenKind.rightParen),
3676+
], length: .zero, presence: .present))
3677+
return UnavailabilityConditionSyntax(data)
3678+
}
36563679
public static func makeConditionElementList(
36573680
_ elements: [ConditionElementSyntax]) -> ConditionElementListSyntax {
36583681
let raw = RawSyntax.createAndCalcLength(kind: SyntaxKind.conditionElementList,
@@ -5428,6 +5451,12 @@ public enum SyntaxFactory {
54285451
leadingTrivia: leadingTrivia,
54295452
trailingTrivia: trailingTrivia)
54305453
}
5454+
public static func makePoundUnavailableKeyword(leadingTrivia: Trivia = [],
5455+
trailingTrivia: Trivia = []) -> TokenSyntax {
5456+
return makeToken(.poundUnavailableKeyword, presence: .present,
5457+
leadingTrivia: leadingTrivia,
5458+
trailingTrivia: trailingTrivia)
5459+
}
54315460
public static func makePoundFileLiteralKeyword(leadingTrivia: Trivia = [],
54325461
trailingTrivia: Trivia = []) -> TokenSyntax {
54335462
return makeToken(.poundFileLiteralKeyword, presence: .present,

Sources/SwiftSyntax/gyb_generated/SyntaxKind.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ internal enum SyntaxKind: CSyntaxKind {
201201
case availabilityCondition = 138
202202
case matchingPatternCondition = 139
203203
case optionalBindingCondition = 140
204+
case unavailabilityCondition = 251
204205
case conditionElementList = 193
205206
case declarationStmt = 84
206207
case throwStmt = 85

Sources/SwiftSyntax/gyb_generated/SyntaxRewriter.swift

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1283,6 +1283,13 @@ open class SyntaxRewriter {
12831283
return Syntax(visitChildren(node))
12841284
}
12851285

1286+
/// Visit a `UnavailabilityConditionSyntax`.
1287+
/// - Parameter node: the node that is being visited
1288+
/// - Returns: the rewritten node
1289+
open func visit(_ node: UnavailabilityConditionSyntax) -> Syntax {
1290+
return Syntax(visitChildren(node))
1291+
}
1292+
12861293
/// Visit a `ConditionElementListSyntax`.
12871294
/// - Parameter node: the node that is being visited
12881295
/// - Returns: the rewritten node
@@ -3580,6 +3587,16 @@ open class SyntaxRewriter {
35803587
return visit(node)
35813588
}
35823589

3590+
/// Implementation detail of visit(_:). Do not call directly.
3591+
private func visitImplUnavailabilityConditionSyntax(_ data: SyntaxData) -> Syntax {
3592+
let node = UnavailabilityConditionSyntax(data)
3593+
// Accessing _syntaxNode directly is faster than calling Syntax(node)
3594+
visitPre(node._syntaxNode)
3595+
defer { visitPost(node._syntaxNode) }
3596+
if let newNode = visitAny(node._syntaxNode) { return newNode }
3597+
return visit(node)
3598+
}
3599+
35833600
/// Implementation detail of visit(_:). Do not call directly.
35843601
private func visitImplConditionElementListSyntax(_ data: SyntaxData) -> Syntax {
35853602
let node = ConditionElementListSyntax(data)
@@ -4582,6 +4599,8 @@ open class SyntaxRewriter {
45824599
return visitImplMatchingPatternConditionSyntax
45834600
case .optionalBindingCondition:
45844601
return visitImplOptionalBindingConditionSyntax
4602+
case .unavailabilityCondition:
4603+
return visitImplUnavailabilityConditionSyntax
45854604
case .conditionElementList:
45864605
return visitImplConditionElementListSyntax
45874606
case .declarationStmt:
@@ -5083,6 +5102,8 @@ open class SyntaxRewriter {
50835102
return visitImplMatchingPatternConditionSyntax(data)
50845103
case .optionalBindingCondition:
50855104
return visitImplOptionalBindingConditionSyntax(data)
5105+
case .unavailabilityCondition:
5106+
return visitImplUnavailabilityConditionSyntax(data)
50865107
case .conditionElementList:
50875108
return visitImplConditionElementListSyntax(data)
50885109
case .declarationStmt:

Sources/SwiftSyntax/gyb_generated/SyntaxVisitor.swift

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1832,6 +1832,16 @@ open class SyntaxVisitor {
18321832
/// The function called after visiting `OptionalBindingConditionSyntax` and its descendents.
18331833
/// - node: the node we just finished visiting.
18341834
open func visitPost(_ node: OptionalBindingConditionSyntax) {}
1835+
/// Visiting `UnavailabilityConditionSyntax` specifically.
1836+
/// - Parameter node: the node we are visiting.
1837+
/// - Returns: how should we continue visiting.
1838+
open func visit(_ node: UnavailabilityConditionSyntax) -> SyntaxVisitorContinueKind {
1839+
return .visitChildren
1840+
}
1841+
1842+
/// The function called after visiting `UnavailabilityConditionSyntax` and its descendents.
1843+
/// - node: the node we just finished visiting.
1844+
open func visitPost(_ node: UnavailabilityConditionSyntax) {}
18351845
/// Visiting `ConditionElementListSyntax` specifically.
18361846
/// - Parameter node: the node we are visiting.
18371847
/// - Returns: how should we continue visiting.
@@ -4470,6 +4480,17 @@ open class SyntaxVisitor {
44704480
visitPost(node)
44714481
}
44724482

4483+
/// Implementation detail of doVisit(_:_:). Do not call directly.
4484+
private func visitImplUnavailabilityConditionSyntax(_ data: SyntaxData) {
4485+
let node = UnavailabilityConditionSyntax(data)
4486+
let needsChildren = (visit(node) == .visitChildren)
4487+
// Avoid calling into visitChildren if possible.
4488+
if needsChildren && node.raw.numberOfChildren > 0 {
4489+
visitChildren(node)
4490+
}
4491+
visitPost(node)
4492+
}
4493+
44734494
/// Implementation detail of doVisit(_:_:). Do not call directly.
44744495
private func visitImplConditionElementListSyntax(_ data: SyntaxData) {
44754496
let node = ConditionElementListSyntax(data)
@@ -5498,6 +5519,8 @@ open class SyntaxVisitor {
54985519
visitImplMatchingPatternConditionSyntax(data)
54995520
case .optionalBindingCondition:
55005521
visitImplOptionalBindingConditionSyntax(data)
5522+
case .unavailabilityCondition:
5523+
visitImplUnavailabilityConditionSyntax(data)
55015524
case .conditionElementList:
55025525
visitImplConditionElementListSyntax(data)
55035526
case .declarationStmt:

Sources/SwiftSyntax/gyb_generated/TokenKind.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ public enum TokenKind {
119119
case poundElseifKeyword
120120
case poundEndifKeyword
121121
case poundAvailableKeyword
122+
case poundUnavailableKeyword
122123
case poundFileLiteralKeyword
123124
case poundImageLiteralKeyword
124125
case poundColorLiteralKeyword
@@ -246,6 +247,7 @@ public enum TokenKind {
246247
case .poundElseifKeyword: return "#elseif"
247248
case .poundEndifKeyword: return "#endif"
248249
case .poundAvailableKeyword: return "#available"
250+
case .poundUnavailableKeyword: return "#unavailable"
249251
case .poundFileLiteralKeyword: return "#fileLiteral"
250252
case .poundImageLiteralKeyword: return "#imageLiteral"
251253
case .poundColorLiteralKeyword: return "#colorLiteral"
@@ -374,6 +376,7 @@ public enum TokenKind {
374376
case .poundElseifKeyword: return true
375377
case .poundEndifKeyword: return true
376378
case .poundAvailableKeyword: return true
379+
case .poundUnavailableKeyword: return true
377380
case .poundFileLiteralKeyword: return true
378381
case .poundImageLiteralKeyword: return true
379382
case .poundColorLiteralKeyword: return true
@@ -502,6 +505,7 @@ public enum TokenKind {
502505
case .poundElseifKeyword: return "pound_elseif"
503506
case .poundEndifKeyword: return "pound_endif"
504507
case .poundAvailableKeyword: return "pound_available"
508+
case .poundUnavailableKeyword: return "pound_unavailable"
505509
case .poundFileLiteralKeyword: return "pound_fileLiteral"
506510
case .poundImageLiteralKeyword: return "pound_imageLiteral"
507511
case .poundColorLiteralKeyword: return "pound_colorLiteral"
@@ -630,6 +634,7 @@ public enum TokenKind {
630634
case .poundElseifKeyword: return SourceLength(utf8Length: 7)
631635
case .poundEndifKeyword: return SourceLength(utf8Length: 6)
632636
case .poundAvailableKeyword: return SourceLength(utf8Length: 10)
637+
case .poundUnavailableKeyword: return SourceLength(utf8Length: 12)
633638
case .poundFileLiteralKeyword: return SourceLength(utf8Length: 12)
634639
case .poundImageLiteralKeyword: return SourceLength(utf8Length: 13)
635640
case .poundColorLiteralKeyword: return SourceLength(utf8Length: 13)
@@ -760,6 +765,7 @@ extension TokenKind: Equatable {
760765
case (.poundElseifKeyword, .poundElseifKeyword): return true
761766
case (.poundEndifKeyword, .poundEndifKeyword): return true
762767
case (.poundAvailableKeyword, .poundAvailableKeyword): return true
768+
case (.poundUnavailableKeyword, .poundUnavailableKeyword): return true
763769
case (.poundFileLiteralKeyword, .poundFileLiteralKeyword): return true
764770
case (.poundImageLiteralKeyword, .poundImageLiteralKeyword): return true
765771
case (.poundColorLiteralKeyword, .poundColorLiteralKeyword): return true
@@ -1009,6 +1015,8 @@ extension TokenKind {
10091015
return .poundEndifKeyword
10101016
case 60:
10111017
return .poundAvailableKeyword
1018+
case 123:
1019+
return .poundUnavailableKeyword
10121020
case 76:
10131021
return .poundFileLiteralKeyword
10141022
case 77:
@@ -1269,6 +1277,8 @@ extension TokenKind {
12691277
return false
12701278
case 60:
12711279
return false
1280+
case 123:
1281+
return false
12721282
case 76:
12731283
return false
12741284
case 77:
@@ -1418,6 +1428,7 @@ internal enum RawTokenKind: CTokenKind {
14181428
case poundElseifKeyword = 63
14191429
case poundEndifKeyword = 61
14201430
case poundAvailableKeyword = 60
1431+
case poundUnavailableKeyword = 123
14211432
case poundFileLiteralKeyword = 76
14221433
case poundImageLiteralKeyword = 77
14231434
case poundColorLiteralKeyword = 75
@@ -1761,6 +1772,9 @@ extension TokenKind {
17611772
case .poundAvailableKeyword:
17621773
let length = 10
17631774
return body(.init(kind: .poundAvailableKeyword, length: length))
1775+
case .poundUnavailableKeyword:
1776+
let length = 12
1777+
return body(.init(kind: .poundUnavailableKeyword, length: length))
17641778
case .poundFileLiteralKeyword:
17651779
let length = 12
17661780
return body(.init(kind: .poundFileLiteralKeyword, length: length))

0 commit comments

Comments
 (0)