Skip to content

Commit 1f6d784

Browse files
committed
Fix leading trivia is not applied if raw syntax is empty
1 parent b12be78 commit 1f6d784

File tree

4 files changed

+21
-14
lines changed

4 files changed

+21
-14
lines changed

Sources/SwiftSyntax/RawSyntax.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1113,7 +1113,7 @@ final class RawSyntax: ManagedBuffer<RawSyntaxBase, RawSyntaxDataElement> {
11131113
}
11141114
}
11151115

1116-
func withLeadingTrivia(_ leadingTrivia: Trivia) -> RawSyntax {
1116+
func withLeadingTrivia(_ leadingTrivia: Trivia) -> RawSyntax? {
11171117
if isToken {
11181118
return RawSyntax.createAndCalcLength(
11191119
kind: formTokenKind()!,
@@ -1123,16 +1123,16 @@ final class RawSyntax: ManagedBuffer<RawSyntaxBase, RawSyntaxDataElement> {
11231123
} else {
11241124
var layout = formLayoutArray()
11251125
for (index, raw) in layout.enumerated() {
1126-
if let raw = raw {
1127-
layout[index] = raw.withLeadingTrivia(leadingTrivia)
1126+
if let raw = raw, let newRaw = raw.withLeadingTrivia(leadingTrivia) {
1127+
layout[index] = newRaw
11281128
return replacingLayout(layout)
11291129
}
11301130
}
1131-
return self
1131+
return nil
11321132
}
11331133
}
11341134

1135-
func withTrailingTrivia(_ trailingTrivia: Trivia) -> RawSyntax {
1135+
func withTrailingTrivia(_ trailingTrivia: Trivia) -> RawSyntax? {
11361136
if isToken {
11371137
return RawSyntax.createAndCalcLength(
11381138
kind: formTokenKind()!,
@@ -1142,12 +1142,12 @@ final class RawSyntax: ManagedBuffer<RawSyntaxBase, RawSyntaxDataElement> {
11421142
} else {
11431143
var layout = formLayoutArray()
11441144
for (index, raw) in layout.enumerated().reversed() {
1145-
if let raw = raw {
1146-
layout[index] = raw.withTrailingTrivia(trailingTrivia)
1145+
if let raw = raw, let newRaw = raw.withTrailingTrivia(trailingTrivia) {
1146+
layout[index] = newRaw
11471147
return replacingLayout(layout)
11481148
}
11491149
}
1150-
return self
1150+
return nil
11511151
}
11521152
}
11531153

Sources/SwiftSyntax/SyntaxData.swift

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -356,10 +356,18 @@ struct SyntaxData {
356356
}
357357

358358
func withLeadingTrivia(_ leadingTrivia: Trivia) -> SyntaxData {
359-
return replacingSelf(raw.withLeadingTrivia(leadingTrivia))
359+
if let raw = raw.withLeadingTrivia(leadingTrivia) {
360+
return replacingSelf(raw)
361+
} else {
362+
return replacingSelf(raw)
363+
}
360364
}
361365

362366
func withTrailingTrivia(_ trailingTrivia: Trivia) -> SyntaxData {
363-
return replacingSelf(raw.withTrailingTrivia(trailingTrivia))
367+
if let raw = raw.withTrailingTrivia(trailingTrivia) {
368+
return replacingSelf(raw)
369+
} else {
370+
return replacingSelf(raw)
371+
}
364372
}
365373
}

Tests/SwiftSyntaxBuilderTest/FunctionTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ final class FunctionTests: XCTestCase {
5252
let syntax = buildable.buildSyntax(format: Format(), leadingTrivia: leadingTrivia)
5353

5454
XCTAssertEqual(syntax.description, """
55-
func fibonacci(_ n: Int)-> Int{
55+
func fibonacci(_ n: Int)-> Int{
5656
if n <= 1{
5757
return n
5858
}

Tests/SwiftSyntaxBuilderTest/ProtocolDeclTests.swift

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ final class ProtocolDeclTests: XCTestCase {
1212
let functionSignature = FunctionSignature(input: input, output: returnType)
1313

1414
let buildable = ProtocolDecl(identifier: "DeclListBuildable", attributesBuilder: { TokenSyntax.public }, membersBuilder: {
15-
// FIXME: We need to add the `modifiersBuilder` with a non-empty value, otherwise will the builder omit newline.
16-
FunctionDecl(identifier: .identifier("buildDeclList"), signature: functionSignature, body: nil, modifiersBuilder: { TokenSyntax.public })
15+
FunctionDecl(identifier: .identifier("buildDeclList"), signature: functionSignature, body: nil, modifiersBuilder: { })
1716
})
1817

1918
let syntax = buildable.buildSyntax(format: Format())
@@ -23,7 +22,7 @@ final class ProtocolDeclTests: XCTestCase {
2322

2423
XCTAssertEqual(text, """
2524
public protocol DeclListBuildable{
26-
public func buildDeclList(format: Format, leadingTrivia: Trivia?)-> [DeclSyntax]
25+
func buildDeclList(format: Format, leadingTrivia: Trivia?)-> [DeclSyntax]
2726
}
2827
""")
2928
}

0 commit comments

Comments
 (0)