Skip to content

Commit 9bf7255

Browse files
committed
Generate garbage nodes in SwiftSyntaxBuilderGeneration
1 parent 366da77 commit 9bf7255

File tree

1 file changed

+23
-1
lines changed

1 file changed

+23
-1
lines changed

Sources/SwiftSyntaxBuilderGeneration/Node.swift

Lines changed: 23 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,30 @@ 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+
[
97+
Child(
98+
name: i == 0
99+
? "GarbageBefore\(child.name)"
100+
: "GarbageBetween\(children[i - 1].name)And\(children[i].name)",
101+
kind: "GarbageNodes",
102+
isOptional: true,
103+
collectionElementName: name
104+
),
105+
child,
106+
]
107+
}
108+
}
109+
110+
self.nonGarbageChildren = children.filter { !$0.isGarbageNodes }
111+
90112
if !SYNTAX_BASE_KINDS.contains(baseKind) {
91113
fatalError("unknown base kind '\(baseKind)' for node '\(syntaxKind)'")
92114
}

0 commit comments

Comments
 (0)