Skip to content

Update swift syntax #1316

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Feb 7, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CodeGeneration/Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ let package = Package(
.executable(name: "generate-swiftsyntax", targets: ["generate-swiftsyntax"])
],
dependencies: [
.package(url: "https://github.com/apple/swift-syntax.git", revision: "06de1fa52ab79fba2d540b6a62fa3c2a1e7133f5"),
.package(url: "https://github.com/apple/swift-syntax.git", revision: "013a48e2312e57b7b355db25bd3ea75282ebf274"),
.package(url: "https://github.com/apple/swift-argument-parser.git", .upToNextMinor(from: "1.1.4")),
],
targets: [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,10 @@ let keywordFile = SourceFileSyntax {
}

try! InitializerDeclSyntax("@_spi(RawSyntax) public init?(_ text: SyntaxText)") {
try! SwitchStmtSyntax("switch text.count") {
try! SwitchExprSyntax("switch text.count") {
for (length, keywords) in keywordsByLength() {
SwitchCaseSyntax("case \(raw: length):") {
try! SwitchStmtSyntax("switch text") {
try! SwitchExprSyntax("switch text") {
for keyword in keywords {
SwitchCaseSyntax(#"case "\#(raw: keyword.name)":"#) {
ExprSyntax("self = .\(raw: keyword.escapedName)")
Expand All @@ -70,7 +70,7 @@ let keywordFile = SourceFileSyntax {
public var isLexerClassified: Bool
"""
) {
try! SwitchStmtSyntax("switch self") {
try! SwitchExprSyntax("switch self") {
for keyword in KEYWORDS {
if keyword.isLexerClassified {
SwitchCaseSyntax("case .\(raw: keyword.escapedName): return true")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ import Utils
extension Child {
var requiresLeadingSpace: Bool? {
switch self.kind {
case .token(choices: _, requiresLeadingSpace: let requiresLeadingSpace, requiresTrailingSpace: _):
case .token(_, let requiresLeadingSpace, _):
return requiresLeadingSpace
case .nodeChoices(choices: let choices):
case .nodeChoices(let choices):
for choice in choices {
if let requiresLeadingSpace = choice.requiresLeadingSpace {
return requiresLeadingSpace
Expand All @@ -34,9 +34,9 @@ extension Child {

var requiresTrailingSpace: Bool? {
switch self.kind {
case .token(choices: _, requiresLeadingSpace: _, requiresTrailingSpace: let requiresTrailingSpace):
case .token(choices: _, _, let requiresTrailingSpace):
return requiresTrailingSpace
case .nodeChoices(choices: let choices):
case .nodeChoices(let choices):
for choice in choices {
if let requiresTrailingSpace = choice.requiresTrailingSpace {
return requiresTrailingSpace
Expand Down Expand Up @@ -116,7 +116,7 @@ let basicFormatFile = SourceFileSyntax {
)

try FunctionDeclSyntax("open func shouldIndent(_ keyPath: AnyKeyPath) -> Bool") {
try SwitchStmtSyntax("switch keyPath") {
try SwitchExprSyntax("switch keyPath") {
for node in SYNTAX_NODES where !node.isBase {
for child in node.children where child.isIndented {
SwitchCaseSyntax("case \\\(raw: node.type.syntaxBaseName).\(raw: child.swiftName):") {
Expand All @@ -131,7 +131,7 @@ let basicFormatFile = SourceFileSyntax {
}

try FunctionDeclSyntax("open func requiresLeadingNewline(_ keyPath: AnyKeyPath) -> Bool") {
try SwitchStmtSyntax("switch keyPath") {
try SwitchExprSyntax("switch keyPath") {
for node in SYNTAX_NODES where !node.isBase {
for child in node.children where child.requiresLeadingNewline {
SwitchCaseSyntax("case \\\(raw: node.type.syntaxBaseName).\(raw: child.swiftName):") {
Expand All @@ -146,7 +146,7 @@ let basicFormatFile = SourceFileSyntax {
}

try FunctionDeclSyntax("open func childrenSeparatedByNewline(_ node: Syntax) -> Bool") {
try SwitchStmtSyntax("switch node.as(SyntaxEnum.self)") {
try SwitchExprSyntax("switch node.as(SyntaxEnum.self)") {
for node in SYNTAX_NODES where !node.isBase {
if node.elementsSeparatedByNewline {
SwitchCaseSyntax("case .\(raw: node.swiftSyntaxKind):") {
Expand All @@ -167,7 +167,7 @@ let basicFormatFile = SourceFileSyntax {
open func requiresLeadingSpace(_ keyPath: AnyKeyPath) -> Bool?
"""
) {
try SwitchStmtSyntax("switch keyPath") {
try SwitchExprSyntax("switch keyPath") {
for node in SYNTAX_NODES where !node.isBase {
for child in node.children {
if let requiresLeadingSpace = child.requiresLeadingSpace {
Expand All @@ -192,7 +192,7 @@ let basicFormatFile = SourceFileSyntax {
"""
)

try SwitchStmtSyntax("switch token.tokenKind") {
try SwitchExprSyntax("switch token.tokenKind") {
for token in SYNTAX_TOKENS {
if token.requiresLeadingSpace {
SwitchCaseSyntax("case .\(raw: token.swiftKind):") {
Expand All @@ -218,7 +218,7 @@ let basicFormatFile = SourceFileSyntax {
open func requiresTrailingSpace(_ keyPath: AnyKeyPath) -> Bool?
"""
) {
try SwitchStmtSyntax("switch keyPath") {
try SwitchExprSyntax("switch keyPath") {
for node in SYNTAX_NODES where !node.isBase {
for child in node.children {
if let requiresTrailingSpace = child.requiresTrailingSpace {
Expand Down Expand Up @@ -262,7 +262,7 @@ let basicFormatFile = SourceFileSyntax {
"""
)

try SwitchStmtSyntax("switch token.tokenKind") {
try SwitchExprSyntax("switch token.tokenKind") {
for token in SYNTAX_TOKENS {
if token.requiresTrailingSpace {
SwitchCaseSyntax("case .\(raw: token.swiftKind):") {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,13 +63,13 @@ let syntaxClassificationFile = SourceFileSyntax {
) -> (SyntaxClassification, Bool)?
"""
) {
try IfStmtSyntax(
try IfExprSyntax(
"""
// Separate checks for token nodes (most common checks) versus checks for layout nodes.
if childKind == .token
"""
) {
try SwitchStmtSyntax("switch (parentKind, indexInParent)") {
try SwitchExprSyntax("switch (parentKind, indexInParent)") {
for childClassification in node_child_classifications where childClassification.isToken {
SwitchCaseSyntax("case (.\(raw: childClassification.parent.swiftSyntaxKind), \(raw: childClassification.childIndex)):") {
StmtSyntax("return (.\(raw: childClassification.classification!.swiftName), \(raw: childClassification.force))")
Expand All @@ -79,7 +79,7 @@ let syntaxClassificationFile = SourceFileSyntax {
SwitchCaseSyntax("default: return nil")
}
} else: {
try SwitchStmtSyntax("switch (parentKind, indexInParent)") {
try SwitchExprSyntax("switch (parentKind, indexInParent)") {
for childClassification in node_child_classifications where !childClassification.isToken {
SwitchCaseSyntax("case (.\(raw: childClassification.parent.swiftSyntaxKind), \(raw: childClassification.childIndex)):") {
StmtSyntax("return (.\(raw: childClassification.classification!.swiftName), \(raw: childClassification.force))")
Expand All @@ -94,7 +94,7 @@ let syntaxClassificationFile = SourceFileSyntax {

try! ExtensionDeclSyntax("extension RawTokenKind") {
try VariableDeclSyntax("internal var classification: SyntaxClassification") {
try SwitchStmtSyntax("switch self.base") {
try SwitchExprSyntax("switch self.base") {
for token in SYNTAX_TOKENS {
SwitchCaseSyntax("case .\(raw: token.swiftKind):") {
if let classification = token.classification {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ let declarationModifierFile = SourceFileSyntax {
}

try InitializerDeclSyntax("init?(lexeme: Lexer.Lexeme)") {
try SwitchStmtSyntax("switch lexeme") {
try SwitchExprSyntax("switch lexeme") {
for attribute in DECL_MODIFIER_KINDS {
SwitchCaseSyntax("case RawTokenKindMatch(.\(raw: attribute.swiftName)):") {
ExprSyntax("self = .\(raw: attribute.swiftName)")
Expand All @@ -43,7 +43,7 @@ let declarationModifierFile = SourceFileSyntax {
}

try VariableDeclSyntax("var rawTokenKind: RawTokenKind") {
try SwitchStmtSyntax("switch self") {
try SwitchExprSyntax("switch self") {
for attribute in DECL_MODIFIER_KINDS {
SwitchCaseSyntax("case .\(raw: attribute.swiftName):") {
if attribute.swiftName.hasSuffix("Keyword") {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ let typeAttributeFile = SourceFileSyntax {
}

try InitializerDeclSyntax("init?(lexeme: Lexer.Lexeme)") {
SwitchStmtSyntax(switchKeyword: .keyword(.switch), expression: ExprSyntax("lexeme")) {
SwitchExprSyntax(switchKeyword: .keyword(.switch), expression: ExprSyntax("lexeme")) {
for attribute in TYPE_ATTR_KINDS {
SwitchCaseSyntax("case RawTokenKindMatch(.\(raw: attribute.name)):") {
ExprSyntax("self = .\(raw: attribute.swiftName)")
Expand All @@ -44,7 +44,7 @@ let typeAttributeFile = SourceFileSyntax {
}

try VariableDeclSyntax("var rawTokenKind: RawTokenKind") {
SwitchStmtSyntax(switchKeyword: .keyword(.switch), expression: ExprSyntax("self")) {
SwitchExprSyntax(switchKeyword: .keyword(.switch), expression: ExprSyntax("self")) {
for attribute in TYPE_ATTR_KINDS {
SwitchCaseSyntax("case .\(raw: attribute.swiftName):") {
StmtSyntax("return .keyword(.\(raw: attribute.name))")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,29 +23,27 @@ let miscFile = SourceFileSyntax {
"""
) {
try VariableDeclSyntax("public static var structure: SyntaxNodeStructure") {
ReturnStmtSyntax(
expression: FunctionCallExprSyntax(callee: ExprSyntax(".choices")) {
TupleExprElementSyntax(
expression: ArrayExprSyntax {
ArrayElementSyntax(
expression: ExprSyntax("\n.node(TokenSyntax.self)")
)
let choices = ArrayExprSyntax {
ArrayElementSyntax(
leadingTrivia: .newline,
expression: ExprSyntax(".node(TokenSyntax.self)")
)

for node in NON_BASE_SYNTAX_NODES {
ArrayElementSyntax(
expression: ExprSyntax("\n.node(\(raw: node.name).self)")
)
}
}
for node in NON_BASE_SYNTAX_NODES {
ArrayElementSyntax(
leadingTrivia: .newline,
expression: ExprSyntax(".node(\(raw: node.name).self)")
)
}
)
}

StmtSyntax("return .choices(\(choices))")
}
}

try! ExtensionDeclSyntax("extension SyntaxKind") {
try VariableDeclSyntax("public var syntaxNodeType: SyntaxProtocol.Type") {
try SwitchStmtSyntax("switch self") {
try SwitchExprSyntax("switch self") {
SwitchCaseSyntax("case .token:") {
StmtSyntax("return TokenSyntax.self")
}
Expand All @@ -59,7 +57,7 @@ let miscFile = SourceFileSyntax {
}

try VariableDeclSyntax("public var nameForDiagnostics: String?") {
try SwitchStmtSyntax("switch self") {
try SwitchExprSyntax("switch self") {
SwitchCaseSyntax("case .token:") {
StmtSyntax(#"return "token""#)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,19 +104,15 @@ let syntaxBaseNodesFile = SourceFileSyntax(leadingTrivia: [.blockComment(generat
)

try InitializerDeclSyntax("public init?<S: SyntaxProtocol>(_ node: S)") {
try SwitchStmtSyntax("switch node.raw.kind") {
try SwitchExprSyntax("switch node.raw.kind") {
SwitchCaseListSyntax {
SwitchCaseSyntax(
label: .case(
SwitchCaseLabelSyntax {
for childNode in SYNTAX_NODES where childNode.baseKind == node.syntaxKind {
CaseItemSyntax(
pattern: ExpressionPatternSyntax(
expression: MemberAccessExprSyntax(
base: nil,
dot: .periodToken(),
name: .identifier(childNode.swiftSyntaxKind)
)
expression: ExprSyntax(".\(raw: childNode.swiftSyntaxKind)")
)
)
}
Expand Down Expand Up @@ -148,20 +144,14 @@ let syntaxBaseNodesFile = SourceFileSyntax(leadingTrivia: [.blockComment(generat
condition: ExprSyntax("DEBUG"),
elements: IfConfigClauseSyntax.Elements.statements(
CodeBlockItemListSyntax {
SwitchStmtSyntax(
expression: ExprSyntax("data.raw.kind")
) {
try! SwitchExprSyntax("switch data.raw.kind") {
SwitchCaseSyntax(
label: .case(
SwitchCaseLabelSyntax {
for childNode in SYNTAX_NODES where childNode.baseKind == node.syntaxKind {
CaseItemSyntax(
pattern: ExpressionPatternSyntax(
expression: MemberAccessExprSyntax(
base: nil,
dot: .periodToken(),
name: .identifier(childNode.swiftSyntaxKind)
)
expression: ExprSyntax(".\(raw: childNode.swiftSyntaxKind)")
)
)
}
Expand Down Expand Up @@ -231,21 +221,16 @@ let syntaxBaseNodesFile = SourceFileSyntax(leadingTrivia: [.blockComment(generat
)

try VariableDeclSyntax("public static var structure: SyntaxNodeStructure") {
ReturnStmtSyntax(
expression: FunctionCallExprSyntax(
callee: ExprSyntax(".choices")
) {
TupleExprElementSyntax(
expression: ArrayExprSyntax {
for childNode in SYNTAX_NODES where childNode.baseKind == node.syntaxKind {
ArrayElementSyntax(
expression: ExprSyntax("\n.node(\(raw: childNode.name).self)")
)
}
}
let choices = ArrayExprSyntax {
for childNode in SYNTAX_NODES where childNode.baseKind == node.syntaxKind {
ArrayElementSyntax(
leadingTrivia: .newline,
expression: ExprSyntax(".node(\(raw: childNode.name).self)")
)
}
)
}

StmtSyntax("return .choices(\(choices))")
}

DeclSyntax(
Expand All @@ -268,6 +253,5 @@ let syntaxBaseNodesFile = SourceFileSyntax(leadingTrivia: [.blockComment(generat
}
"""
)

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ let syntaxCollectionsFile = SourceFileSyntax(leadingTrivia: [.blockComment(gener
}

try VariableDeclSyntax("public var _syntaxNode: Syntax") {
SwitchStmtSyntax(switchKeyword: .keyword(.switch), expression: ExprSyntax("self")) {
SwitchExprSyntax(switchKeyword: .keyword(.switch), expression: ExprSyntax("self")) {
for choiceName in node.collectionElementChoices ?? [] {
let choice = SYNTAX_NODE_MAP[choiceName]!
SwitchCaseSyntax("case .\(raw: choice.swiftSyntaxKind)(let node):") {
Expand Down Expand Up @@ -115,22 +115,17 @@ let syntaxCollectionsFile = SourceFileSyntax(leadingTrivia: [.blockComment(gener
}

try VariableDeclSyntax("public static var structure: SyntaxNodeStructure") {
ReturnStmtSyntax(
expression: FunctionCallExprSyntax(
callee: ExprSyntax(".choices")
) {
TupleExprElementSyntax(
expression: ArrayExprSyntax {
for choiceName in node.collectionElementChoices ?? [] {
let choice = SYNTAX_NODE_MAP[choiceName]!
ArrayElementSyntax(
expression: ExprSyntax("\n.node(\(raw: choice.name).self)")
)
}
}
let choices = ArrayExprSyntax {
for choiceName in node.collectionElementChoices ?? [] {
let choice = SYNTAX_NODE_MAP[choiceName]!
ArrayElementSyntax(
leadingTrivia: .newline,
expression: ExprSyntax(".node(\(raw: choice.name).self)")
)
}
)
}

StmtSyntax("return .choices(\(choices))")
}
}
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ let syntaxEnumFile = SourceFileSyntax(leadingTrivia: .docLineComment(generateCop
func `as`(_: SyntaxEnum.Type) -> SyntaxEnum
"""
) {
try SwitchStmtSyntax("switch raw.kind") {
try SwitchExprSyntax("switch raw.kind") {
SwitchCaseSyntax("case .token:") {
StmtSyntax("return .token(TokenSyntax(self)!)")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ let syntaxKindFile = SourceFileSyntax(leadingTrivia: .docLineComment(generateCop
}

try VariableDeclSyntax("public var isSyntaxCollection: Bool") {
try SwitchStmtSyntax("switch self") {
try SwitchExprSyntax("switch self") {
for node in SYNTAX_NODES where node.baseKind == "SyntaxCollection" {
SwitchCaseSyntax("case .\(raw: node.swiftSyntaxKind):") {
StmtSyntax("return true")
Expand All @@ -43,7 +43,7 @@ let syntaxKindFile = SourceFileSyntax(leadingTrivia: .docLineComment(generateCop
}

try VariableDeclSyntax("public var isMissing: Bool") {
try SwitchStmtSyntax("switch self") {
try SwitchExprSyntax("switch self") {
for name in SYNTAX_BASE_KINDS where !["Syntax", "SyntaxCollection"].contains(name) {
SwitchCaseSyntax("case .missing\(raw: name):") {
StmtSyntax("return true")
Expand Down
Loading