Skip to content

Commit eae9f85

Browse files
authored
Add SwiftCompile Support (#254)
1 parent e3898d2 commit eae9f85

File tree

8 files changed

+103
-2
lines changed

8 files changed

+103
-2
lines changed

Sources/XcbeautifyLib/CaptureGroups.swift

+30
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,36 @@ struct CompileCaptureGroup: CompileFileCaptureGroup {
265265
}
266266
}
267267

268+
struct SwiftCompileCaptureGroup: CompileFileCaptureGroup {
269+
static let outputType: OutputType = .task
270+
271+
/// Regular expression captured groups:
272+
/// $1 = file path
273+
/// $2 = filename (e.g. KWNull.m)
274+
/// $3 = target
275+
static let regex = Regex(pattern: #"^SwiftCompile \w+ \w+ ((?:\.|[^ ])+\/((?:\.|[^ ])+\.(?:m|mm|c|cc|cpp|cxx|swift))) \((in target '(.*)' from project '.*')\)$"#)
276+
277+
let filePath: String
278+
let filename: String
279+
let target: String
280+
281+
init?(groups: [String]) {
282+
assert(groups.count >= 3)
283+
guard let filePath = groups[safe: 0], let filename = groups[safe: 1], let target = groups.last else { return nil }
284+
self.filePath = filePath
285+
self.filename = filename
286+
self.target = target
287+
}
288+
}
289+
290+
struct SwiftCompilingCaptureGroup: CaptureGroup {
291+
static let outputType: OutputType = .task
292+
293+
static let regex = Regex(pattern: #"^SwiftCompile \w+ \w+ Compiling\\"#)
294+
295+
init?(groups: [String]) { }
296+
}
297+
268298
struct CompileCommandCaptureGroup: CaptureGroup {
269299
static let outputType: OutputType = .task
270300

Sources/XcbeautifyLib/Parser.swift

+2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ package class Parser {
2424
CodesignFrameworkCaptureGroup.self,
2525
CodesignCaptureGroup.self,
2626
CompileCaptureGroup.self,
27+
SwiftCompileCaptureGroup.self,
28+
SwiftCompilingCaptureGroup.self,
2729
CompileCommandCaptureGroup.self,
2830
CompileXibCaptureGroup.self,
2931
CompileStoryboardCaptureGroup.self,

Sources/XcbeautifyLib/Renderers/OutputRendering.swift

+9
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ protocol OutputRendering {
1313
func formatCodeSign(group: CodesignCaptureGroup) -> String
1414
func formatCodeSignFramework(group: CodesignFrameworkCaptureGroup) -> String
1515
func formatCompile(group: CompileFileCaptureGroup) -> String
16+
func formatSwiftCompiling(group: SwiftCompilingCaptureGroup) -> String?
1617
func formatCompileCommand(group: CompileCommandCaptureGroup) -> String?
1718
func formatCompileError(group: CompileErrorCaptureGroup, additionalLines: @escaping () -> (String?)) -> String
1819
func formatCompileWarning(group: CompileWarningCaptureGroup, additionalLines: @escaping () -> (String?)) -> String
@@ -114,6 +115,10 @@ extension OutputRendering {
114115
return formatCodeSignFramework(group: group)
115116
case let group as CompileCaptureGroup:
116117
return formatCompile(group: group)
118+
case let group as SwiftCompileCaptureGroup:
119+
return formatCompile(group: group)
120+
case let group as SwiftCompilingCaptureGroup:
121+
return formatSwiftCompiling(group: group)
117122
case let group as CompileCommandCaptureGroup:
118123
return formatCompileCommand(group: group)
119124
case let group as CompileErrorCaptureGroup:
@@ -302,6 +307,10 @@ extension OutputRendering {
302307
nil
303308
}
304309

310+
func formatSwiftCompiling(group: SwiftCompilingCaptureGroup) -> String? {
311+
nil
312+
}
313+
305314
func formatCopy(group: CopyCaptureGroup) -> String {
306315
let filename = group.file
307316
let target = group.target

Sources/XcbeautifyLib/String+CapturedGroups.swift

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ extension String {
1313
CodesignCaptureGroup.self,
1414
CodesignFrameworkCaptureGroup.self,
1515
CompileCaptureGroup.self,
16+
SwiftCompileCaptureGroup.self,
17+
SwiftCompilingCaptureGroup.self,
1618
CompileCommandCaptureGroup.self,
1719
CompileXibCaptureGroup.self,
1820
CompileStoryboardCaptureGroup.self,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
//
2+
// CaptureGroupTests.swift
3+
//
4+
//
5+
// Created by Charles Pisciotta on 2/25/24.
6+
//
7+
8+
import XCTest
9+
@testable import XcbeautifyLib
10+
11+
final class CaptureGroupTests: XCTestCase {
12+
func testSwiftCompiling() {
13+
let inputs = [
14+
#"SwiftCompile normal x86_64 Compiling\ BackyardBirdsDataContainer.swift,\ ColorData.swift,\ DataGeneration.swift,\ DataGenerationOptions.swift /Backyard-Birds/BackyardBirdsData/General/BackyardBirdsDataContainer.swift /Backyard-Birds/BackyardBirdsData/General/ColorData.swift /Backyard-Birds/BackyardBirdsData/General/DataGeneration.swift /Backyard-Birds/BackyardBirdsData/General/DataGenerationOptions.swift (in target 'BackyardBirdsData' from project 'BackyardBirdsData')"#,
15+
#"SwiftCompile normal x86_64 Compiling\ BackyardSnapshot.swift,\ BackyardSupplies.swift,\ BackyardTimeOfDay.swift,\ BackyardTimeOfDayColors.swift /Backyard-Birds/BackyardBirdsData/Backyards/BackyardSnapshot.swift /Backyard-Birds/BackyardBirdsData/Backyards/BackyardSupplies.swift /Backyard-Birds/BackyardBirdsData/Backyards/BackyardTimeOfDay.swift /Backyard-Birds/BackyardBirdsData/Backyards/BackyardTimeOfDayColors.swift (in target 'BackyardBirdsData' from project 'BackyardBirdsData')"#,
16+
#"SwiftCompile normal arm64 Compiling\ PlantSpecies.swift,\ PlantSpeciesInfo.swift,\ PassIdentifiers.swift,\ GeneratedAssetSymbols.swift /Backyard-Birds/BackyardBirdsData/Plants/PlantSpecies.swift /Backyard-Birds/BackyardBirdsData/Plants/PlantSpeciesInfo.swift /Backyard-Birds/BackyardBirdsData/Store/PassIdentifiers.swift /Backyard-Birds/Build/Intermediates.noindex/BackyardBirdsData.build/Debug/BackyardBirdsData.build/DerivedSources/GeneratedAssetSymbols.swift (in target 'BackyardBirdsData' from project 'BackyardBirdsData')"#,
17+
#"SwiftCompile normal arm64 Compiling\ resource_bundle_accessor.swift,\ Account+DataGeneration.swift,\ Account.swift,\ Backyard+DataGeneration.swift,\ Backyard.swift /Backyard-Birds/Build/Intermediates.noindex/BackyardBirdsData.build/Debug/BackyardBirdsData.build/DerivedSources/resource_bundle_accessor.swift /Backyard-Birds/BackyardBirdsData/Account/Account+DataGeneration.swift /Backyard-Birds/BackyardBirdsData/Account/Account.swift /Backyard-Birds/BackyardBirdsData/Backyards/Backyard+DataGeneration.swift /Backyard-Birds/BackyardBirdsData/Backyards/Backyard.swift (in target 'BackyardBirdsData' from project 'BackyardBirdsData')"#,
18+
]
19+
20+
for input in inputs {
21+
XCTAssertTrue(SwiftCompilingCaptureGroup.regex.match(string: input))
22+
}
23+
}
24+
}

Tests/XcbeautifyLibTests/ParsingTests/ParsingTests.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ final class ParsingTests: XCTestCase {
3636
// It uses `XCTAssertEqual` instead of `XCTAssertLessThanOrEqual` as a reminder.
3737
// Update this magic number whenever `uncapturedOutput` is less than the current magic number.
3838
// There's a regression whenever `uncapturedOutput` is greater than the current magic number.
39-
XCTAssertEqual(uncapturedOutput, 2218)
39+
XCTAssertEqual(uncapturedOutput, 2006)
4040
}
4141

4242
func testLargeXcodebuildLog() throws {
@@ -73,6 +73,6 @@ final class ParsingTests: XCTestCase {
7373
// It uses `XCTAssertEqual` instead of `XCTAssertLessThanOrEqual` as a reminder.
7474
// Update this magic number whenever `uncapturedOutput` is less than the current magic number.
7575
// There's a regression whenever `uncapturedOutput` is greater than the current magic number.
76-
XCTAssertEqual(uncapturedOutput, 77104)
76+
XCTAssertEqual(uncapturedOutput, 69575)
7777
}
7878
}

Tests/XcbeautifyLibTests/RendererTests/GitHubActionsRendererTests.swift

+17
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,23 @@ final class GitHubActionsRendererTests: XCTestCase {
110110
#endif
111111
}
112112

113+
func testSwiftCompile_arm64() {
114+
let input = "SwiftCompile normal arm64 /path/to/File.swift (in target 'Target' from project 'Project')"
115+
let output = "[Target] Compiling File.swift"
116+
XCTAssertEqual(logFormatted(input), output)
117+
}
118+
119+
func testSwiftCompile_x86_64() {
120+
let input = "SwiftCompile normal x86_64 /Backyard-Birds/Build/Intermediates.noindex/BackyardBirdsData.build/Debug/BackyardBirdsData.build/DerivedSources/resource_bundle_accessor.swift (in target 'BackyardBirdsData' from project 'BackyardBirdsData')"
121+
let output = "[BackyardBirdsData] Compiling resource_bundle_accessor.swift"
122+
XCTAssertEqual(logFormatted(input), output)
123+
}
124+
125+
func testSwiftCompiling() {
126+
let input = #"SwiftCompile normal x86_64 Compiling\ BackyardBirdsDataContainer.swift,\ ColorData.swift,\ DataGeneration.swift,\ DataGenerationOptions.swift /Backyard-Birds/BackyardBirdsData/General/BackyardBirdsDataContainer.swift /Backyard-Birds/BackyardBirdsData/General/ColorData.swift /Backyard-Birds/BackyardBirdsData/General/DataGeneration.swift /Backyard-Birds/BackyardBirdsData/General/DataGenerationOptions.swift (in target 'BackyardBirdsData' from project 'BackyardBirdsData')"#
127+
XCTAssertNil(logFormatted(input))
128+
}
129+
113130
func testCompileStoryboard() {
114131
let formatted = logFormatted("CompileStoryboard /Users/admin/MyApp/MyApp/Main.storyboard (in target: MyApp)")
115132
XCTAssertEqual(formatted, "[MyApp] Compiling Main.storyboard")

Tests/XcbeautifyLibTests/RendererTests/TerminalRendererTests.swift

+17
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,23 @@ final class TerminalRendererTests: XCTestCase {
9797
#endif
9898
}
9999

100+
func testSwiftCompile_arm64() {
101+
let input = "SwiftCompile normal arm64 /path/to/File.swift (in target 'Target' from project 'Project')"
102+
let output = "[Target] Compiling File.swift"
103+
XCTAssertEqual(noColoredFormatted(input), output)
104+
}
105+
106+
func testSwiftCompile_x86_64() {
107+
let input = "SwiftCompile normal x86_64 /Backyard-Birds/Build/Intermediates.noindex/BackyardBirdsData.build/Debug/BackyardBirdsData.build/DerivedSources/resource_bundle_accessor.swift (in target 'BackyardBirdsData' from project 'BackyardBirdsData')"
108+
let output = "[BackyardBirdsData] Compiling resource_bundle_accessor.swift"
109+
XCTAssertEqual(noColoredFormatted(input), output)
110+
}
111+
112+
func testSwiftCompiling() {
113+
let input = #"SwiftCompile normal x86_64 Compiling\ BackyardBirdsDataContainer.swift,\ ColorData.swift,\ DataGeneration.swift,\ DataGenerationOptions.swift /Backyard-Birds/BackyardBirdsData/General/BackyardBirdsDataContainer.swift /Backyard-Birds/BackyardBirdsData/General/ColorData.swift /Backyard-Birds/BackyardBirdsData/General/DataGeneration.swift /Backyard-Birds/BackyardBirdsData/General/DataGenerationOptions.swift (in target 'BackyardBirdsData' from project 'BackyardBirdsData')"#
114+
XCTAssertNil(noColoredFormatted(input))
115+
}
116+
100117
func testCompileStoryboard() {
101118
let formatted = noColoredFormatted("CompileStoryboard /Users/admin/MyApp/MyApp/Main.storyboard (in target: MyApp)")
102119
XCTAssertEqual(formatted, "[MyApp] Compiling Main.storyboard")

0 commit comments

Comments
 (0)