Skip to content

Commit 391df89

Browse files
committed
Add TokenSyntax variable
1 parent 68bc899 commit 391df89

File tree

3 files changed

+962
-61
lines changed

3 files changed

+962
-61
lines changed

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

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,12 @@ let parserTokenSpecSetFile = SourceFileSyntax(leadingTrivia: copyrightHeader) {
2222
for child in layoutNode.children {
2323
if case let .token(choices, _, _) = child.kind, choices.count > 1 {
2424
try! ExtensionDeclSyntax("extension \(raw: layoutNode.kind.syntaxType)") {
25-
try EnumDeclSyntax("enum \(raw: child.name)Options: TokenSpecSet") {
25+
try EnumDeclSyntax(
26+
"""
27+
@_spi(Diagnostics)
28+
public enum \(raw: child.name)Options: TokenSpecSet
29+
"""
30+
) {
2631
for choice in choices {
2732
switch choice {
2833
case .keyword(let keywordText):
@@ -70,6 +75,40 @@ let parserTokenSpecSetFile = SourceFileSyntax(leadingTrivia: copyrightHeader) {
7075
}
7176
}
7277
}
78+
79+
try VariableDeclSyntax(
80+
"""
81+
@_spi(Diagnostics)
82+
public var tokenSyntax: TokenSyntax
83+
"""
84+
) {
85+
try SwitchExprSyntax("switch self") {
86+
for choice in choices {
87+
switch choice {
88+
case .keyword(let keywordText):
89+
let keyword = KEYWORDS.first(where: { $0.name == keywordText })!
90+
SwitchCaseSyntax(
91+
"case .\(raw: keyword.escapedName): return .keyword(.\(raw: keyword.escapedName))"
92+
)
93+
case .token(let tokenText):
94+
let token = SYNTAX_TOKEN_MAP[tokenText]!
95+
if token.isKeyword {
96+
SwitchCaseSyntax(
97+
"case .\(raw: token.swiftKind): return .\(raw: token.swiftKind)()"
98+
)
99+
} else if token.text != nil {
100+
SwitchCaseSyntax(
101+
"case .\(raw: token.swiftKind): return .\(raw: token.swiftKind)Token()"
102+
)
103+
} else {
104+
SwitchCaseSyntax(
105+
#"case .\#(raw: token.swiftKind): return .\#(raw: token.swiftKind)("")"#
106+
)
107+
}
108+
}
109+
}
110+
}
111+
}
73112
}
74113
}
75114
}

0 commit comments

Comments
 (0)