diff --git a/CodeGeneration/Sources/Utils/CodeGenerationFormat.swift b/CodeGeneration/Sources/Utils/CodeGenerationFormat.swift index 0ff670166aa..8de45c947c9 100644 --- a/CodeGeneration/Sources/Utils/CodeGenerationFormat.swift +++ b/CodeGeneration/Sources/Utils/CodeGenerationFormat.swift @@ -158,7 +158,14 @@ public class CodeGenerationFormat: BasicFormat { } formattedChildren = formattedChildren.map { child in var child = child - child.trailingTrivia = Trivia(pieces: child.trailingTrivia.drop(while: \.isSpaceOrTab)) + + if let firstNonSpaceOrTabIndex = child.trailingTrivia.firstIndex(where: { !$0.isSpaceOrTab }) { + if child.trailingTrivia[firstNonSpaceOrTabIndex].isNewline { + child.trailingTrivia = Trivia(pieces: child.trailingTrivia.suffix(from: firstNonSpaceOrTabIndex)) + } + } else { + child.trailingTrivia = Trivia() + } if !child.startsOnNewline { child.leadingTrivia = indentedNewline + child.leadingTrivia @@ -166,13 +173,15 @@ public class CodeGenerationFormat: BasicFormat { return child } decreaseIndentationLevel() - if let lastChild = formattedChildren.last { + if let lastChild = formattedChildren.last, + !lastChild.trailingTrivia.contains(where: \.isNewline) + { let nextTokenStartsWithNewline = lastChild.nextToken(viewMode: .sourceAccurate)?.leadingTrivia.first?.isNewline ?? false if !nextTokenStartsWithNewline { formattedChildren[formattedChildren.count - 1] = lastChild.with( \.trailingTrivia, - indentedNewline + lastChild.trailingTrivia + indentedNewline ) } }