Skip to content

Commit 4ef5eef

Browse files
committed
WIP: generate TokenSpec(.keyword) for KeywordToken in CodeGeneration
1 parent d858943 commit 4ef5eef

File tree

3 files changed

+1051
-1047
lines changed

3 files changed

+1051
-1047
lines changed

CodeGeneration/Sources/SyntaxSupport/Child.swift

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
/// The kind of token a node can contain. Either a token of a specific kind or a
1414
/// keyword with the given text.
15-
public enum TokenChoice: CustomStringConvertible {
15+
public enum TokenChoice {
1616
case keyword(text: String)
1717
case token(tokenKind: String)
1818

@@ -23,19 +23,24 @@ public enum TokenChoice: CustomStringConvertible {
2323
}
2424
}
2525

26-
public var description: String {
26+
public var descriptionAsTokenSpec: String {
2727
switch self {
28-
case .keyword(text: let string):
29-
guard let keyword = KEYWORDS.first(where: { $0.name == string }) else {
30-
assertionFailure("no such keyword named \(string)")
28+
case .keyword(text: let text):
29+
guard let keyword = KEYWORDS.first(where: { $0.name == text }) else {
30+
assertionFailure("no such keyword named \(text)")
3131
return ""
3232
}
3333
return ".keyword(.\(keyword.escapedName))"
34-
case .token(tokenKind: let string):
35-
guard let token = SYNTAX_TOKENS.first(where: { $0.name == string.components(separatedBy: "Token").first }) else {
36-
assertionFailure("no such token named \(string)")
34+
case .token(tokenKind: let tokenKind):
35+
guard let token = SYNTAX_TOKENS.first(where: { $0.name == tokenKind.components(separatedBy: "Token").first }) else {
36+
assertionFailure("no such token named \(tokenKind)")
3737
return ""
3838
}
39+
40+
if tokenKind == "KeywordToken" {
41+
return "TokenSpec(.keyword)"
42+
}
43+
3944
return ".\(token.swiftKind)"
4045
}
4146
}

CodeGeneration/Sources/generate-swiftsyntax/templates/swiftparser/IncrementalParseUtilsFile.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ let IncrementalParseUtilsFile = SourceFileSyntax(leadingTrivia: copyrightHeader)
3333

3434
for node in NON_BASE_SYNTAX_NODES {
3535
SwitchCaseSyntax("case .\(node.varOrCaseName):") {
36-
StmtSyntax("return [\(raw: Set(node.firstPotentialToken.map{$0.description}).joined(separator: ", "))]")
36+
StmtSyntax("return [\(raw: Set(node.firstPotentialToken.map{$0.descriptionAsTokenSpec}).joined(separator: ", "))]")
3737
}
3838
}
3939
SwitchCaseSyntax("default:") {

0 commit comments

Comments
 (0)