From a923f92fa22f1823a0ef8019d9cdf2f71879ed1d Mon Sep 17 00:00:00 2001 From: Omran Khoja Date: Tue, 5 Dec 2023 14:55:13 -0500 Subject: [PATCH] [738] Adds an option for trimmingTrailingWhitespace to ignore whitespace only lines --- Source/SourceKittenFramework/File.swift | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Source/SourceKittenFramework/File.swift b/Source/SourceKittenFramework/File.swift index bbecc2aa..98479fcf 100644 --- a/Source/SourceKittenFramework/File.swift +++ b/Source/SourceKittenFramework/File.swift @@ -102,6 +102,7 @@ public final class File { // swiftlint:disable:this type_body_length /// - Returns: formatted String /// - Throws: Request.Error public func format(trimmingTrailingWhitespace: Bool, + ignoringEmptyLines: Bool = true, useTabs: Bool, indentWidth: Int) throws -> String { guard let path = path else { @@ -131,10 +132,12 @@ public final class File { // swiftlint:disable:this type_body_length if trimmingTrailingWhitespace { newContents = newContents.map { - $0.bridge().trimmingTrailingCharacters(in: .whitespaces) + if !$0.containsNonWhitespaceCharacters, ignoringEmptyLines { + return $0.bridge() + } + return $0.bridge().trimmingTrailingCharacters(in: .whitespaces) } } - return newContents.joined(separator: "\n") + "\n" } @@ -508,3 +511,10 @@ private extension XMLIndexer { return elements.map(dictionary(from:)) as [SourceKitRepresentable] } } + +private extension String { + var containsNonWhitespaceCharacters: Bool { + return self.contains(where: {!$0.isWhitespace}) + } +} +