Skip to content

Commit 331035c

Browse files
committed
Pass SyntaxData to RawSyntax initializer
1 parent 815e34d commit 331035c

File tree

12 files changed

+2261
-4361
lines changed

12 files changed

+2261
-4361
lines changed

CodeGeneration/Sources/generate-swift-syntax/templates/swiftsyntax/SyntaxNodesFile.swift

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -69,19 +69,18 @@ func syntaxNode(nodesStartingWith: [Character]) -> SourceFileSyntax {
6969
)
7070
)
7171
)
72-
let layoutList = ArrayExprSyntax {
73-
for child in node.children {
74-
ArrayElementSyntax(
75-
expression: MemberAccessExprSyntax(
76-
base: child.buildableType.optionalChained(
77-
expr: ExprSyntax("\(child.varOrCaseName.backtickedIfNeeded)")
78-
),
79-
period: .periodToken(),
80-
name: "raw"
81-
)
82-
)
83-
}
84-
}
72+
VariableDeclSyntax(
73+
.let,
74+
name: "nodes",
75+
type: TypeAnnotationSyntax(type: TypeSyntax("[Syntax?]")),
76+
initializer: InitializerClauseSyntax(
77+
value: ArrayExprSyntax {
78+
for child in node.children {
79+
ArrayElementSyntax(expression: ExprSyntax("Syntax(\(child.varOrCaseName.backtickedIfNeeded))"))
80+
}
81+
}
82+
)
83+
)
8584

8685
let initializer = FunctionCallExprSyntax(
8786
calledExpression: ExprSyntax("withExtendedLifetime"),
@@ -94,12 +93,11 @@ func syntaxNode(nodesStartingWith: [Character]) -> SourceFileSyntax {
9493
if node.children.isEmpty {
9594
DeclSyntax("let raw = RawSyntax.makeEmptyLayout(kind: SyntaxKind.\(node.varOrCaseName), arena: arena)")
9695
} else {
97-
DeclSyntax("let layout: [RawSyntax?] = \(layoutList)")
9896
DeclSyntax(
9997
"""
10098
let raw = RawSyntax.makeLayout(
10199
kind: SyntaxKind.\(node.varOrCaseName),
102-
from: layout,
100+
from: nodes,
103101
arena: arena,
104102
leadingTrivia: leadingTrivia,
105103
trailingTrivia: trailingTrivia
@@ -122,18 +120,6 @@ func syntaxNode(nodesStartingWith: [Character]) -> SourceFileSyntax {
122120
rightOperand: initializer
123121
)
124122

125-
VariableDeclSyntax(
126-
.let,
127-
name: "nodes",
128-
type: TypeAnnotationSyntax(type: TypeSyntax("[Syntax?]")),
129-
initializer: InitializerClauseSyntax(
130-
value: ArrayExprSyntax {
131-
for child in node.children {
132-
ArrayElementSyntax(expression: ExprSyntax("Syntax(\(child.varOrCaseName.backtickedIfNeeded))"))
133-
}
134-
}
135-
)
136-
)
137123
ExprSyntax("Syntax(self).setSyntaxTrackingOfTree(SyntaxTracking(tracking: nodes))")
138124
}
139125

@@ -195,7 +181,7 @@ func syntaxNode(nodesStartingWith: [Character]) -> SourceFileSyntax {
195181
collection = col.layoutView!.appending(element.raw, arena: arena)
196182
} else {
197183
collection = RawSyntax.makeLayout(kind: SyntaxKind.\(childNode.varOrCaseName),
198-
from: [element.raw], arena: arena)
184+
from: [Syntax(element)], arena: arena)
199185
}
200186
return Syntax(self)
201187
.replacingChild(at: \(raw: index), with: collection, rawNodeArena: arena, allocationArena: arena)

Sources/SwiftSyntax/Raw/RawSyntax.swift

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -817,13 +817,13 @@ extension RawSyntax {
817817

818818
static func makeLayout(
819819
kind: SyntaxKind,
820-
from collection: some Collection<RawSyntax?>,
820+
from collection: some Collection<Syntax?>,
821821
arena: __shared SyntaxArena,
822822
leadingTrivia: Trivia? = nil,
823823
trailingTrivia: Trivia? = nil
824824
) -> RawSyntax {
825825
if leadingTrivia != nil || trailingTrivia != nil {
826-
var layout = Array(collection)
826+
var layout = collection.map { $0?.raw }
827827
if let leadingTrivia = leadingTrivia,
828828
// Find the index of the first non-empty node so we can attach the trivia to it.
829829
let idx = layout.firstIndex(where: { $0 != nil && ($0!.isToken || $0!.totalNodes > 1) })
@@ -842,11 +842,13 @@ extension RawSyntax {
842842
arena: arena
843843
)
844844
}
845-
return .makeLayout(kind: kind, from: layout, arena: arena)
845+
return .makeLayout(kind: kind, uninitializedCount: collection.count, arena: arena) {
846+
_ = $0.initialize(from: layout)
847+
}
846848
}
847849

848850
return .makeLayout(kind: kind, uninitializedCount: collection.count, arena: arena) {
849-
_ = $0.initialize(from: collection)
851+
_ = $0.initialize(from: collection.lazy.map { $0?.raw })
850852
}
851853
}
852854
}

Sources/SwiftSyntax/SyntaxCollection.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ extension SyntaxCollection {
4545
let raw = withExtendedLifetime(children) {
4646
RawSyntax.makeLayout(
4747
kind: Self.syntaxKind,
48-
from: children.map { $0.raw },
48+
from: children.map { Syntax($0) },
4949
arena: arena
5050
)
5151
}

0 commit comments

Comments
 (0)