Skip to content

Commit 5f2e102

Browse files
committed
Prepend/append trivia passed to RawSyntax.makeLayout instead of overriding it
Previously, the first/last node's leading/trailing trivia was overriden. That’s surprising. Instead, we want to prepend/append the new trivia.
1 parent 724b5d3 commit 5f2e102

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

Sources/SwiftSyntax/Raw/RawSyntax.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -714,12 +714,12 @@ extension RawSyntax {
714714
if let leadingTrivia = leadingTrivia,
715715
let idx = layout.firstIndex(where: { $0 != nil })
716716
{
717-
layout[idx] = layout[idx]!.withLeadingTrivia(leadingTrivia, arena: arena)
717+
layout[idx] = layout[idx]!.withLeadingTrivia(leadingTrivia + (layout[idx]?.formLeadingTrivia() ?? []), arena: arena)
718718
}
719719
if let trailingTrivia = trailingTrivia,
720720
let idx = layout.lastIndex(where: { $0 != nil })
721721
{
722-
layout[idx] = layout[idx]!.withTrailingTrivia(trailingTrivia, arena: arena)
722+
layout[idx] = layout[idx]!.withTrailingTrivia((layout[idx]?.formTrailingTrivia() ?? []) + trailingTrivia, arena: arena)
723723
}
724724
return .makeLayout(kind: kind, from: layout, arena: arena)
725725
}

Tests/SwiftSyntaxTest/SyntaxCreationTests.swift

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,4 +211,27 @@ public class SyntaxCreationTests: XCTestCase {
211211
XCTAssertEqual("\(exprList)", "1 \(operatorName) 1")
212212
}
213213
}
214+
215+
func testTriviaInInitializxerDoesNotOverrideFirstNode() {
216+
let node = ExpressionPatternSyntax(
217+
leadingTrivia: .lineComment("// Outer leading") + .newline,
218+
expression: IntegerLiteralExprSyntax(
219+
leadingTrivia: .lineComment("// Inner leading") + .newline,
220+
digits: .integerLiteral("42"),
221+
trailingTrivia: .newline + .lineComment("// Inner trailing")
222+
),
223+
trailingTrivia: .newline + .lineComment("// Outer trailing")
224+
)
225+
226+
XCTAssertEqual(
227+
node.description,
228+
"""
229+
// Outer leading
230+
// Inner leading
231+
42
232+
// Inner trailing
233+
// Outer trailing
234+
"""
235+
)
236+
}
214237
}

0 commit comments

Comments
 (0)