diff --git a/.periphery.yml b/.periphery.yml index 090cf22dc..2e46fd265 100644 --- a/.periphery.yml +++ b/.periphery.yml @@ -1,19 +1,19 @@ project: ElementX.xcodeproj schemes: - ElementX -- IntegrationTests -- UITests - UnitTests - PreviewTests +- UITests +- IntegrationTests targets: - ElementX -- IntegrationTests - NSE +- ShareExtension +- UnitTests - PreviewTests - UITests -- UnitTests +- IntegrationTests report_exclude: - ElementX/Sources/Mocks/Generated/GeneratedMocks.swift - ElementX/Sources/Mocks/Generated/SDKGeneratedMocks.swift -verbose: true retain_swift_ui_previews: true diff --git a/Tools/Sources/Tools.swift b/Tools/Sources/Tools.swift index 5a443eb18..fd76870e5 100644 --- a/Tools/Sources/Tools.swift +++ b/Tools/Sources/Tools.swift @@ -11,5 +11,6 @@ struct Tools: AsyncParsableCommand { Locheck.self, GenerateSDKMocks.self, GenerateSAS.self, - AppIconBanner.self]) + AppIconBanner.self, + UnusedStrings.self]) } diff --git a/Tools/Sources/UnusedStrings.swift b/Tools/Sources/UnusedStrings.swift new file mode 100644 index 000000000..aa8b71302 --- /dev/null +++ b/Tools/Sources/UnusedStrings.swift @@ -0,0 +1,34 @@ +import ArgumentParser +import CommandLineTools +import Foundation + +struct UnusedStrings: ParsableCommand { + static var configuration = CommandConfiguration(abstract: "Generates a report showing which strings aren't used in the project.") + + @Flag(help: "Save the results to disk instead of printing them.") + var saveToFile = false + + func run() throws { + try peripheryScan() + } + + func peripheryScan() throws { + print("Analysing project, this may take a while…") + + // Uses the existing .periphery.yml with small tweaks to the output. + let command = "periphery scan --quiet --relative-results --report-include ElementX/Sources/Generated/Strings.swift" + let output = try Zsh.run(command: command) + + guard let output else { + print("Nothing reported.") + return + } + + if saveToFile { + try output.write(to: .projectDirectory.appending(component: "Unused Strings.txt"), atomically: true, encoding: .utf8) + print("Report saved: Unused Strings.txt") + } else { + print(output) + } + } +}