Skip to content

Commit 323e54e

Browse files
committed
Generate garbage nodes in SwiftSyntaxBuilderGeneration
1 parent 366da77 commit 323e54e

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

Sources/SwiftSyntaxBuilderGeneration/Node.swift

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class Node {
2222
let baseKind: String
2323
let traits: [String]
2424
let children: [Child]
25+
let nonGarbageChildren: [Child]
2526
let collectionElementName: String?
2627
let collectionElementChoices: [String]?
2728
let omitWhenEmpty: Bool
@@ -84,9 +85,34 @@ class Node {
8485
self.description = description
8586

8687
self.traits = traits
87-
self.children = children
8888
self.baseKind = kind
8989

90+
if kind == "SyntaxCollection" {
91+
self.children = children
92+
} else {
93+
// Add implicitly generated GarbageNodes children between
94+
// any two defined children
95+
self.children = children.enumerated().flatMap { (i, child) in
96+
let garbageName: String
97+
if i == 0 {
98+
garbageName = "GarbageBefore\(child.name)"
99+
} else {
100+
garbageName = "GarbageBetween\(children[i - 1].name)And\(child.name)"
101+
}
102+
return [
103+
Child(
104+
name: garbageName,
105+
kind: "GarbageNodes",
106+
isOptional: true,
107+
collectionElementName: garbageName
108+
),
109+
child,
110+
]
111+
}
112+
}
113+
114+
self.nonGarbageChildren = children.filter { !$0.isGarbageNodes }
115+
90116
if !SYNTAX_BASE_KINDS.contains(baseKind) {
91117
fatalError("unknown base kind '\(baseKind)' for node '\(syntaxKind)'")
92118
}

0 commit comments

Comments
 (0)