Skip to content

Commit bd06748

Browse files
committed
Pass SyntaxData to RawSyntax initializer
1 parent 76580d9 commit bd06748

File tree

12 files changed

+2227
-4296
lines changed

12 files changed

+2227
-4296
lines changed

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

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -80,17 +80,18 @@ func syntaxNode(nodesStartingWith: [Character]) -> SourceFileSyntax {
8080
)
8181
)
8282
)
83-
let layoutList = ArrayExprSyntax {
84-
for child in node.children {
85-
ArrayElementSyntax(
86-
expression: MemberAccessExprSyntax(
87-
base: child.buildableType.optionalChained(expr: ExprSyntax("\(child.varOrCaseName.backtickedIfNeeded)")),
88-
period: .periodToken(),
89-
name: "raw"
90-
)
91-
)
92-
}
93-
}
83+
VariableDeclSyntax(
84+
.let,
85+
name: "nodes",
86+
type: TypeAnnotationSyntax(type: TypeSyntax("[Syntax?]")),
87+
initializer: InitializerClauseSyntax(
88+
value: ArrayExprSyntax {
89+
for child in node.children {
90+
ArrayElementSyntax(expression: ExprSyntax("Syntax(\(child.varOrCaseName.backtickedIfNeeded))"))
91+
}
92+
}
93+
)
94+
)
9495

9596
let initializer = FunctionCallExprSyntax(
9697
calledExpression: ExprSyntax("withExtendedLifetime"),
@@ -103,12 +104,11 @@ func syntaxNode(nodesStartingWith: [Character]) -> SourceFileSyntax {
103104
if node.children.isEmpty {
104105
DeclSyntax("let raw = RawSyntax.makeEmptyLayout(kind: SyntaxKind.\(node.varOrCaseName), arena: arena)")
105106
} else {
106-
DeclSyntax("let layout: [RawSyntax?] = \(layoutList)")
107107
DeclSyntax(
108108
"""
109109
let raw = RawSyntax.makeLayout(
110110
kind: SyntaxKind.\(node.varOrCaseName),
111-
from: layout,
111+
from: nodes,
112112
arena: arena,
113113
leadingTrivia: leadingTrivia,
114114
trailingTrivia: trailingTrivia
@@ -131,18 +131,6 @@ func syntaxNode(nodesStartingWith: [Character]) -> SourceFileSyntax {
131131
rightOperand: initializer
132132
)
133133

134-
VariableDeclSyntax(
135-
.let,
136-
name: "nodes",
137-
type: TypeAnnotationSyntax(type: TypeSyntax("[Syntax?]")),
138-
initializer: InitializerClauseSyntax(
139-
value: ArrayExprSyntax {
140-
for child in node.children {
141-
ArrayElementSyntax(expression: ExprSyntax("Syntax(\(child.varOrCaseName.backtickedIfNeeded))"))
142-
}
143-
}
144-
)
145-
)
146134
ExprSyntax("Syntax(self).setSyntaxTrackingOfTree(SyntaxTracking(tracking: nodes))")
147135
}
148136

@@ -202,7 +190,7 @@ func syntaxNode(nodesStartingWith: [Character]) -> SourceFileSyntax {
202190
collection = col.layoutView!.appending(element.raw, arena: arena)
203191
} else {
204192
collection = RawSyntax.makeLayout(kind: SyntaxKind.\(childNode.varOrCaseName),
205-
from: [element.raw], arena: arena)
193+
from: [Syntax(element)], arena: arena)
206194
}
207195
return Syntax(self)
208196
.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
@@ -820,13 +820,13 @@ extension RawSyntax {
820820

821821
static func makeLayout(
822822
kind: SyntaxKind,
823-
from collection: some Collection<RawSyntax?>,
823+
from collection: some Collection<Syntax?>,
824824
arena: __shared SyntaxArena,
825825
leadingTrivia: Trivia? = nil,
826826
trailingTrivia: Trivia? = nil
827827
) -> RawSyntax {
828828
if leadingTrivia != nil || trailingTrivia != nil {
829-
var layout = Array(collection)
829+
var layout = collection.map { $0?.raw }
830830
if let leadingTrivia = leadingTrivia,
831831
// Find the index of the first non-empty node so we can attach the trivia to it.
832832
let idx = layout.firstIndex(where: { $0 != nil && ($0!.isToken || $0!.totalNodes > 1) })
@@ -839,11 +839,13 @@ extension RawSyntax {
839839
{
840840
layout[idx] = layout[idx]!.withTrailingTrivia((layout[idx]?.formTrailingTrivia() ?? []) + trailingTrivia, arena: arena)
841841
}
842-
return .makeLayout(kind: kind, from: layout, arena: arena)
842+
return .makeLayout(kind: kind, uninitializedCount: collection.count, arena: arena) {
843+
_ = $0.initialize(from: layout)
844+
}
843845
}
844846

845847
return .makeLayout(kind: kind, uninitializedCount: collection.count, arena: arena) {
846-
_ = $0.initialize(from: collection)
848+
_ = $0.initialize(from: collection.lazy.map { $0?.raw })
847849
}
848850
}
849851
}

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)