element-x-ios/Tools/Sources/Locheck.swift

45 lines
1.3 KiB
Swift

import ArgumentParser
import Foundation
struct Locheck: ParsableCommand {
enum LocheckError: LocalizedError {
case missingMint
case outputError
var errorDescription: String? {
switch self {
case .missingMint:
return "💥 Unable to find mint. Fix by running:\nbrew install mint\n"
case .outputError:
return "💥 Failed to read the output from locheck."
}
}
}
static var configuration = CommandConfiguration(abstract: "A tool that verifies bad strings contained in localization files")
private var stringsDirectoryURL: URL {
Utilities.projectDirectoryURL.appendingPathComponent("ElementX/Resources/Localizations")
}
func run() throws {
try checkMint()
try checkStrings()
}
func checkStrings() throws {
guard let output = try Utilities.zsh("mint run locheck discoverlproj --ignore-missing --ignore lproj_file_missing_from_translation --treat-warnings-as-errors \(stringsDirectoryURL.path)") else {
throw LocheckError.missingMint
}
print(output)
}
private func checkMint() throws {
let result = try Utilities.zsh("which mint")
if result?.contains("not found") == true {
throw LocheckError.missingMint
}
}
}