diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/ResgenSwift.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/ResgenSwift.xcscheme index 9b1dd24..354d5d2 100644 --- a/.swiftpm/xcode/xcshareddata/xcschemes/ResgenSwift.xcscheme +++ b/.swiftpm/xcode/xcshareddata/xcschemes/ResgenSwift.xcscheme @@ -102,6 +102,20 @@ ReferencedContainer = "container:"> + + + + + + + + = 2 else { let error = ColorsToolError.badFormat(colorLine) - print(error.localizedDescription) + print(error.description) Colors.exit(withError: error) } diff --git a/Sources/ResgenSwift/Fonts/Fonts.swift b/Sources/ResgenSwift/Fonts/Fonts.swift index 0cf494d..f6e172f 100644 --- a/Sources/ResgenSwift/Fonts/Fonts.swift +++ b/Sources/ResgenSwift/Fonts/Fonts.swift @@ -74,14 +74,14 @@ struct Fonts: ParsableCommand { // Check input file exists guard fileManager.fileExists(atPath: options.inputFile) else { let error = FontsToolError.fileNotExists(options.inputFile) - print(error.localizedDescription) + print(error.description) Fonts.exit(withError: error) } // Extension for UIKit and SwiftUI should have different name guard options.extensionName != options.extensionNameSwiftUI else { let error = FontsToolError.extensionNamesCollision(options.extensionName) - print(error.localizedDescription) + print(error.description) Fonts.exit(withError: error) } diff --git a/Sources/ResgenSwift/Fonts/FontsToolError.swift b/Sources/ResgenSwift/Fonts/FontsToolError.swift index 30a8a22..d553cd3 100644 --- a/Sources/ResgenSwift/Fonts/FontsToolError.swift +++ b/Sources/ResgenSwift/Fonts/FontsToolError.swift @@ -14,22 +14,22 @@ enum FontsToolError: Error { case fileNotExists(String) case writeExtension(String, String) - var localizedDescription: String { + var description: String { switch self { case .extensionNamesCollision(let extensionName): - return "error:[\(Fonts.toolName)] Error on extension names, extension name and SwiftUI extension name should be different (\(extensionName) is used on both)" + return "error: [\(Fonts.toolName)] Error on extension names, extension name and SwiftUI extension name should be different (\(extensionName) is used on both)" case .fcScan(let path, let code, let output): - return "error:[\(Fonts.toolName)] Error while getting fontName (fc-scan --format %{postscriptname} \(path). fc-scan exit with \(code) and output is: \(output ?? "no output")" + return "error: [\(Fonts.toolName)] Error while getting fontName (fc-scan --format %{postscriptname} \(path). fc-scan exit with \(code) and output is: \(output ?? "no output")" case .inputFolderNotFound(let inputFolder): - return " error:[\(Fonts.toolName)] Input folder not found: \(inputFolder)" + return "error: [\(Fonts.toolName)] Input folder not found: \(inputFolder)" case .fileNotExists(let filename): - return " error:[\(Fonts.toolName)] File \(filename) does not exists" + return "error: [\(Fonts.toolName)] File \(filename) does not exists" case .writeExtension(let filename, let info): - return "error:[\(Fonts.toolName)] An error occured while writing extension in \(filename): \(info)" + return "error: [\(Fonts.toolName)] An error occured while writing extension in \(filename): \(info)" } } } diff --git a/Sources/ResgenSwift/Fonts/FontsToolHelper.swift b/Sources/ResgenSwift/Fonts/FontsToolHelper.swift index 686db9f..02b3b8d 100644 --- a/Sources/ResgenSwift/Fonts/FontsToolHelper.swift +++ b/Sources/ResgenSwift/Fonts/FontsToolHelper.swift @@ -39,7 +39,7 @@ class FontsToolHelper { let fileManager = FileManager() guard fileManager.fileExists(atPath: inputFolder) else { let error = FontsToolError.inputFolderNotFound(inputFolder) - print(error.localizedDescription) + print(error.description) Fonts.exit(withError: error) } @@ -64,7 +64,7 @@ class FontsToolHelper { guard let fontName = task.output, task.terminationStatus == 0 else { let error = FontsToolError.fcScan(path, task.terminationStatus, task.output) - print(error.localizedDescription) + print(error.description) Fonts.exit(withError: error) } diff --git a/Sources/ResgenSwift/Fonts/Generator/FontToolContentGenerator.swift b/Sources/ResgenSwift/Fonts/Generator/FontToolContentGenerator.swift index eff2dea..45c0a03 100644 --- a/Sources/ResgenSwift/Fonts/Generator/FontToolContentGenerator.swift +++ b/Sources/ResgenSwift/Fonts/Generator/FontToolContentGenerator.swift @@ -38,7 +38,7 @@ class FontExtensionGenerator { try extensionContent.write(to: extensionFilePathURL, atomically: false, encoding: .utf8) } catch (let error) { let error = FontsToolError.writeExtension(extensionFilePath, error.localizedDescription) - print(error.localizedDescription) + print(error.description) Fonts.exit(withError: error) } } diff --git a/Sources/ResgenSwift/Generate/Generate.swift b/Sources/ResgenSwift/Generate/Generate.swift index 6604ff8..8902545 100644 --- a/Sources/ResgenSwift/Generate/Generate.swift +++ b/Sources/ResgenSwift/Generate/Generate.swift @@ -41,7 +41,9 @@ struct Generate: ParsableCommand { print(" - \(configuration.tags.count) tags configuration(s)") print() - print("Input file: \(configuration.colors.first?.inputFile ?? "no input file")") + if let architecture = configuration.architecture { + ArchitectureGenerator.writeArchitecture(architecture) + } // Execute commands configuration.runnableConfigurations diff --git a/Sources/ResgenSwift/Generate/GenerateError.swift b/Sources/ResgenSwift/Generate/GenerateError.swift index 4960d37..2ebc045 100644 --- a/Sources/ResgenSwift/Generate/GenerateError.swift +++ b/Sources/ResgenSwift/Generate/GenerateError.swift @@ -11,20 +11,24 @@ enum GenerateError: Error { case fileNotExists(String) case invalidConfigurationFile(String) case commandError([String], String) + case writeFile(String, String) - var localizedDescription: String { + var description: String { switch self { case .fileNotExists(let filename): - return " error:[\(Generate.toolName)] File \(filename) does not exists" + return "error: [\(Generate.toolName)] File \(filename) does not exists" case .invalidConfigurationFile(let filename): - return " error:[\(Generate.toolName)] File \(filename) is not a valid configuration file" + return "error: [\(Generate.toolName)] File \(filename) is not a valid configuration file" case .commandError(let command, let terminationStatus): let readableCommand = command .map { $0 } .joined(separator: " ") - return "error:[\(Generate.toolName)] An error occured while running command '\(readableCommand)'. Command terminate with status code: \(terminationStatus)" + return "error: [\(Generate.toolName)] An error occured while running command '\(readableCommand)'. Command terminate with status code: \(terminationStatus)" + + case .writeFile(let filename, let info): + return "error: [\(Generate.toolName)] An error occured while writing file in \(filename): \(info)" } } } diff --git a/Sources/ResgenSwift/Generate/Generator/ArchitectureGenerator.swift b/Sources/ResgenSwift/Generate/Generator/ArchitectureGenerator.swift new file mode 100644 index 0000000..8ffa77e --- /dev/null +++ b/Sources/ResgenSwift/Generate/Generator/ArchitectureGenerator.swift @@ -0,0 +1,37 @@ +// +// ArchitectureGenerator.swift +// +// +// Created by Thibaut Schmitt on 18/11/2022. +// + +import ToolCore +import Foundation + +struct ArchitectureGenerator { + static func writeArchitecture(_ architecture: ConfigurationArchitecture) { + // Create extension content + let architectureContent = [ + "// Generated by ResgenSwift.\(Generate.toolName) \(ResgenSwiftVersion)", + architecture.getClass() + ] + .joined(separator: "\n\n") + + let filename = "\(architecture.classname).swift" + guard let filePath = architecture.path else { + let error = GenerateError.writeFile(filename, "Path of file is not defined.") + print(error.description) + Generate.exit(withError: error) + } + + // Write content + let architectureFilePathURL = URL(fileURLWithPath: "\(filePath)/\(filename)") + do { + try architectureContent.write(to: architectureFilePathURL, atomically: false, encoding: .utf8) + } catch (let error) { + let error = GenerateError.writeFile(filename, error.localizedDescription) + print(error.description) + Generate.exit(withError: error) + } + } +} diff --git a/Sources/ResgenSwift/Generate/Model/ConfigurationFile.swift b/Sources/ResgenSwift/Generate/Model/ConfigurationFile.swift index bc405e9..9cf8c47 100644 --- a/Sources/ResgenSwift/Generate/Model/ConfigurationFile.swift +++ b/Sources/ResgenSwift/Generate/Model/ConfigurationFile.swift @@ -8,6 +8,7 @@ import Foundation struct ConfigurationFile: Codable, CustomDebugStringConvertible { + var architecture: ConfigurationArchitecture? var colors: [ColorsConfiguration] var fonts: [FontsConfiguration] var images: [ImagesConfiguration] @@ -38,6 +39,42 @@ struct ConfigurationFile: Codable, CustomDebugStringConvertible { } } +struct ConfigurationArchitecture: Codable { + let property: String + let classname: String + let path: String? + let children: [ConfigurationArchitecture]? + + func getProperty(isStatic: Bool) -> String { + " \(isStatic ? "static " : "")let \(property) = \(classname)()" + } + + func getClass(generateStaticProperty: Bool = true) -> String { + guard children?.isEmpty == false else { + return "class \(classname) {}" + } + + let classDefinition = [ + "class \(classname) {", + children?.map { $0.getProperty(isStatic: generateStaticProperty) }.joined(separator: "\n"), + "}" + ] + .compactMap { $0 } + .joined(separator: "\n") + + return [classDefinition, "", getSubclass()] + .compactMap { $0 } + .joined(separator: "\n") + } + + func getSubclass() -> String? { + guard let children else { return nil } + return children.compactMap { arch in + arch.getClass(generateStaticProperty: false) + } + .joined(separator: "\n\n") + } +} struct ColorsConfiguration: Codable, CustomDebugStringConvertible { let inputFile: String @@ -267,4 +304,3 @@ struct TagsConfiguration: Codable, CustomDebugStringConvertible { """ } } - diff --git a/Sources/ResgenSwift/Generate/Parser/ConfigurationFileParser.swift b/Sources/ResgenSwift/Generate/Parser/ConfigurationFileParser.swift index 39e64bf..0b0c885 100644 --- a/Sources/ResgenSwift/Generate/Parser/ConfigurationFileParser.swift +++ b/Sources/ResgenSwift/Generate/Parser/ConfigurationFileParser.swift @@ -12,13 +12,13 @@ class ConfigurationFileParser { static func parse(_ configurationFile: String) -> ConfigurationFile { guard let data = FileManager().contents(atPath: configurationFile) else { let error = GenerateError.fileNotExists(configurationFile) - print(error.localizedDescription) + print(error.description) Generate.exit(withError: error) } guard let configuration = try? YAMLDecoder().decode(ConfigurationFile.self, from: data) else { let error = GenerateError.invalidConfigurationFile(configurationFile) - print(error.localizedDescription) + print(error.description) Generate.exit(withError: error) } diff --git a/Sources/ResgenSwift/Images/Extensions/FileManagerExtensions.swift b/Sources/ResgenSwift/Images/Extensions/FileManagerExtensions.swift index c9eb83c..c02e798 100644 --- a/Sources/ResgenSwift/Images/Extensions/FileManagerExtensions.swift +++ b/Sources/ResgenSwift/Images/Extensions/FileManagerExtensions.swift @@ -12,7 +12,7 @@ extension FileManager { var files = [String]() guard let enumerator = self.enumerator(at: URL(string: directory)!, includingPropertiesForKeys: [.isRegularFileKey], options: [.skipsHiddenFiles, .skipsPackageDescendants]) else { let error = ImagesError.unknown("Cannot enumerate file in \(directory)") - print(error.localizedDescription) + print(error.description) Images.exit(withError: error) } @@ -24,7 +24,7 @@ extension FileManager { } } catch { let error = ImagesError.getFileAttributed(fileURL.relativePath, error.localizedDescription) - print(error.localizedDescription) + print(error.description) Images.exit(withError: error) } } @@ -35,7 +35,7 @@ extension FileManager { var files = [String]() guard let enumerator = self.enumerator(at: URL(string: directory)!, includingPropertiesForKeys: [.isDirectoryKey], options: [.skipsHiddenFiles, .skipsPackageDescendants]) else { let error = ImagesError.unknown("Cannot enumerate imageset directory in \(directory)") - print(error.localizedDescription) + print(error.description) Images.exit(withError: error) } @@ -47,7 +47,7 @@ extension FileManager { } } catch { let error = ImagesError.getFileAttributed(fileURL.relativePath, error.localizedDescription) - print(error.localizedDescription) + print(error.description) Images.exit(withError: error) } } diff --git a/Sources/ResgenSwift/Images/Generator/ImageExtensionGenerator.swift b/Sources/ResgenSwift/Images/Generator/ImageExtensionGenerator.swift index 5edce9f..3982723 100644 --- a/Sources/ResgenSwift/Images/Generator/ImageExtensionGenerator.swift +++ b/Sources/ResgenSwift/Images/Generator/ImageExtensionGenerator.swift @@ -31,7 +31,7 @@ class ImageExtensionGenerator { try extensionContent.write(to: extensionFilePathURL, atomically: false, encoding: .utf8) } catch (let error) { let error = ImagesError.writeFile(extensionFilePath, error.localizedDescription) - print(error.localizedDescription) + print(error.description) Images.exit(withError: error) } } diff --git a/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift b/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift index 6573c92..6d55599 100644 --- a/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift +++ b/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift @@ -48,7 +48,7 @@ class XcassetsGenerator { } } let error = ImagesError.unknownImageExtension(parsedImage.name) - print(error.localizedDescription) + print(error.description) Images.exit(withError: error) }() @@ -77,7 +77,7 @@ class XcassetsGenerator { withIntermediateDirectories: true) } catch { let error = ImagesError.createAssetFolder(imagesetPath) - print(error.localizedDescription) + print(error.description) Images.exit(withError: error) } } diff --git a/Sources/ResgenSwift/Images/Images.swift b/Sources/ResgenSwift/Images/Images.swift index e0264aa..a4ecafa 100644 --- a/Sources/ResgenSwift/Images/Images.swift +++ b/Sources/ResgenSwift/Images/Images.swift @@ -82,7 +82,7 @@ struct Images: ParsableCommand { // Input file guard fileManager.fileExists(atPath: options.inputFile) else { let error = ImagesError.fileNotExists(options.inputFile) - print(error.localizedDescription) + print(error.description) Images.exit(withError: error) } @@ -92,7 +92,7 @@ struct Images: ParsableCommand { // Extension for UIKit and SwiftUI should have different name guard options.extensionName != options.extensionNameSwiftUI else { let error = ImagesError.extensionNamesCollision(options.extensionName) - print(error.localizedDescription) + print(error.description) Images.exit(withError: error) } @@ -117,7 +117,7 @@ struct Images: ParsableCommand { } let error = ImagesError.rsvgConvertNotFound - print(error.localizedDescription) + print(error.description) Images.exit(withError: error) } } diff --git a/Sources/ResgenSwift/Images/ImagesError.swift b/Sources/ResgenSwift/Images/ImagesError.swift index 7f879ee..8dcbc57 100644 --- a/Sources/ResgenSwift/Images/ImagesError.swift +++ b/Sources/ResgenSwift/Images/ImagesError.swift @@ -18,34 +18,34 @@ enum ImagesError: Error { case createAssetFolder(String) case unknown(String) - var localizedDescription: String { + var description: String { switch self { case .extensionNamesCollision(let extensionName): - return "error:[\(Fonts.toolName)] Error on extension names, extension name and SwiftUI extension name should be different (\(extensionName) is used on both)" + return "error: [\(Fonts.toolName)] Error on extension names, extension name and SwiftUI extension name should be different (\(extensionName) is used on both)" case .inputFolderNotFound(let inputFolder): - return " error:[\(Images.toolName)] Input folder not found: \(inputFolder)" + return "error: [\(Images.toolName)] Input folder not found: \(inputFolder)" case .fileNotExists(let filename): - return " error:[\(Images.toolName)] File \(filename) does not exists" + return "error: [\(Images.toolName)] File \(filename) does not exists" case .unknownImageExtension(let filename): - return " error:[\(Images.toolName)] File \(filename) have an unhandled file extension. Cannot generate image." + return "error: [\(Images.toolName)] File \(filename) have an unhandled file extension. Cannot generate image." case .getFileAttributed(let filename, let errorDescription): - return " error:[\(Images.toolName)] Getting file attributes of \(filename) failed with error: \(errorDescription)" + return "error: [\(Images.toolName)] Getting file attributes of \(filename) failed with error: \(errorDescription)" case .rsvgConvertNotFound: - return " error:[\(Images.toolName)] Can't find rsvg-convert (can be installed with 'brew remove imagemagick && brew install imagemagick --with-librsvg')" + return "error: [\(Images.toolName)] Can't find rsvg-convert (can be installed with 'brew remove imagemagick && brew install imagemagick --with-librsvg')" case .writeFile(let subErrorDescription, let filename): - return " error:[\(Images.toolName)] An error occured while writing content to \(filename): \(subErrorDescription)" + return "error: [\(Images.toolName)] An error occured while writing content to \(filename): \(subErrorDescription)" case .createAssetFolder(let folder): - return "error:[\(Colors.toolName)] An error occured while creating folder `\(folder)`" + return "error: [\(Colors.toolName)] An error occured while creating folder `\(folder)`" case .unknown(let errorDescription): - return " error:[\(Images.toolName)] Unknown error: \(errorDescription)" + return "error: [\(Images.toolName)] Unknown error: \(errorDescription)" } } } diff --git a/Sources/ResgenSwift/Strings/Generator/StringsFileGenerator.swift b/Sources/ResgenSwift/Strings/Generator/StringsFileGenerator.swift index 27edcd9..4fbebfb 100644 --- a/Sources/ResgenSwift/Strings/Generator/StringsFileGenerator.swift +++ b/Sources/ResgenSwift/Strings/Generator/StringsFileGenerator.swift @@ -31,7 +31,7 @@ class StringsFileGenerator { try fileContent.write(to: stringsFilePathURL, atomically: false, encoding: .utf8) } catch (let error) { let error = StringiumError.writeFile(error.localizedDescription, stringsFilePath) - print(error.localizedDescription) + print(error.description) Stringium.exit(withError: error) } } @@ -75,7 +75,7 @@ class StringsFileGenerator { stringsFileContent += "\"\(definition.name)\" = \"\(translation)\";\n\n" } else if skipDefinition == false { let error = StringiumError.langNotDefined(lang, definition.name, definition.reference != nil) - print(error.localizedDescription) + print(error.description) Stringium.exit(withError: error) } } @@ -101,7 +101,7 @@ class StringsFileGenerator { try extensionFileContent.write(to: extensionFilePathURL, atomically: false, encoding: .utf8) } catch (let error) { let error = StringiumError.writeFile(extensionFilePath, error.localizedDescription) - print(error.localizedDescription) + print(error.description) Stringium.exit(withError: error) } } diff --git a/Sources/ResgenSwift/Strings/Generator/TagsGenerator.swift b/Sources/ResgenSwift/Strings/Generator/TagsGenerator.swift index 15dff7f..ee09d73 100644 --- a/Sources/ResgenSwift/Strings/Generator/TagsGenerator.swift +++ b/Sources/ResgenSwift/Strings/Generator/TagsGenerator.swift @@ -24,7 +24,7 @@ class TagsGenerator { try extensionFileContent.write(to: extensionFilePathURL, atomically: false, encoding: .utf8) } catch (let error) { let error = StringiumError.writeFile(extensionFilePath, error.localizedDescription) - print(error.localizedDescription) + print(error.description) Stringium.exit(withError: error) } } diff --git a/Sources/ResgenSwift/Strings/Model/Definition.swift b/Sources/ResgenSwift/Strings/Model/Definition.swift index b7dbe44..458201d 100644 --- a/Sources/ResgenSwift/Strings/Model/Definition.swift +++ b/Sources/ResgenSwift/Strings/Model/Definition.swift @@ -109,7 +109,7 @@ class Definition { func getNSLocalizedStringProperty(forLang lang: String) -> String { guard let translation = translations[lang] else { let error = StringiumError.langNotDefined(lang, name, reference != nil) - print(error.localizedDescription) + print(error.description) Stringium.exit(withError: error) } @@ -132,7 +132,7 @@ class Definition { func getNSLocalizedStringStaticProperty(forLang lang: String) -> String { guard let translation = translations[lang] else { let error = StringiumError.langNotDefined(lang, name, reference != nil) - print(error.localizedDescription) + print(error.description) Stringium.exit(withError: error) } @@ -157,7 +157,7 @@ class Definition { func getProperty(forLang lang: String) -> String { guard let translation = translations[lang] else { let error = StringiumError.langNotDefined(lang, name, reference != nil) - print(error.localizedDescription) + print(error.description) Stringium.exit(withError: error) } @@ -173,7 +173,7 @@ class Definition { func getStaticProperty(forLang lang: String) -> String { guard let translation = translations[lang] else { let error = StringiumError.langNotDefined(lang, name, reference != nil) - print(error.localizedDescription) + print(error.description) Stringium.exit(withError: error) } diff --git a/Sources/ResgenSwift/Strings/Parser/TwineFileParser.swift b/Sources/ResgenSwift/Strings/Parser/TwineFileParser.swift index 55b4f08..b7f6803 100644 --- a/Sources/ResgenSwift/Strings/Parser/TwineFileParser.swift +++ b/Sources/ResgenSwift/Strings/Parser/TwineFileParser.swift @@ -84,7 +84,7 @@ class TwineFileParser { } } if invalidDefinitionNames.count > 0 { - print(" warning:[\(Stringium.toolName)] Found \(invalidDefinitionNames.count) definition (\(invalidDefinitionNames.joined(separator: ", "))") + print("warning: [\(Stringium.toolName)] Found \(invalidDefinitionNames.count) definition (\(invalidDefinitionNames.joined(separator: ", "))") } return sections diff --git a/Sources/ResgenSwift/Strings/Stringium/Stringium.swift b/Sources/ResgenSwift/Strings/Stringium/Stringium.swift index ca750c8..d497e00 100644 --- a/Sources/ResgenSwift/Strings/Stringium/Stringium.swift +++ b/Sources/ResgenSwift/Strings/Stringium/Stringium.swift @@ -70,20 +70,20 @@ struct Stringium: ParsableCommand { // Input file guard fileManager.fileExists(atPath: options.inputFile) else { let error = StringiumError.fileNotExists(options.inputFile) - print(error.localizedDescription) + print(error.description) Stringium.exit(withError: error) } // Langs guard options.langs.isEmpty == false else { let error = StringiumError.langsListEmpty - print(error.localizedDescription) + print(error.description) Stringium.exit(withError: error) } guard options.langs.contains(options.defaultLang) else { let error = StringiumError.defaultLangsNotInLangs - print(error.localizedDescription) + print(error.description) Stringium.exit(withError: error) } diff --git a/Sources/ResgenSwift/Strings/Stringium/StringiumError.swift b/Sources/ResgenSwift/Strings/Stringium/StringiumError.swift index 852d7ec..ba12a82 100644 --- a/Sources/ResgenSwift/Strings/Stringium/StringiumError.swift +++ b/Sources/ResgenSwift/Strings/Stringium/StringiumError.swift @@ -14,25 +14,25 @@ enum StringiumError: Error { case writeFile(String, String) case langNotDefined(String, String, Bool) - var localizedDescription: String { + var description: String { switch self { case .fileNotExists(let filename): - return " error:[\(Stringium.toolName)] File \(filename) does not exists " + return "error: [\(Stringium.toolName)] File \(filename) does not exists " case .langsListEmpty: - return " error:[\(Stringium.toolName)] Langs list is empty" + return "error: [\(Stringium.toolName)] Langs list is empty" case .defaultLangsNotInLangs: - return " error:[\(Stringium.toolName)] Langs list does not contains the default lang" + return "error: [\(Stringium.toolName)] Langs list does not contains the default lang" case .writeFile(let subErrorDescription, let filename): - return " error:[\(Stringium.toolName)] An error occured while writing content to \(filename): \(subErrorDescription)" + return "error: [\(Stringium.toolName)] An error occured while writing content to \(filename): \(subErrorDescription)" case .langNotDefined(let lang, let definitionName, let isReference): if isReference { - return " error:[\(Stringium.toolName)] Reference are handled only by TwineTool. Please use it or remove reference from you strings file." + return "error: [\(Stringium.toolName)] Reference are handled only by Twine. Please use it or remove reference from you strings file." } - return " error:[\(Stringium.toolName)] Lang \"\(lang)\" not found for \"\(definitionName)\"" + return "error: [\(Stringium.toolName)] Lang \"\(lang)\" not found for \"\(definitionName)\"" } } } diff --git a/Sources/ResgenSwift/Strings/Tag/Tags.swift b/Sources/ResgenSwift/Strings/Tag/Tags.swift index 5e53208..7fedafa 100644 --- a/Sources/ResgenSwift/Strings/Tag/Tags.swift +++ b/Sources/ResgenSwift/Strings/Tag/Tags.swift @@ -62,7 +62,7 @@ struct Tags: ParsableCommand { // Input file guard fileManager.fileExists(atPath: options.inputFile) else { let error = StringiumError.fileNotExists(options.inputFile) - print(error.localizedDescription) + print(error.description) Stringium.exit(withError: error) } diff --git a/Sources/ResgenSwift/Strings/Twine/Twine.swift b/Sources/ResgenSwift/Strings/Twine/Twine.swift index 2a48bac..7af478d 100644 --- a/Sources/ResgenSwift/Strings/Twine/Twine.swift +++ b/Sources/ResgenSwift/Strings/Twine/Twine.swift @@ -66,20 +66,20 @@ struct Twine: ParsableCommand { // Input file guard fileManager.fileExists(atPath: options.inputFile) else { let error = TwineError.fileNotExists(options.inputFile) - print(error.localizedDescription) + print(error.description) Twine.exit(withError: error) } // Langs guard options.langs.isEmpty == false else { let error = TwineError.langsListEmpty - print(error.localizedDescription) + print(error.description) Twine.exit(withError: error) } guard options.langs.contains(options.defaultLang) else { let error = TwineError.defaultLangsNotInLangs - print(error.localizedDescription) + print(error.description) Twine.exit(withError: error) } diff --git a/Sources/ResgenSwift/Strings/Twine/TwineError.swift b/Sources/ResgenSwift/Strings/Twine/TwineError.swift index 291f371..82ed17f 100644 --- a/Sources/ResgenSwift/Strings/Twine/TwineError.swift +++ b/Sources/ResgenSwift/Strings/Twine/TwineError.swift @@ -12,16 +12,16 @@ enum TwineError: Error { case langsListEmpty case defaultLangsNotInLangs - var localizedDescription: String { + var description: String { switch self { case .fileNotExists(let filename): - return " error:[\(Twine.toolName)] File \(filename) does not exists " + return "error: [\(Twine.toolName)] File \(filename) does not exists " case .langsListEmpty: - return " error:[\(Twine.toolName)] Langs list is empty" + return "error: [\(Twine.toolName)] Langs list is empty" case .defaultLangsNotInLangs: - return " error:[\(Twine.toolName)] Langs list does not contains the default lang" + return "error: [\(Twine.toolName)] Langs list does not contains the default lang" } } } diff --git a/Sources/ToolCore/Version.swift b/Sources/ToolCore/Version.swift index 11adb0e..b850b78 100644 --- a/Sources/ToolCore/Version.swift +++ b/Sources/ToolCore/Version.swift @@ -7,4 +7,4 @@ import Foundation -public let ResgenSwiftVersion = "1.1" +public let ResgenSwiftVersion = "1.2"