Skip to content

Commit 612109f

Browse files
committed
Add self keyword as a possible name kind in ClosureCaptureSyntax.
1 parent 2984ad8 commit 612109f

File tree

4 files changed

+58
-4
lines changed

4 files changed

+58
-4
lines changed

CodeGeneration/Sources/SyntaxSupport/ExprNodes.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ public let EXPR_NODES: [Node] = [
341341
),
342342
Child(
343343
name: "name",
344-
kind: .token(choices: [.token(.identifier)])
344+
kind: .token(choices: [.token(.identifier), .keyword(.self)])
345345
),
346346
Child(
347347
name: "initializer",

Sources/SwiftParser/generated/Parser+TokenSpecSet.swift

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,58 @@ extension ClosureCaptureSpecifierSyntax {
560560
}
561561
}
562562

563+
extension ClosureCaptureSyntax {
564+
@_spi(Diagnostics)
565+
public enum NameOptions: TokenSpecSet {
566+
case identifier
567+
case `self`
568+
569+
init?(lexeme: Lexer.Lexeme, experimentalFeatures: Parser.ExperimentalFeatures) {
570+
switch PrepareForKeywordMatch(lexeme) {
571+
case TokenSpec(.identifier):
572+
self = .identifier
573+
case TokenSpec(.self):
574+
self = .self
575+
default:
576+
return nil
577+
}
578+
}
579+
580+
public init?(token: TokenSyntax) {
581+
switch token {
582+
case TokenSpec(.identifier):
583+
self = .identifier
584+
case TokenSpec(.self):
585+
self = .self
586+
default:
587+
return nil
588+
}
589+
}
590+
591+
var spec: TokenSpec {
592+
switch self {
593+
case .identifier:
594+
return .identifier
595+
case .self:
596+
return .keyword(.self)
597+
}
598+
}
599+
600+
/// Returns a token that satisfies the `TokenSpec` of this case.
601+
///
602+
/// If the token kind of this spec has variable text, e.g. for an identifier, this returns a token with empty text.
603+
@_spi(Diagnostics)
604+
public var tokenSyntax: TokenSyntax {
605+
switch self {
606+
case .identifier:
607+
return .identifier("")
608+
case .self:
609+
return .keyword(.self)
610+
}
611+
}
612+
}
613+
}
614+
563615
extension ClosureParameterSyntax {
564616
@_spi(Diagnostics)
565617
public enum FirstNameOptions: TokenSpecSet {

Sources/SwiftSyntax/generated/raw/RawSyntaxValidation.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,7 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) {
567567
assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self))
568568
assertNoError(kind, 1, verify(layout[1], as: RawClosureCaptureSpecifierSyntax?.self))
569569
assertNoError(kind, 2, verify(layout[2], as: RawUnexpectedNodesSyntax?.self))
570-
assertNoError(kind, 3, verify(layout[3], as: RawTokenSyntax.self, tokenChoices: [.tokenKind(.identifier)]))
570+
assertNoError(kind, 3, verify(layout[3], as: RawTokenSyntax.self, tokenChoices: [.tokenKind(.identifier), .keyword("self")]))
571571
assertNoError(kind, 4, verify(layout[4], as: RawUnexpectedNodesSyntax?.self))
572572
assertNoError(kind, 5, verify(layout[5], as: RawInitializerClauseSyntax?.self))
573573
assertNoError(kind, 6, verify(layout[6], as: RawUnexpectedNodesSyntax?.self))

Sources/SwiftSyntax/generated/syntaxNodes/SyntaxNodesC.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1528,7 +1528,7 @@ public struct ClosureCaptureSpecifierSyntax: SyntaxProtocol, SyntaxHashable, _Le
15281528
/// ### Children
15291529
///
15301530
/// - `specifier`: ``ClosureCaptureSpecifierSyntax``?
1531-
/// - `name`: `<identifier>`
1531+
/// - `name`: (`<identifier>` | `self`)
15321532
/// - `initializer`: ``InitializerClauseSyntax``?
15331533
/// - `trailingComma`: `,`?
15341534
///
@@ -1627,7 +1627,9 @@ public struct ClosureCaptureSyntax: SyntaxProtocol, SyntaxHashable, _LeafSyntaxN
16271627

16281628
/// ### Tokens
16291629
///
1630-
/// For syntax trees generated by the parser, this is guaranteed to be `<identifier>`.
1630+
/// For syntax trees generated by the parser, this is guaranteed to be one of the following kinds:
1631+
/// - `<identifier>`
1632+
/// - `self`
16311633
public var name: TokenSyntax {
16321634
get {
16331635
return Syntax(self).child(at: 3)!.cast(TokenSyntax.self)

0 commit comments

Comments
 (0)