diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d67dc461..9c2dc23a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,21 +17,20 @@ jobs: runs-on: macos-12 - steps: - - uses: maxim-lobanov/setup-xcode@v1 - with: - xcode-version: '13.4.1' - + steps: - name: Checkout uses: actions/checkout@v1 - - uses: actions/cache@v3 + - name: Install SwiftGen + run: brew install swiftgen + + - name: Cache Carthage + uses: actions/cache@v3 id: carthage-cache with: path: Carthage key: ${{ runner.os }}-carthage-${{ hashFiles('**/Cartfile.resolved') }} - restore-keys: | - ${{ runner.os }}-carthage- + restore-keys: ${{ runner.os }}-carthage- - name: Update Carthage run: carthage update --use-xcframeworks --cache-builds @@ -41,8 +40,7 @@ jobs: with: path: .build key: ${{ runner.os }}-${{ matrix.scheme }}-spm-${{ hashFiles('**/Package.resolved') }} - restore-keys: | - ${{ runner.os }}-${{ matrix.scheme }}-spm- + restore-keys: ${{ runner.os }}-${{ matrix.scheme }}-spm- - name: xcodebuild! run: | diff --git a/Swiftfin.xcodeproj/project.pbxproj b/Swiftfin.xcodeproj/project.pbxproj index a8e3f2eb..3d8e4b85 100644 --- a/Swiftfin.xcodeproj/project.pbxproj +++ b/Swiftfin.xcodeproj/project.pbxproj @@ -2191,7 +2191,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${PROJECT_DIR}/bin/swiftgen\"\n"; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"swiftgen\"\n"; }; 6286F0A3271C0ABA00C40ED5 /* R.swift */ = { isa = PBXShellScriptBuildPhase; @@ -2209,7 +2209,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${PROJECT_DIR}/bin/swiftgen\"\n"; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"swiftgen\"\n"; }; /* End PBXShellScriptBuildPhase section */ diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Info.plist b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Info.plist deleted file mode 100644 index 01d943f2..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Info.plist +++ /dev/null @@ -1,42 +0,0 @@ - - - - - BuildMachineOSBuild - - CFBundleDevelopmentRegion - en - CFBundleExecutable - SwiftGen_SwiftGenCLI - CFBundleIdentifier - SwiftGen.SwiftGenCLI.resources - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - SwiftGen_SwiftGenCLI - CFBundlePackageType - BNDL - CFBundleSupportedPlatforms - - MacOSX - - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTPlatformBuild - 13A233 - DTPlatformName - macosx - DTPlatformVersion - 11.3 - DTSDKBuild - 20E214 - DTSDKName - macosx11.3 - DTXcode - 1300 - DTXcodeBuild - 13A233 - LSMinimumSystemVersion - 10.11 - - diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/literals-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/literals-swift4.stencil deleted file mode 100644 index af604776..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/literals-swift4.stencil +++ /dev/null @@ -1,43 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if palettes %} -{% set enumName %}{{param.enumName|default:"ColorName"}}{% endset %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -#if os(macOS) - import AppKit - {% if enumName != 'NSColor' %}{{accessModifier}} enum {{enumName}} { }{% endif %} -#elseif os(iOS) || os(tvOS) || os(watchOS) - import UIKit - {% if enumName != 'UIColor' %}{{accessModifier}} enum {{enumName}} { }{% endif %} -#endif - -// swiftlint:disable superfluous_disable_command -// swiftlint:disable file_length - -// MARK: - Colors - -// swiftlint:disable identifier_name line_length type_body_length -{{accessModifier}} extension {{enumName}} { -{% macro h2f hex %}{{hex|hexToInt|int255toFloat}}{% endmacro %} -{% macro enumBlock colors accessPrefix %} - {% for color in colors %} - /// 0x{{color.red}}{{color.green}}{{color.blue}}{{color.alpha}} (r: {{color.red|hexToInt}}, g: {{color.green|hexToInt}}, b: {{color.blue|hexToInt}}, a: {{color.alpha|hexToInt}}) - {{accessPrefix}}static let {{color.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = #colorLiteral(red: {% call h2f color.red %}, green: {% call h2f color.green %}, blue: {% call h2f color.blue %}, alpha: {% call h2f color.alpha %}) - {% endfor %} -{% endmacro %} - {% if palettes.count > 1 or param.forceFileNameEnum %} - {% set accessPrefix %}{{accessModifier}} {% endset %} - {% for palette in palettes %} - enum {{palette.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call enumBlock palette.colors accessPrefix %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call enumBlock palettes.first.colors "" %} - {% endif %} -} -// swiftlint:enable identifier_name line_length type_body_length -{% else %} -// No color found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/literals-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/literals-swift5.stencil deleted file mode 100644 index af604776..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/literals-swift5.stencil +++ /dev/null @@ -1,43 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if palettes %} -{% set enumName %}{{param.enumName|default:"ColorName"}}{% endset %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -#if os(macOS) - import AppKit - {% if enumName != 'NSColor' %}{{accessModifier}} enum {{enumName}} { }{% endif %} -#elseif os(iOS) || os(tvOS) || os(watchOS) - import UIKit - {% if enumName != 'UIColor' %}{{accessModifier}} enum {{enumName}} { }{% endif %} -#endif - -// swiftlint:disable superfluous_disable_command -// swiftlint:disable file_length - -// MARK: - Colors - -// swiftlint:disable identifier_name line_length type_body_length -{{accessModifier}} extension {{enumName}} { -{% macro h2f hex %}{{hex|hexToInt|int255toFloat}}{% endmacro %} -{% macro enumBlock colors accessPrefix %} - {% for color in colors %} - /// 0x{{color.red}}{{color.green}}{{color.blue}}{{color.alpha}} (r: {{color.red|hexToInt}}, g: {{color.green|hexToInt}}, b: {{color.blue|hexToInt}}, a: {{color.alpha|hexToInt}}) - {{accessPrefix}}static let {{color.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = #colorLiteral(red: {% call h2f color.red %}, green: {% call h2f color.green %}, blue: {% call h2f color.blue %}, alpha: {% call h2f color.alpha %}) - {% endfor %} -{% endmacro %} - {% if palettes.count > 1 or param.forceFileNameEnum %} - {% set accessPrefix %}{{accessModifier}} {% endset %} - {% for palette in palettes %} - enum {{palette.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call enumBlock palette.colors accessPrefix %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call enumBlock palettes.first.colors "" %} - {% endif %} -} -// swiftlint:enable identifier_name line_length type_body_length -{% else %} -// No color found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/swift4.stencil deleted file mode 100644 index 57c2d797..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/swift4.stencil +++ /dev/null @@ -1,84 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if palettes %} -{% set colorAlias %}{{param.colorAliasName|default:"Color"}}{% endset %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -#if os(macOS) - import AppKit.NSColor - {{accessModifier}} typealias {{colorAlias}} = NSColor -#elseif os(iOS) || os(tvOS) || os(watchOS) - import UIKit.UIColor - {{accessModifier}} typealias {{colorAlias}} = UIColor -#endif - -// swiftlint:disable superfluous_disable_command file_length implicit_return - -// MARK: - Colors - -// swiftlint:disable identifier_name line_length type_body_length -{% set enumName %}{{param.enumName|default:"ColorName"}}{% endset %} -{{accessModifier}} struct {{enumName}} { - {{accessModifier}} let rgbaValue: UInt32 - {{accessModifier}} var color: {{colorAlias}} { return {{colorAlias}}(named: self) } - -{% macro rgbaValue color %}0x{{color.red}}{{color.green}}{{color.blue}}{{color.alpha}}{% endmacro %} -{% macro enumBlock colors %} - {% for color in colors %} - /// - /// Alpha: {{color.alpha|hexToInt|int255toFloat|percent}}
(0x{{color.red}}{{color.green}}{{color.blue}}{{color.alpha}}) - {{accessModifier}} static let {{color.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{enumName}}(rgbaValue: {% call rgbaValue color %}) - {% endfor %} -{% endmacro %} - {% if palettes.count > 1 or param.forceFileNameEnum %} - {% for palette in palettes %} - {{accessModifier}} enum {{palette.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call enumBlock palette.colors %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call enumBlock palettes.first.colors %} - {% endif %} -} -// swiftlint:enable identifier_name line_length type_body_length - -// MARK: - Implementation Details - -internal extension {{colorAlias}} { - convenience init(rgbaValue: UInt32) { - let components = RGBAComponents(rgbaValue: rgbaValue).normalized - self.init(red: components[0], green: components[1], blue: components[2], alpha: components[3]) - } -} - -private struct RGBAComponents { - let rgbaValue: UInt32 - - private var shifts: [UInt32] { - [ - rgbaValue >> 24, // red - rgbaValue >> 16, // green - rgbaValue >> 8, // blue - rgbaValue // alpha - ] - } - - private var components: [CGFloat] { - shifts.map { - CGFloat($0 & 0xff) - } - } - - var normalized: [CGFloat] { - components.map { $0 / 255.0 } - } -} - -{{accessModifier}} extension {{colorAlias}} { - convenience init(named color: {{enumName}}) { - self.init(rgbaValue: color.rgbaValue) - } -} -{% else %} -// No color found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/swift5.stencil deleted file mode 100644 index 57c2d797..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/colors/swift5.stencil +++ /dev/null @@ -1,84 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if palettes %} -{% set colorAlias %}{{param.colorAliasName|default:"Color"}}{% endset %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -#if os(macOS) - import AppKit.NSColor - {{accessModifier}} typealias {{colorAlias}} = NSColor -#elseif os(iOS) || os(tvOS) || os(watchOS) - import UIKit.UIColor - {{accessModifier}} typealias {{colorAlias}} = UIColor -#endif - -// swiftlint:disable superfluous_disable_command file_length implicit_return - -// MARK: - Colors - -// swiftlint:disable identifier_name line_length type_body_length -{% set enumName %}{{param.enumName|default:"ColorName"}}{% endset %} -{{accessModifier}} struct {{enumName}} { - {{accessModifier}} let rgbaValue: UInt32 - {{accessModifier}} var color: {{colorAlias}} { return {{colorAlias}}(named: self) } - -{% macro rgbaValue color %}0x{{color.red}}{{color.green}}{{color.blue}}{{color.alpha}}{% endmacro %} -{% macro enumBlock colors %} - {% for color in colors %} - /// - /// Alpha: {{color.alpha|hexToInt|int255toFloat|percent}}
(0x{{color.red}}{{color.green}}{{color.blue}}{{color.alpha}}) - {{accessModifier}} static let {{color.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{enumName}}(rgbaValue: {% call rgbaValue color %}) - {% endfor %} -{% endmacro %} - {% if palettes.count > 1 or param.forceFileNameEnum %} - {% for palette in palettes %} - {{accessModifier}} enum {{palette.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call enumBlock palette.colors %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call enumBlock palettes.first.colors %} - {% endif %} -} -// swiftlint:enable identifier_name line_length type_body_length - -// MARK: - Implementation Details - -internal extension {{colorAlias}} { - convenience init(rgbaValue: UInt32) { - let components = RGBAComponents(rgbaValue: rgbaValue).normalized - self.init(red: components[0], green: components[1], blue: components[2], alpha: components[3]) - } -} - -private struct RGBAComponents { - let rgbaValue: UInt32 - - private var shifts: [UInt32] { - [ - rgbaValue >> 24, // red - rgbaValue >> 16, // green - rgbaValue >> 8, // blue - rgbaValue // alpha - ] - } - - private var components: [CGFloat] { - shifts.map { - CGFloat($0 & 0xff) - } - } - - var normalized: [CGFloat] { - components.map { $0 / 255.0 } - } -} - -{{accessModifier}} extension {{colorAlias}} { - convenience init(named color: {{enumName}}) { - self.init(rgbaValue: color.rgbaValue) - } -} -{% else %} -// No color found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/coredata/swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/coredata/swift4.stencil deleted file mode 100644 index 9832876e..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/coredata/swift4.stencil +++ /dev/null @@ -1,211 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -// swiftlint:disable superfluous_disable_command implicit_return -// swiftlint:disable sorted_imports -import CoreData -import Foundation -{% for import in param.extraImports %} -import {{ import }} -{% empty %} -{# If extraImports is a single String instead of an array, `for` considers it empty but we still have to check if there's a single String value #} -{% if param.extraImports %}import {{ param.extraImports }}{% endif %} -{% endfor %} - -// swiftlint:disable attributes file_length vertical_whitespace_closing_braces -// swiftlint:disable identifier_name line_length type_body_length -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} - -{% for model in models %} -{% for name, entity in model.entities %} -{% set superclass %}{{ model.entities[entity.superEntity].className|default:"NSManagedObject" }}{% endset %} -{% set entityClassName %}{{ entity.className|default:"NSManagedObject" }}{% endset %} -// MARK: - {{ entity.name }} - -{% if not entity.shouldGenerateCode %} -// Note: '{{ entity.name }}' has codegen enabled for Xcode, skipping code generation. - -{% elif entityClassName|contains:"." %} -// Warning: '{{ entityClassName }}' cannot be a valid type name, skipping code generation. - -{% else %} -{% if param.generateObjcName %} -@objc({{ entityClassName }}) -{% endif %} -{{ accessModifier }} class {{ entityClassName }}: {{ superclass }} { - {% set override %}{% if superclass != "NSManagedObject" %}override {% endif %}{% endset %} - {{ override }}{{ accessModifier }} class var entityName: String { - return "{{ entity.name }}" - } - - {{ override }}{{ accessModifier }} class func entity(in managedObjectContext: NSManagedObjectContext) -> NSEntityDescription? { - return NSEntityDescription.entity(forEntityName: entityName, in: managedObjectContext) - } - - @available(*, deprecated, renamed: "makeFetchRequest", message: "To avoid collisions with the less concrete method in `NSManagedObject`, please use `makeFetchRequest()` instead.") - @nonobjc {{ accessModifier }} class func fetchRequest() -> NSFetchRequest<{{ entityClassName }}> { - return NSFetchRequest<{{ entityClassName }}>(entityName: entityName) - } - - @nonobjc {{ accessModifier }} class func makeFetchRequest() -> NSFetchRequest<{{ entityClassName }}> { - return NSFetchRequest<{{ entityClassName }}>(entityName: entityName) - } - - // swiftlint:disable discouraged_optional_boolean discouraged_optional_collection - {% for attribute in entity.attributes %} - {% if attribute.userInfo.RawType %} - {% set rawType attribute.userInfo.RawType %} - {% set unwrapOptional attribute.userInfo.unwrapOptional %} - {{ accessModifier }} var {{ attribute.name }}: {{ rawType }}{% if not unwrapOptional %}?{% endif %} { - get { - let key = "{{ attribute.name }}" - willAccessValue(forKey: key) - defer { didAccessValue(forKey: key) } - - {% if unwrapOptional %} - guard let value = primitiveValue(forKey: key) as? {{ rawType }}.RawValue, - let result = {{ rawType }}(rawValue: value) else { - fatalError("Could not convert value for key '\(key)' to type '{{ rawType }}'") - } - return result - {% else %} - guard let value = primitiveValue(forKey: key) as? {{ rawType }}.RawValue else { - return nil - } - return {{ rawType }}(rawValue: value) - {% endif %} - } - set { - let key = "{{ attribute.name }}" - willChangeValue(forKey: key) - defer { didChangeValue(forKey: key) } - - setPrimitiveValue(newValue{% if not unwrapOptional %}?{% endif %}.rawValue, forKey: key) - } - } - {% elif attribute.usesScalarValueType and attribute.isOptional %} - {{ accessModifier }} var {{ attribute.name }}: {{ attribute.typeName }}? { - get { - let key = "{{ attribute.name }}" - willAccessValue(forKey: key) - defer { didAccessValue(forKey: key) } - - return primitiveValue(forKey: key) as? {{ attribute.typeName }} - } - set { - let key = "{{ attribute.name }}" - willChangeValue(forKey: key) - defer { didChangeValue(forKey: key) } - - setPrimitiveValue(newValue, forKey: key) - } - } - {% else %} - @NSManaged {{ accessModifier }} var {{ attribute.name }}: {{ attribute.typeName }}{% if attribute.isOptional %}?{% endif %} - {% endif %} - {% endfor %} - {% for relationship in entity.relationships %} - {% if relationship.isToMany %} - @NSManaged {{ accessModifier }} var {{ relationship.name }}: {% if relationship.isOrdered %}NSOrderedSet{% else %}Set<{{ model.entities[relationship.destinationEntity].className|default:"NSManagedObject" }}>{% endif %}{% if relationship.isOptional %}?{% endif %} - {% else %} - @NSManaged {{ accessModifier }} var {{ relationship.name }}: {{ model.entities[relationship.destinationEntity].className|default:"NSManagedObject" }}{% if relationship.isOptional %}?{% endif %} - {% endif %} - {% endfor %} - {% for fetchedProperty in entity.fetchedProperties %} - @NSManaged {{ accessModifier }} var {{ fetchedProperty.name }}: [{{ fetchedProperty.fetchRequest.entity }}] - {% endfor %} - // swiftlint:enable discouraged_optional_boolean discouraged_optional_collection -} - -{% for relationship in entity.relationships where relationship.isToMany %} -{% set destinationEntityClassName %}{{ model.entities[relationship.destinationEntity].className|default:"NSManagedObject" }}{% endset %} -{% set collectionClassName %}{% if relationship.isOrdered %}NSOrderedSet{% else %}Set<{{ destinationEntityClassName }}>{% endif %}{% endset %} -{% set relationshipName %}{{ relationship.name | upperFirstLetter }}{% endset %} -// MARK: Relationship {{ relationshipName }} - -extension {{ entityClassName }} { - {% if relationship.isOrdered %} - @objc(insertObject:in{{ relationshipName }}AtIndex:) - @NSManaged public func insertInto{{ relationshipName }}(_ value: {{ destinationEntityClassName }}, at idx: Int) - - @objc(removeObjectFrom{{ relationshipName }}AtIndex:) - @NSManaged public func removeFrom{{ relationshipName }}(at idx: Int) - - @objc(insert{{ relationshipName }}:atIndexes:) - @NSManaged public func insertInto{{ relationshipName }}(_ values: [{{ destinationEntityClassName }}], at indexes: NSIndexSet) - - @objc(remove{{ relationshipName }}AtIndexes:) - @NSManaged public func removeFrom{{ relationshipName }}(at indexes: NSIndexSet) - - @objc(replaceObjectIn{{ relationshipName }}AtIndex:withObject:) - @NSManaged public func replace{{ relationshipName }}(at idx: Int, with value: {{ destinationEntityClassName }}) - - @objc(replace{{ relationshipName }}AtIndexes:with{{ relationshipName }}:) - @NSManaged public func replace{{ relationshipName }}(at indexes: NSIndexSet, with values: [{{ destinationEntityClassName }}]) - - {% endif %} - @objc(add{{ relationshipName }}Object:) - @NSManaged public func addTo{{ relationshipName }}(_ value: {{ destinationEntityClassName }}) - - @objc(remove{{ relationshipName }}Object:) - @NSManaged public func removeFrom{{ relationshipName }}(_ value: {{ destinationEntityClassName }}) - - @objc(add{{ relationshipName }}:) - @NSManaged public func addTo{{ relationshipName }}(_ values: {{ collectionClassName }}) - - @objc(remove{{ relationshipName }}:) - @NSManaged public func removeFrom{{ relationshipName }}(_ values: {{ collectionClassName }}) -} - -{% endfor %} -{% if model.fetchRequests[entity.name].count > 0 %} -// MARK: Fetch Requests - -extension {{ entityClassName }} { - {% for fetchRequest in model.fetchRequests[entity.name] %} - {% set resultTypeName %}{% filter removeNewlines:"leading" %} - {% if fetchRequest.resultType == "Object" %} - {{ entityClassName }} - {% elif fetchRequest.resultType == "Object ID" %} - NSManagedObjectID - {% elif fetchRequest.resultType == "Dictionary" %} - [String: Any] - {% endif %} - {% endfilter %}{% endset %} - class func fetch{{ fetchRequest.name | upperFirstLetter }}({% filter removeNewlines:"leading" %} - managedObjectContext: NSManagedObjectContext - {% for variableName, variableType in fetchRequest.substitutionVariables %} - , {{ variableName | lowerFirstWord }}: {{ variableType }} - {% endfor %} - {% endfilter %}) throws -> [{{ resultTypeName }}] { - guard let persistentStoreCoordinator = managedObjectContext.persistentStoreCoordinator else { - fatalError("Managed object context has no persistent store coordinator for getting fetch request templates") - } - let model = persistentStoreCoordinator.managedObjectModel - let substitutionVariables: [String: Any] = [ - {% for variableName, variableType in fetchRequest.substitutionVariables %} - "{{ variableName }}": {{ variableName | lowerFirstWord }}{{ "," if not forloop.last }} - {% empty %} - : - {% endfor %} - ] - - guard let fetchRequest = model.fetchRequestFromTemplate(withName: "{{ fetchRequest.name }}", substitutionVariables: substitutionVariables) else { - fatalError("No fetch request template named '{{ fetchRequest.name }}' found.") - } - - guard let result = try managedObjectContext.fetch(fetchRequest) as? [{{ resultTypeName }}] else { - fatalError("Unable to cast fetch result to correct result type.") - } - - return result - } - - {% endfor %} -} - -{% endif %} -{% endif %} -{% endfor %} -{% endfor %} -// swiftlint:enable identifier_name line_length type_body_length diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/coredata/swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/coredata/swift5.stencil deleted file mode 100644 index 9832876e..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/coredata/swift5.stencil +++ /dev/null @@ -1,211 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -// swiftlint:disable superfluous_disable_command implicit_return -// swiftlint:disable sorted_imports -import CoreData -import Foundation -{% for import in param.extraImports %} -import {{ import }} -{% empty %} -{# If extraImports is a single String instead of an array, `for` considers it empty but we still have to check if there's a single String value #} -{% if param.extraImports %}import {{ param.extraImports }}{% endif %} -{% endfor %} - -// swiftlint:disable attributes file_length vertical_whitespace_closing_braces -// swiftlint:disable identifier_name line_length type_body_length -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} - -{% for model in models %} -{% for name, entity in model.entities %} -{% set superclass %}{{ model.entities[entity.superEntity].className|default:"NSManagedObject" }}{% endset %} -{% set entityClassName %}{{ entity.className|default:"NSManagedObject" }}{% endset %} -// MARK: - {{ entity.name }} - -{% if not entity.shouldGenerateCode %} -// Note: '{{ entity.name }}' has codegen enabled for Xcode, skipping code generation. - -{% elif entityClassName|contains:"." %} -// Warning: '{{ entityClassName }}' cannot be a valid type name, skipping code generation. - -{% else %} -{% if param.generateObjcName %} -@objc({{ entityClassName }}) -{% endif %} -{{ accessModifier }} class {{ entityClassName }}: {{ superclass }} { - {% set override %}{% if superclass != "NSManagedObject" %}override {% endif %}{% endset %} - {{ override }}{{ accessModifier }} class var entityName: String { - return "{{ entity.name }}" - } - - {{ override }}{{ accessModifier }} class func entity(in managedObjectContext: NSManagedObjectContext) -> NSEntityDescription? { - return NSEntityDescription.entity(forEntityName: entityName, in: managedObjectContext) - } - - @available(*, deprecated, renamed: "makeFetchRequest", message: "To avoid collisions with the less concrete method in `NSManagedObject`, please use `makeFetchRequest()` instead.") - @nonobjc {{ accessModifier }} class func fetchRequest() -> NSFetchRequest<{{ entityClassName }}> { - return NSFetchRequest<{{ entityClassName }}>(entityName: entityName) - } - - @nonobjc {{ accessModifier }} class func makeFetchRequest() -> NSFetchRequest<{{ entityClassName }}> { - return NSFetchRequest<{{ entityClassName }}>(entityName: entityName) - } - - // swiftlint:disable discouraged_optional_boolean discouraged_optional_collection - {% for attribute in entity.attributes %} - {% if attribute.userInfo.RawType %} - {% set rawType attribute.userInfo.RawType %} - {% set unwrapOptional attribute.userInfo.unwrapOptional %} - {{ accessModifier }} var {{ attribute.name }}: {{ rawType }}{% if not unwrapOptional %}?{% endif %} { - get { - let key = "{{ attribute.name }}" - willAccessValue(forKey: key) - defer { didAccessValue(forKey: key) } - - {% if unwrapOptional %} - guard let value = primitiveValue(forKey: key) as? {{ rawType }}.RawValue, - let result = {{ rawType }}(rawValue: value) else { - fatalError("Could not convert value for key '\(key)' to type '{{ rawType }}'") - } - return result - {% else %} - guard let value = primitiveValue(forKey: key) as? {{ rawType }}.RawValue else { - return nil - } - return {{ rawType }}(rawValue: value) - {% endif %} - } - set { - let key = "{{ attribute.name }}" - willChangeValue(forKey: key) - defer { didChangeValue(forKey: key) } - - setPrimitiveValue(newValue{% if not unwrapOptional %}?{% endif %}.rawValue, forKey: key) - } - } - {% elif attribute.usesScalarValueType and attribute.isOptional %} - {{ accessModifier }} var {{ attribute.name }}: {{ attribute.typeName }}? { - get { - let key = "{{ attribute.name }}" - willAccessValue(forKey: key) - defer { didAccessValue(forKey: key) } - - return primitiveValue(forKey: key) as? {{ attribute.typeName }} - } - set { - let key = "{{ attribute.name }}" - willChangeValue(forKey: key) - defer { didChangeValue(forKey: key) } - - setPrimitiveValue(newValue, forKey: key) - } - } - {% else %} - @NSManaged {{ accessModifier }} var {{ attribute.name }}: {{ attribute.typeName }}{% if attribute.isOptional %}?{% endif %} - {% endif %} - {% endfor %} - {% for relationship in entity.relationships %} - {% if relationship.isToMany %} - @NSManaged {{ accessModifier }} var {{ relationship.name }}: {% if relationship.isOrdered %}NSOrderedSet{% else %}Set<{{ model.entities[relationship.destinationEntity].className|default:"NSManagedObject" }}>{% endif %}{% if relationship.isOptional %}?{% endif %} - {% else %} - @NSManaged {{ accessModifier }} var {{ relationship.name }}: {{ model.entities[relationship.destinationEntity].className|default:"NSManagedObject" }}{% if relationship.isOptional %}?{% endif %} - {% endif %} - {% endfor %} - {% for fetchedProperty in entity.fetchedProperties %} - @NSManaged {{ accessModifier }} var {{ fetchedProperty.name }}: [{{ fetchedProperty.fetchRequest.entity }}] - {% endfor %} - // swiftlint:enable discouraged_optional_boolean discouraged_optional_collection -} - -{% for relationship in entity.relationships where relationship.isToMany %} -{% set destinationEntityClassName %}{{ model.entities[relationship.destinationEntity].className|default:"NSManagedObject" }}{% endset %} -{% set collectionClassName %}{% if relationship.isOrdered %}NSOrderedSet{% else %}Set<{{ destinationEntityClassName }}>{% endif %}{% endset %} -{% set relationshipName %}{{ relationship.name | upperFirstLetter }}{% endset %} -// MARK: Relationship {{ relationshipName }} - -extension {{ entityClassName }} { - {% if relationship.isOrdered %} - @objc(insertObject:in{{ relationshipName }}AtIndex:) - @NSManaged public func insertInto{{ relationshipName }}(_ value: {{ destinationEntityClassName }}, at idx: Int) - - @objc(removeObjectFrom{{ relationshipName }}AtIndex:) - @NSManaged public func removeFrom{{ relationshipName }}(at idx: Int) - - @objc(insert{{ relationshipName }}:atIndexes:) - @NSManaged public func insertInto{{ relationshipName }}(_ values: [{{ destinationEntityClassName }}], at indexes: NSIndexSet) - - @objc(remove{{ relationshipName }}AtIndexes:) - @NSManaged public func removeFrom{{ relationshipName }}(at indexes: NSIndexSet) - - @objc(replaceObjectIn{{ relationshipName }}AtIndex:withObject:) - @NSManaged public func replace{{ relationshipName }}(at idx: Int, with value: {{ destinationEntityClassName }}) - - @objc(replace{{ relationshipName }}AtIndexes:with{{ relationshipName }}:) - @NSManaged public func replace{{ relationshipName }}(at indexes: NSIndexSet, with values: [{{ destinationEntityClassName }}]) - - {% endif %} - @objc(add{{ relationshipName }}Object:) - @NSManaged public func addTo{{ relationshipName }}(_ value: {{ destinationEntityClassName }}) - - @objc(remove{{ relationshipName }}Object:) - @NSManaged public func removeFrom{{ relationshipName }}(_ value: {{ destinationEntityClassName }}) - - @objc(add{{ relationshipName }}:) - @NSManaged public func addTo{{ relationshipName }}(_ values: {{ collectionClassName }}) - - @objc(remove{{ relationshipName }}:) - @NSManaged public func removeFrom{{ relationshipName }}(_ values: {{ collectionClassName }}) -} - -{% endfor %} -{% if model.fetchRequests[entity.name].count > 0 %} -// MARK: Fetch Requests - -extension {{ entityClassName }} { - {% for fetchRequest in model.fetchRequests[entity.name] %} - {% set resultTypeName %}{% filter removeNewlines:"leading" %} - {% if fetchRequest.resultType == "Object" %} - {{ entityClassName }} - {% elif fetchRequest.resultType == "Object ID" %} - NSManagedObjectID - {% elif fetchRequest.resultType == "Dictionary" %} - [String: Any] - {% endif %} - {% endfilter %}{% endset %} - class func fetch{{ fetchRequest.name | upperFirstLetter }}({% filter removeNewlines:"leading" %} - managedObjectContext: NSManagedObjectContext - {% for variableName, variableType in fetchRequest.substitutionVariables %} - , {{ variableName | lowerFirstWord }}: {{ variableType }} - {% endfor %} - {% endfilter %}) throws -> [{{ resultTypeName }}] { - guard let persistentStoreCoordinator = managedObjectContext.persistentStoreCoordinator else { - fatalError("Managed object context has no persistent store coordinator for getting fetch request templates") - } - let model = persistentStoreCoordinator.managedObjectModel - let substitutionVariables: [String: Any] = [ - {% for variableName, variableType in fetchRequest.substitutionVariables %} - "{{ variableName }}": {{ variableName | lowerFirstWord }}{{ "," if not forloop.last }} - {% empty %} - : - {% endfor %} - ] - - guard let fetchRequest = model.fetchRequestFromTemplate(withName: "{{ fetchRequest.name }}", substitutionVariables: substitutionVariables) else { - fatalError("No fetch request template named '{{ fetchRequest.name }}' found.") - } - - guard let result = try managedObjectContext.fetch(fetchRequest) as? [{{ resultTypeName }}] else { - fatalError("Unable to cast fetch result to correct result type.") - } - - return result - } - - {% endfor %} -} - -{% endif %} -{% endif %} -{% endfor %} -{% endfor %} -// swiftlint:enable identifier_name line_length type_body_length diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/flat-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/flat-swift4.stencil deleted file mode 100644 index 09df24de..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/flat-swift4.stencil +++ /dev/null @@ -1,103 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if groups.count > 0 %} -{% set enumName %}{{param.enumName|default:"Files"}}{% endset %} -{% set useExt %}{% if param.useExtension|default:"true" %}true{% endif %}{% endset %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -{% set resourceType %}{{param.resourceTypeName|default:"File"}}{% endset %} -import Foundation - -// swiftlint:disable superfluous_disable_command file_length line_length implicit_return - -// MARK: - Files - -{% macro groupBlock group %} - {% for file in group.files %} - {% call fileBlock file %} - {% endfor %} - {% for dir in group.directories %} - {% call dirBlock dir %} - {% endfor %} -{% endmacro %} -{% macro fileBlock file %} - /// {% if file.path and param.preservePath %}{{file.path}}/{% endif %}{{file.name}}{% if file.ext %}.{{file.ext}}{% endif %} - {% set identifier %}{{ file.name }}{% if useExt %}.{{ file.ext }}{% endif %}{% endset %} - {{accessModifier}} static let {{identifier|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{resourceType}}(name: "{{file.name}}", ext: {% if file.ext %}"{{file.ext}}"{% else %}nil{% endif %}, relativePath: "{{file.path if param.preservePath}}", mimeType: "{{file.mimeType}}") -{% endmacro %} -{% macro dirBlock directory %} - {% for file in directory.files %} - {% call fileBlock file %} - {% endfor %} - {% for dir in directory.directories %} - {% call dirBlock dir %} - {% endfor %} -{% endmacro %} -// swiftlint:disable explicit_type_interface identifier_name -// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces -{{accessModifier}} enum {{enumName}} { - {% if groups.count > 1 or param.forceFileNameEnum %} - {% for group in groups %} - {{accessModifier}} enum {{group.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call groupBlock group %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call groupBlock groups.first %} - {% endif %} -} -// swiftlint:enable explicit_type_interface identifier_name -// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces - -// MARK: - Implementation Details - -{{accessModifier}} struct {{resourceType}} { - {{accessModifier}} let name: String - {{accessModifier}} let ext: String? - {{accessModifier}} let relativePath: String - {{accessModifier}} let mimeType: String - - {{accessModifier}} var url: URL { - return url(locale: nil) - } - - {{accessModifier}} func url(locale: Locale?) -> URL { - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - let url = bundle.url( - forResource: name, - withExtension: ext, - subdirectory: relativePath, - localization: locale?.identifier - ) - guard let result = url else { - let file = name + (ext.flatMap { ".\($0)" } ?? "") - fatalError("Could not locate file named \(file)") - } - return result - } - - {{accessModifier}} var path: String { - return path(locale: nil) - } - - {{accessModifier}} func path(locale: Locale?) -> String { - return url(locale: locale).path - } -} -{% if not param.bundle %} - -// swiftlint:disable convenience_type explicit_type_interface -private final class BundleToken { - static let bundle: Bundle = { - #if SWIFT_PACKAGE - return Bundle.module - #else - return Bundle(for: BundleToken.self) - #endif - }() -} -// swiftlint:enable convenience_type explicit_type_interface -{% endif %} -{% else %} -// No files found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/flat-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/flat-swift5.stencil deleted file mode 100644 index 09df24de..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/flat-swift5.stencil +++ /dev/null @@ -1,103 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if groups.count > 0 %} -{% set enumName %}{{param.enumName|default:"Files"}}{% endset %} -{% set useExt %}{% if param.useExtension|default:"true" %}true{% endif %}{% endset %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -{% set resourceType %}{{param.resourceTypeName|default:"File"}}{% endset %} -import Foundation - -// swiftlint:disable superfluous_disable_command file_length line_length implicit_return - -// MARK: - Files - -{% macro groupBlock group %} - {% for file in group.files %} - {% call fileBlock file %} - {% endfor %} - {% for dir in group.directories %} - {% call dirBlock dir %} - {% endfor %} -{% endmacro %} -{% macro fileBlock file %} - /// {% if file.path and param.preservePath %}{{file.path}}/{% endif %}{{file.name}}{% if file.ext %}.{{file.ext}}{% endif %} - {% set identifier %}{{ file.name }}{% if useExt %}.{{ file.ext }}{% endif %}{% endset %} - {{accessModifier}} static let {{identifier|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{resourceType}}(name: "{{file.name}}", ext: {% if file.ext %}"{{file.ext}}"{% else %}nil{% endif %}, relativePath: "{{file.path if param.preservePath}}", mimeType: "{{file.mimeType}}") -{% endmacro %} -{% macro dirBlock directory %} - {% for file in directory.files %} - {% call fileBlock file %} - {% endfor %} - {% for dir in directory.directories %} - {% call dirBlock dir %} - {% endfor %} -{% endmacro %} -// swiftlint:disable explicit_type_interface identifier_name -// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces -{{accessModifier}} enum {{enumName}} { - {% if groups.count > 1 or param.forceFileNameEnum %} - {% for group in groups %} - {{accessModifier}} enum {{group.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call groupBlock group %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call groupBlock groups.first %} - {% endif %} -} -// swiftlint:enable explicit_type_interface identifier_name -// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces - -// MARK: - Implementation Details - -{{accessModifier}} struct {{resourceType}} { - {{accessModifier}} let name: String - {{accessModifier}} let ext: String? - {{accessModifier}} let relativePath: String - {{accessModifier}} let mimeType: String - - {{accessModifier}} var url: URL { - return url(locale: nil) - } - - {{accessModifier}} func url(locale: Locale?) -> URL { - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - let url = bundle.url( - forResource: name, - withExtension: ext, - subdirectory: relativePath, - localization: locale?.identifier - ) - guard let result = url else { - let file = name + (ext.flatMap { ".\($0)" } ?? "") - fatalError("Could not locate file named \(file)") - } - return result - } - - {{accessModifier}} var path: String { - return path(locale: nil) - } - - {{accessModifier}} func path(locale: Locale?) -> String { - return url(locale: locale).path - } -} -{% if not param.bundle %} - -// swiftlint:disable convenience_type explicit_type_interface -private final class BundleToken { - static let bundle: Bundle = { - #if SWIFT_PACKAGE - return Bundle.module - #else - return Bundle(for: BundleToken.self) - #endif - }() -} -// swiftlint:enable convenience_type explicit_type_interface -{% endif %} -{% else %} -// No files found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/structured-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/structured-swift4.stencil deleted file mode 100644 index 6d6db960..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/structured-swift4.stencil +++ /dev/null @@ -1,107 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if groups.count > 0 %} -{% set enumName %}{{param.enumName|default:"Files"}}{% endset %} -{% set useExt %}{% if param.useExtension|default:"true" %}true{% endif %}{% endset %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -{% set resourceType %}{{param.resourceTypeName|default:"File"}}{% endset %} -import Foundation - -// swiftlint:disable superfluous_disable_command file_length line_length implicit_return - -// MARK: - Files - -{% macro groupBlock group %} - {% for file in group.files %} - {% call fileBlock file %} - {% endfor %} - {% for dir in group.directories %} - {% call dirBlock dir "" %} - {% endfor %} -{% endmacro %} -{% macro fileBlock file %} - /// {% if file.path and param.preservePath %}{{file.path}}/{% endif %}{{file.name}}{% if file.ext %}.{{file.ext}}{% endif %} - {% set identifier %}{{ file.name }}{% if useExt %}.{{ file.ext }}{% endif %}{% endset %} - {{accessModifier}} static let {{identifier|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{resourceType}}(name: "{{file.name}}", ext: {% if file.ext %}"{{file.ext}}"{% else %}nil{% endif %}, relativePath: "{{file.path if param.preservePath}}", mimeType: "{{file.mimeType}}") -{% endmacro %} -{% macro dirBlock directory parent %} - {% set fullDir %}{{parent}}{{directory.name}}/{% endset %} - /// {{ fullDir }} - {{accessModifier}} enum {{directory.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% for file in directory.files %} - {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} - {% endfor %} - {% for dir in directory.directories %} - {% filter indent:2 %}{% call dirBlock dir fullDir %}{% endfilter %} - {% endfor %} - } -{% endmacro %} -// swiftlint:disable explicit_type_interface identifier_name -// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces -{{accessModifier}} enum {{enumName}} { - {% if groups.count > 1 or param.forceFileNameEnum %} - {% for group in groups %} - {{accessModifier}} enum {{group.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call groupBlock group %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call groupBlock groups.first %} - {% endif %} -} -// swiftlint:enable explicit_type_interface identifier_name -// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces - -// MARK: - Implementation Details - -{{accessModifier}} struct {{resourceType}} { - {{accessModifier}} let name: String - {{accessModifier}} let ext: String? - {{accessModifier}} let relativePath: String - {{accessModifier}} let mimeType: String - - {{accessModifier}} var url: URL { - return url(locale: nil) - } - - {{accessModifier}} func url(locale: Locale?) -> URL { - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - let url = bundle.url( - forResource: name, - withExtension: ext, - subdirectory: relativePath, - localization: locale?.identifier - ) - guard let result = url else { - let file = name + (ext.flatMap { ".\($0)" } ?? "") - fatalError("Could not locate file named \(file)") - } - return result - } - - {{accessModifier}} var path: String { - return path(locale: nil) - } - - {{accessModifier}} func path(locale: Locale?) -> String { - return url(locale: locale).path - } -} -{% if not param.bundle %} - -// swiftlint:disable convenience_type explicit_type_interface -private final class BundleToken { - static let bundle: Bundle = { - #if SWIFT_PACKAGE - return Bundle.module - #else - return Bundle(for: BundleToken.self) - #endif - }() -} -// swiftlint:enable convenience_type explicit_type_interface -{% endif %} -{% else %} -// No files found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/structured-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/structured-swift5.stencil deleted file mode 100644 index 6d6db960..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/files/structured-swift5.stencil +++ /dev/null @@ -1,107 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if groups.count > 0 %} -{% set enumName %}{{param.enumName|default:"Files"}}{% endset %} -{% set useExt %}{% if param.useExtension|default:"true" %}true{% endif %}{% endset %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -{% set resourceType %}{{param.resourceTypeName|default:"File"}}{% endset %} -import Foundation - -// swiftlint:disable superfluous_disable_command file_length line_length implicit_return - -// MARK: - Files - -{% macro groupBlock group %} - {% for file in group.files %} - {% call fileBlock file %} - {% endfor %} - {% for dir in group.directories %} - {% call dirBlock dir "" %} - {% endfor %} -{% endmacro %} -{% macro fileBlock file %} - /// {% if file.path and param.preservePath %}{{file.path}}/{% endif %}{{file.name}}{% if file.ext %}.{{file.ext}}{% endif %} - {% set identifier %}{{ file.name }}{% if useExt %}.{{ file.ext }}{% endif %}{% endset %} - {{accessModifier}} static let {{identifier|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{resourceType}}(name: "{{file.name}}", ext: {% if file.ext %}"{{file.ext}}"{% else %}nil{% endif %}, relativePath: "{{file.path if param.preservePath}}", mimeType: "{{file.mimeType}}") -{% endmacro %} -{% macro dirBlock directory parent %} - {% set fullDir %}{{parent}}{{directory.name}}/{% endset %} - /// {{ fullDir }} - {{accessModifier}} enum {{directory.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% for file in directory.files %} - {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} - {% endfor %} - {% for dir in directory.directories %} - {% filter indent:2 %}{% call dirBlock dir fullDir %}{% endfilter %} - {% endfor %} - } -{% endmacro %} -// swiftlint:disable explicit_type_interface identifier_name -// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces -{{accessModifier}} enum {{enumName}} { - {% if groups.count > 1 or param.forceFileNameEnum %} - {% for group in groups %} - {{accessModifier}} enum {{group.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call groupBlock group %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call groupBlock groups.first %} - {% endif %} -} -// swiftlint:enable explicit_type_interface identifier_name -// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces - -// MARK: - Implementation Details - -{{accessModifier}} struct {{resourceType}} { - {{accessModifier}} let name: String - {{accessModifier}} let ext: String? - {{accessModifier}} let relativePath: String - {{accessModifier}} let mimeType: String - - {{accessModifier}} var url: URL { - return url(locale: nil) - } - - {{accessModifier}} func url(locale: Locale?) -> URL { - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - let url = bundle.url( - forResource: name, - withExtension: ext, - subdirectory: relativePath, - localization: locale?.identifier - ) - guard let result = url else { - let file = name + (ext.flatMap { ".\($0)" } ?? "") - fatalError("Could not locate file named \(file)") - } - return result - } - - {{accessModifier}} var path: String { - return path(locale: nil) - } - - {{accessModifier}} func path(locale: Locale?) -> String { - return url(locale: locale).path - } -} -{% if not param.bundle %} - -// swiftlint:disable convenience_type explicit_type_interface -private final class BundleToken { - static let bundle: Bundle = { - #if SWIFT_PACKAGE - return Bundle.module - #else - return Bundle(for: BundleToken.self) - #endif - }() -} -// swiftlint:enable convenience_type explicit_type_interface -{% endif %} -{% else %} -// No files found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/fonts/swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/fonts/swift4.stencil deleted file mode 100644 index 744d6a4c..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/fonts/swift4.stencil +++ /dev/null @@ -1,110 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if families %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -{% set fontType %}{{param.fontTypeName|default:"FontConvertible"}}{% endset %} -#if os(macOS) - import AppKit.NSFont -#elseif os(iOS) || os(tvOS) || os(watchOS) - import UIKit.UIFont -#endif - -// Deprecated typealiases -@available(*, deprecated, renamed: "{{fontType}}.Font", message: "This typealias will be removed in SwiftGen 7.0") -{{accessModifier}} typealias {{param.fontAliasName|default:"Font"}} = {{fontType}}.Font - -// swiftlint:disable superfluous_disable_command -// swiftlint:disable file_length -// swiftlint:disable implicit_return - -// MARK: - Fonts - -// swiftlint:disable identifier_name line_length type_body_length -{% macro transformPath path %}{% filter removeNewlines %} - {% if param.preservePath %} - {{path}} - {% else %} - {{path|basename}} - {% endif %} -{% endfilter %}{% endmacro %} -{{accessModifier}} enum {{param.enumName|default:"FontFamily"}} { - {% for family in families %} - {{accessModifier}} enum {{family.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% for font in family.fonts %} - {{accessModifier}} static let {{font.style|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{fontType}}(name: "{{font.name}}", family: "{{family.name}}", path: "{% call transformPath font.path %}") - {% endfor %} - {{accessModifier}} static let all: [{{fontType}}] = [{% for font in family.fonts %}{{font.style|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{{ ", " if not forloop.last }}{% endfor %}] - } - {% endfor %} - {{accessModifier}} static let allCustomFonts: [{{fontType}}] = [{% for family in families %}{{family.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}.all{{ ", " if not forloop.last }}{% endfor %}].flatMap { $0 } - {{accessModifier}} static func registerAllCustomFonts() { - allCustomFonts.forEach { $0.register() } - } -} -// swiftlint:enable identifier_name line_length type_body_length - -// MARK: - Implementation Details - -{{accessModifier}} struct {{fontType}} { - {{accessModifier}} let name: String - {{accessModifier}} let family: String - {{accessModifier}} let path: String - - #if os(macOS) - {{accessModifier}} typealias Font = NSFont - #elseif os(iOS) || os(tvOS) || os(watchOS) - {{accessModifier}} typealias Font = UIFont - #endif - - {{accessModifier}} func font(size: CGFloat) -> Font! { - return Font(font: self, size: size) - } - - {{accessModifier}} func register() { - // swiftlint:disable:next conditional_returns_on_newline - guard let url = url else { return } - CTFontManagerRegisterFontsForURL(url as CFURL, .process, nil) - } - - fileprivate var url: URL? { - {% if param.lookupFunction %} - return {{param.lookupFunction}}(name, family, path) - {% else %} - return {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil) - {% endif %} - } -} - -{{accessModifier}} extension {{fontType}}.Font { - convenience init?(font: {{fontType}}, size: CGFloat) { - #if os(iOS) || os(tvOS) || os(watchOS) - if !UIFont.fontNames(forFamilyName: font.family).contains(font.name) { - font.register() - } - #elseif os(macOS) - if let url = font.url, CTFontManagerGetScopeForURL(url as CFURL) == .none { - font.register() - } - #endif - - self.init(name: font.name, size: size) - } -} -{% if not param.bundle and not param.lookupFunction %} - -// swiftlint:disable convenience_type -private final class BundleToken { - static let bundle: Bundle = { - #if SWIFT_PACKAGE - return Bundle.module - #else - return Bundle(for: BundleToken.self) - #endif - }() -} -// swiftlint:enable convenience_type -{% endif %} -{% else %} -// No fonts found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/fonts/swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/fonts/swift5.stencil deleted file mode 100644 index 5a268b58..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/fonts/swift5.stencil +++ /dev/null @@ -1,113 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if families %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -{% set fontType %}{{param.fontTypeName|default:"FontConvertible"}}{% endset %} -#if os(macOS) - import AppKit.NSFont -#elseif os(iOS) || os(tvOS) || os(watchOS) - import UIKit.UIFont -#endif - -// Deprecated typealiases -@available(*, deprecated, renamed: "{{fontType}}.Font", message: "This typealias will be removed in SwiftGen 7.0") -{{accessModifier}} typealias {{param.fontAliasName|default:"Font"}} = {{fontType}}.Font - -// swiftlint:disable superfluous_disable_command -// swiftlint:disable file_length - -// MARK: - Fonts - -// swiftlint:disable identifier_name line_length type_body_length -{% macro transformPath path %}{% filter removeNewlines %} - {% if param.preservePath %} - {{path}} - {% else %} - {{path|basename}} - {% endif %} -{% endfilter %}{% endmacro %} -{{accessModifier}} enum {{param.enumName|default:"FontFamily"}} { - {% for family in families %} - {{accessModifier}} enum {{family.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% for font in family.fonts %} - {{accessModifier}} static let {{font.style|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{fontType}}(name: "{{font.name}}", family: "{{family.name}}", path: "{% call transformPath font.path %}") - {% endfor %} - {{accessModifier}} static let all: [{{fontType}}] = [{% for font in family.fonts %}{{font.style|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{{ ", " if not forloop.last }}{% endfor %}] - } - {% endfor %} - {{accessModifier}} static let allCustomFonts: [{{fontType}}] = [{% for family in families %}{{family.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}.all{{ ", " if not forloop.last }}{% endfor %}].flatMap { $0 } - {{accessModifier}} static func registerAllCustomFonts() { - allCustomFonts.forEach { $0.register() } - } -} -// swiftlint:enable identifier_name line_length type_body_length - -// MARK: - Implementation Details - -{{accessModifier}} struct {{fontType}} { - {{accessModifier}} let name: String - {{accessModifier}} let family: String - {{accessModifier}} let path: String - - #if os(macOS) - {{accessModifier}} typealias Font = NSFont - #elseif os(iOS) || os(tvOS) || os(watchOS) - {{accessModifier}} typealias Font = UIFont - #endif - - {{accessModifier}} func font(size: CGFloat) -> Font { - guard let font = Font(font: self, size: size) else { - fatalError("Unable to initialize font '\(name)' (\(family))") - } - return font - } - - {{accessModifier}} func register() { - // swiftlint:disable:next conditional_returns_on_newline - guard let url = url else { return } - CTFontManagerRegisterFontsForURL(url as CFURL, .process, nil) - } - - fileprivate var url: URL? { - // swiftlint:disable:next implicit_return - {% if param.lookupFunction %} - return {{param.lookupFunction}}(name, family, path) - {% else %} - return {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil) - {% endif %} - } -} - -{{accessModifier}} extension {{fontType}}.Font { - convenience init?(font: {{fontType}}, size: CGFloat) { - #if os(iOS) || os(tvOS) || os(watchOS) - if !UIFont.fontNames(forFamilyName: font.family).contains(font.name) { - font.register() - } - #elseif os(macOS) - if let url = font.url, CTFontManagerGetScopeForURL(url as CFURL) == .none { - font.register() - } - #endif - - self.init(name: font.name, size: size) - } -} -{% if not param.bundle and not param.lookupFunction %} - -// swiftlint:disable convenience_type -private final class BundleToken { - static let bundle: Bundle = { - #if SWIFT_PACKAGE - return Bundle.module - #else - return Bundle(for: BundleToken.self) - #endif - }() -} -// swiftlint:enable convenience_type -{% endif %} -{% else %} -// No fonts found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/scenes-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/scenes-swift4.stencil deleted file mode 100644 index 9ad52fff..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/scenes-swift4.stencil +++ /dev/null @@ -1,157 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if platform and storyboards %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -{% set isAppKit %}{% if platform == "macOS" %}true{% endif %}{% endset %} -{% set prefix %}{% if isAppKit %}NS{% else %}UI{% endif %}{% endset %} -{% set controller %}{% if isAppKit %}Controller{% else %}ViewController{% endif %}{% endset %} -// swiftlint:disable sorted_imports -import Foundation -{% for module in modules where module != env.PRODUCT_MODULE_NAME and module != param.module %} -import {{module}} -{% endfor %} - -// swiftlint:disable superfluous_disable_command -// swiftlint:disable file_length implicit_return - -// MARK: - Storyboard Scenes - -// swiftlint:disable explicit_type_interface identifier_name line_length type_body_length type_name -{% macro moduleName item %}{% filter removeNewlines %} - {% if item.moduleIsPlaceholder %} - {{ env.PRODUCT_MODULE_NAME|default:param.module }} - {% else %} - {{ item.module }} - {% endif %} -{% endfilter %}{% endmacro %} -{% macro className item %}{% filter removeNewlines %} - {% set module %}{% call moduleName item %}{% endset %} - {% if module and ( not param.ignoreTargetModule or module != env.PRODUCT_MODULE_NAME and module != param.module ) %} - {{module}}. - {% endif %} - {{item.type}} -{% endfilter %}{% endmacro %} -{{accessModifier}} enum {{param.enumName|default:"StoryboardScene"}} { - {% for storyboard in storyboards %} - {% set storyboardName %}{{storyboard.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}{% endset %} - {{accessModifier}} enum {{storyboardName}}: StoryboardType { - {{accessModifier}} static let storyboardName = "{{storyboard.name}}" - {% if storyboard.initialScene %} - - {% set sceneClass %}{% call className storyboard.initialScene %}{% endset %} - {{accessModifier}} static let initialScene = InitialSceneType<{{sceneClass}}>(storyboard: {{storyboardName}}.self) - {% endif %} - {% for scene in storyboard.scenes %} - - {% set sceneID %}{{scene.identifier|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} - {% set sceneClass %}{% call className scene %}{% endset %} - {{accessModifier}} static let {{sceneID}} = SceneType<{{sceneClass}}>(storyboard: {{storyboardName}}.self, identifier: "{{scene.identifier}}") - {% endfor %} - } - {% endfor %} -} -// swiftlint:enable explicit_type_interface identifier_name line_length type_body_length type_name - -// MARK: - Implementation Details - -{{accessModifier}} protocol StoryboardType { - static var storyboardName: String { get } -} - -{{accessModifier}} extension StoryboardType { - static var storyboard: {{prefix}}Storyboard { - let name = {% if isAppKit %}NSStoryboard.Name({% endif %}self.storyboardName{% if isAppKit %}){% endif %} - {% if param.lookupFunction %} - return {{param.lookupFunction}}(name) - {% else %} - return {{prefix}}Storyboard(name: name, bundle: {{param.bundle|default:"BundleToken.bundle"}}) - {% endif %} - } -} - -{{accessModifier}} struct SceneType { - {{accessModifier}} let storyboard: StoryboardType.Type - {{accessModifier}} let identifier: String - - {{accessModifier}} func instantiate() -> T { - let identifier = {% if isAppKit %}NSStoryboard.SceneIdentifier({% endif %}self.identifier{% if isAppKit %}){% endif %} - guard let controller = storyboard.storyboard.instantiate{{controller}}(withIdentifier: identifier) as? T else { - fatalError("{{controller}} '\(identifier)' is not of the expected class \(T.self).") - } - return controller - } - - {% if isAppKit %} - @available(macOS 10.15, *) - {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSViewController { - return storyboard.storyboard.instantiate{{controller}}(identifier: identifier, creator: block) - } - - @available(macOS 10.15, *) - {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSWindowController { - return storyboard.storyboard.instantiate{{controller}}(identifier: identifier, creator: block) - } - {% else %} - @available(iOS 13.0, tvOS 13.0, *) - {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T { - return storyboard.storyboard.instantiate{{controller}}(identifier: identifier, creator: block) - } - {% endif %} -} - -{{accessModifier}} struct InitialSceneType { - {{accessModifier}} let storyboard: StoryboardType.Type - - {{accessModifier}} func instantiate() -> T { - guard let controller = storyboard.storyboard.instantiateInitial{{controller}}() as? T else { - fatalError("{{controller}} is not of the expected class \(T.self).") - } - return controller - } - - {% if isAppKit %} - @available(macOS 10.15, *) - {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSViewController { - guard let controller = storyboard.storyboard.instantiateInitial{{controller}}(creator: block) else { - fatalError("Storyboard \(storyboard.storyboardName) does not have an initial scene.") - } - return controller - } - - @available(macOS 10.15, *) - {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSWindowController { - guard let controller = storyboard.storyboard.instantiateInitial{{controller}}(creator: block) else { - fatalError("Storyboard \(storyboard.storyboardName) does not have an initial scene.") - } - return controller - } - {% else %} - @available(iOS 13.0, tvOS 13.0, *) - {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T { - guard let controller = storyboard.storyboard.instantiateInitial{{controller}}(creator: block) else { - fatalError("Storyboard \(storyboard.storyboardName) does not have an initial scene.") - } - return controller - } - {% endif %} -} -{% if not param.bundle and not param.lookupFunction %} - -// swiftlint:disable convenience_type -private final class BundleToken { - static let bundle: Bundle = { - #if SWIFT_PACKAGE - return Bundle.module - #else - return Bundle(for: BundleToken.self) - #endif - }() -} -// swiftlint:enable convenience_type -{% endif %} -{% elif storyboards %} -// Mixed AppKit and UIKit storyboard files found, please invoke swiftgen with these separately -{% else %} -// No storyboard found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/scenes-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/scenes-swift5.stencil deleted file mode 100644 index 5f29f8ba..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/scenes-swift5.stencil +++ /dev/null @@ -1,159 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if platform and storyboards %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -{% set isAppKit %}{% if platform == "macOS" %}true{% endif %}{% endset %} -{% set prefix %}{% if isAppKit %}NS{% else %}UI{% endif %}{% endset %} -{% set controller %}{% if isAppKit %}Controller{% else %}ViewController{% endif %}{% endset %} -// swiftlint:disable sorted_imports -import Foundation -{% for module in modules where module != env.PRODUCT_MODULE_NAME and module != param.module %} -import {{module}} -{% endfor %} - -// swiftlint:disable superfluous_disable_command -// swiftlint:disable file_length implicit_return - -// MARK: - Storyboard Scenes - -// swiftlint:disable explicit_type_interface identifier_name line_length type_body_length type_name -{% macro moduleName item %}{% filter removeNewlines %} - {% if item.moduleIsPlaceholder %} - {{ env.PRODUCT_MODULE_NAME|default:param.module }} - {% else %} - {{ item.module }} - {% endif %} -{% endfilter %}{% endmacro %} -{% macro className item %}{% filter removeNewlines %} - {% set module %}{% call moduleName item %}{% endset %} - {% if module and ( not param.ignoreTargetModule or module != env.PRODUCT_MODULE_NAME and module != param.module ) %} - {{module}}. - {% endif %} - {{item.type}} -{% endfilter %}{% endmacro %} -{{accessModifier}} enum {{param.enumName|default:"StoryboardScene"}} { - {% for storyboard in storyboards %} - {% set storyboardName %}{{storyboard.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}{% endset %} - {{accessModifier}} enum {{storyboardName}}: StoryboardType { - {{accessModifier}} static let storyboardName = "{{storyboard.name}}" - {% if storyboard.initialScene %} - - {% set sceneClass %}{% call className storyboard.initialScene %}{% endset %} - {{accessModifier}} static let initialScene = InitialSceneType<{{sceneClass}}>(storyboard: {{storyboardName}}.self) - {% endif %} - {% for scene in storyboard.scenes %} - - {% set sceneID %}{{scene.identifier|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} - {% set sceneClass %}{% call className scene %}{% endset %} - {{accessModifier}} static let {{sceneID}} = SceneType<{{sceneClass}}>(storyboard: {{storyboardName}}.self, identifier: "{{scene.identifier}}") - {% endfor %} - } - {% endfor %} -} -// swiftlint:enable explicit_type_interface identifier_name line_length type_body_length type_name - -// MARK: - Implementation Details - -{{accessModifier}} protocol StoryboardType { - static var storyboardName: String { get } -} - -{{accessModifier}} extension StoryboardType { - static var storyboard: {{prefix}}Storyboard { - let name = {% if isAppKit %}NSStoryboard.Name({% endif %}self.storyboardName{% if isAppKit %}){% endif %} - {% if param.lookupFunction %} - return {{param.lookupFunction}}(name) - {% else %} - return {{prefix}}Storyboard(name: name, bundle: {{param.bundle|default:"BundleToken.bundle"}}) - {% endif %} - } -} - -{{accessModifier}} struct SceneType { - {{accessModifier}} let storyboard: StoryboardType.Type - {{accessModifier}} let identifier: String - - {{accessModifier}} func instantiate() -> T { - let identifier = {% if isAppKit %}NSStoryboard.SceneIdentifier({% endif %}self.identifier{% if isAppKit %}){% endif %} - guard let controller = storyboard.storyboard.instantiate{{controller}}(withIdentifier: identifier) as? T else { - fatalError("{{controller}} '\(identifier)' is not of the expected class \(T.self).") - } - return controller - } - - {% if isAppKit %} - @available(macOS 10.15, *) - {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSViewController { - let identifier = NSStoryboard.SceneIdentifier(self.identifier) - return storyboard.storyboard.instantiate{{controller}}(identifier: identifier, creator: block) - } - - @available(macOS 10.15, *) - {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSWindowController { - let identifier = NSStoryboard.SceneIdentifier(self.identifier) - return storyboard.storyboard.instantiate{{controller}}(identifier: identifier, creator: block) - } - {% else %} - @available(iOS 13.0, tvOS 13.0, *) - {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T { - return storyboard.storyboard.instantiate{{controller}}(identifier: identifier, creator: block) - } - {% endif %} -} - -{{accessModifier}} struct InitialSceneType { - {{accessModifier}} let storyboard: StoryboardType.Type - - {{accessModifier}} func instantiate() -> T { - guard let controller = storyboard.storyboard.instantiateInitial{{controller}}() as? T else { - fatalError("{{controller}} is not of the expected class \(T.self).") - } - return controller - } - - {% if isAppKit %} - @available(macOS 10.15, *) - {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSViewController { - guard let controller = storyboard.storyboard.instantiateInitial{{controller}}(creator: block) else { - fatalError("Storyboard \(storyboard.storyboardName) does not have an initial scene.") - } - return controller - } - - @available(macOS 10.15, *) - {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T where T: NSWindowController { - guard let controller = storyboard.storyboard.instantiateInitial{{controller}}(creator: block) else { - fatalError("Storyboard \(storyboard.storyboardName) does not have an initial scene.") - } - return controller - } - {% else %} - @available(iOS 13.0, tvOS 13.0, *) - {{accessModifier}} func instantiate(creator block: @escaping (NSCoder) -> T?) -> T { - guard let controller = storyboard.storyboard.instantiateInitial{{controller}}(creator: block) else { - fatalError("Storyboard \(storyboard.storyboardName) does not have an initial scene.") - } - return controller - } - {% endif %} -} -{% if not param.bundle and not param.lookupFunction %} - -// swiftlint:disable convenience_type -private final class BundleToken { - static let bundle: Bundle = { - #if SWIFT_PACKAGE - return Bundle.module - #else - return Bundle(for: BundleToken.self) - #endif - }() -} -// swiftlint:enable convenience_type -{% endif %} -{% elif storyboards %} -// Mixed AppKit and UIKit storyboard files found, please invoke swiftgen with these separately -{% else %} -// No storyboard found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/segues-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/segues-swift4.stencil deleted file mode 100644 index 476d5464..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/segues-swift4.stencil +++ /dev/null @@ -1,60 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if platform and storyboards %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -{% set isAppKit %}{% if platform == "macOS" %}true{% endif %}{% endset %} -// swiftlint:disable sorted_imports -import Foundation -{% for module in modules where module != env.PRODUCT_MODULE_NAME and module != param.module %} -import {{module}} -{% endfor %} - -// swiftlint:disable superfluous_disable_command -// swiftlint:disable file_length - -// MARK: - Storyboard Segues - -// swiftlint:disable explicit_type_interface identifier_name line_length type_body_length type_name -{{accessModifier}} enum {{param.enumName|default:"StoryboardSegue"}} { - {% for storyboard in storyboards where storyboard.segues %} - {{accessModifier}} enum {{storyboard.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}: String, SegueType { - {% for segue in storyboard.segues %} - {% set segueID %}{{segue.identifier|swiftIdentifier:"pretty"|lowerFirstWord}}{% endset %} - case {{segueID|escapeReservedKeywords}}{% if segueID != segue.identifier %} = "{{segue.identifier}}"{% endif %} - {% endfor %} - } - {% endfor %} -} -// swiftlint:enable explicit_type_interface identifier_name line_length type_body_length type_name - -// MARK: - Implementation Details - -{{accessModifier}} protocol SegueType: RawRepresentable {} - -{{accessModifier}} extension {% if isAppKit %}NSSeguePerforming{% else %}UIViewController{% endif %} { - func perform(segue: S, sender: Any? = nil) where S.RawValue == String { - let identifier = {% if isAppKit %}NSStoryboardSegue.Identifier({% endif %}segue.rawValue{% if isAppKit %}){% endif %} - performSegue{% if isAppKit %}?{% endif %}(withIdentifier: identifier, sender: sender) - } -} - -{{accessModifier}} extension SegueType where RawValue == String { - init?(_ segue: {% if isAppKit %}NS{% else %}UI{% endif %}StoryboardSegue) { - {% if isAppKit %} - #if swift(>=4.2) - guard let identifier = segue.identifier else { return nil } - #else - guard let identifier = segue.identifier?.rawValue else { return nil } - #endif - {% else %} - guard let identifier = segue.identifier else { return nil } - {% endif %} - self.init(rawValue: identifier) - } -} -{% elif storyboards %} -// Mixed AppKit and UIKit storyboard files found, please invoke swiftgen with these separately -{% else %} -// No storyboard found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/segues-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/segues-swift5.stencil deleted file mode 100644 index 476d5464..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/ib/segues-swift5.stencil +++ /dev/null @@ -1,60 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if platform and storyboards %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -{% set isAppKit %}{% if platform == "macOS" %}true{% endif %}{% endset %} -// swiftlint:disable sorted_imports -import Foundation -{% for module in modules where module != env.PRODUCT_MODULE_NAME and module != param.module %} -import {{module}} -{% endfor %} - -// swiftlint:disable superfluous_disable_command -// swiftlint:disable file_length - -// MARK: - Storyboard Segues - -// swiftlint:disable explicit_type_interface identifier_name line_length type_body_length type_name -{{accessModifier}} enum {{param.enumName|default:"StoryboardSegue"}} { - {% for storyboard in storyboards where storyboard.segues %} - {{accessModifier}} enum {{storyboard.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}: String, SegueType { - {% for segue in storyboard.segues %} - {% set segueID %}{{segue.identifier|swiftIdentifier:"pretty"|lowerFirstWord}}{% endset %} - case {{segueID|escapeReservedKeywords}}{% if segueID != segue.identifier %} = "{{segue.identifier}}"{% endif %} - {% endfor %} - } - {% endfor %} -} -// swiftlint:enable explicit_type_interface identifier_name line_length type_body_length type_name - -// MARK: - Implementation Details - -{{accessModifier}} protocol SegueType: RawRepresentable {} - -{{accessModifier}} extension {% if isAppKit %}NSSeguePerforming{% else %}UIViewController{% endif %} { - func perform(segue: S, sender: Any? = nil) where S.RawValue == String { - let identifier = {% if isAppKit %}NSStoryboardSegue.Identifier({% endif %}segue.rawValue{% if isAppKit %}){% endif %} - performSegue{% if isAppKit %}?{% endif %}(withIdentifier: identifier, sender: sender) - } -} - -{{accessModifier}} extension SegueType where RawValue == String { - init?(_ segue: {% if isAppKit %}NS{% else %}UI{% endif %}StoryboardSegue) { - {% if isAppKit %} - #if swift(>=4.2) - guard let identifier = segue.identifier else { return nil } - #else - guard let identifier = segue.identifier?.rawValue else { return nil } - #endif - {% else %} - guard let identifier = segue.identifier else { return nil } - {% endif %} - self.init(rawValue: identifier) - } -} -{% elif storyboards %} -// Mixed AppKit and UIKit storyboard files found, please invoke swiftgen with these separately -{% else %} -// No storyboard found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/inline-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/inline-swift4.stencil deleted file mode 100644 index 62ca48db..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/inline-swift4.stencil +++ /dev/null @@ -1,82 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if files %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -import Foundation - -// swiftlint:disable superfluous_disable_command -// swiftlint:disable file_length - -// MARK: - JSON Files -{% macro fileBlock file %} - {% call documentBlock file file.document %} -{% endmacro %} -{% macro documentBlock file document %} - {% set rootType %}{% call typeBlock document.metadata %}{% endset %} - {% if document.metadata.type == "Array" %} - {{accessModifier}} static let items: {{rootType}} = {% call valueBlock document.data document.metadata %} - {% elif document.metadata.type == "Dictionary" %} - {% for key,value in document.metadata.properties %} - {{accessModifier}} {% call propertyBlock key value document.data %} - {% endfor %} - {% else %} - {{accessModifier}} static let value: {{rootType}} = {% call valueBlock document.data document.metadata %} - {% endif %} -{% endmacro %} -{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %} - {% if metadata.type == "Array" %} - [{% call typeBlock metadata.element %}] - {% elif metadata.type == "Dictionary" %} - [String: Any] - {% elif metadata.type == "Optional" %} - Any? - {% else %} - {{metadata.type}} - {% endif %} -{% endfilter %}{% endmacro %} -{% macro propertyBlock key metadata data %}{% filter removeNewlines:"leading" %} - {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} - {% set propertyType %}{% call typeBlock metadata %}{% endset %} - static let {{propertyName}}: {{propertyType}} = {% call valueBlock data[key] metadata %} -{% endfilter %}{% endmacro %} -{% macro valueBlock value metadata %}{% filter removeNewlines:"leading" %} - {% if metadata.type == "String" %} - "{{ value }}" - {% elif metadata.type == "Optional" %} - nil - {% elif metadata.type == "Array" and value %} - [{% for value in value %} - {% call valueBlock value metadata.element.items[forloop.counter0]|default:metadata.element %} - {{ ", " if not forloop.last }} - {% endfor %}] - {% elif metadata.type == "Dictionary" %} - [{% for key,value in value %} - "{{key}}": {% call valueBlock value metadata.properties[key] %} - {{ ", " if not forloop.last }} - {% empty %} - : - {% endfor %}] - {% elif metadata.type == "Bool" %} - {% if value %}true{% else %}false{% endif %} - {% else %} - {{ value }} - {% endif %} -{% endfilter %}{% endmacro %} - -// swiftlint:disable identifier_name line_length number_separator type_body_length -{{accessModifier}} enum {{param.enumName|default:"JSONFiles"}} { - {% if files.count > 1 or param.forceFileNameEnum %} - {% for file in files %} - {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call fileBlock files.first %} - {% endif %} -} -// swiftlint:enable identifier_name line_length number_separator type_body_length -{% else %} -// No files found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/inline-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/inline-swift5.stencil deleted file mode 100644 index 62ca48db..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/inline-swift5.stencil +++ /dev/null @@ -1,82 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if files %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -import Foundation - -// swiftlint:disable superfluous_disable_command -// swiftlint:disable file_length - -// MARK: - JSON Files -{% macro fileBlock file %} - {% call documentBlock file file.document %} -{% endmacro %} -{% macro documentBlock file document %} - {% set rootType %}{% call typeBlock document.metadata %}{% endset %} - {% if document.metadata.type == "Array" %} - {{accessModifier}} static let items: {{rootType}} = {% call valueBlock document.data document.metadata %} - {% elif document.metadata.type == "Dictionary" %} - {% for key,value in document.metadata.properties %} - {{accessModifier}} {% call propertyBlock key value document.data %} - {% endfor %} - {% else %} - {{accessModifier}} static let value: {{rootType}} = {% call valueBlock document.data document.metadata %} - {% endif %} -{% endmacro %} -{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %} - {% if metadata.type == "Array" %} - [{% call typeBlock metadata.element %}] - {% elif metadata.type == "Dictionary" %} - [String: Any] - {% elif metadata.type == "Optional" %} - Any? - {% else %} - {{metadata.type}} - {% endif %} -{% endfilter %}{% endmacro %} -{% macro propertyBlock key metadata data %}{% filter removeNewlines:"leading" %} - {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} - {% set propertyType %}{% call typeBlock metadata %}{% endset %} - static let {{propertyName}}: {{propertyType}} = {% call valueBlock data[key] metadata %} -{% endfilter %}{% endmacro %} -{% macro valueBlock value metadata %}{% filter removeNewlines:"leading" %} - {% if metadata.type == "String" %} - "{{ value }}" - {% elif metadata.type == "Optional" %} - nil - {% elif metadata.type == "Array" and value %} - [{% for value in value %} - {% call valueBlock value metadata.element.items[forloop.counter0]|default:metadata.element %} - {{ ", " if not forloop.last }} - {% endfor %}] - {% elif metadata.type == "Dictionary" %} - [{% for key,value in value %} - "{{key}}": {% call valueBlock value metadata.properties[key] %} - {{ ", " if not forloop.last }} - {% empty %} - : - {% endfor %}] - {% elif metadata.type == "Bool" %} - {% if value %}true{% else %}false{% endif %} - {% else %} - {{ value }} - {% endif %} -{% endfilter %}{% endmacro %} - -// swiftlint:disable identifier_name line_length number_separator type_body_length -{{accessModifier}} enum {{param.enumName|default:"JSONFiles"}} { - {% if files.count > 1 or param.forceFileNameEnum %} - {% for file in files %} - {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call fileBlock files.first %} - {% endif %} -} -// swiftlint:enable identifier_name line_length number_separator type_body_length -{% else %} -// No files found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/runtime-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/runtime-swift4.stencil deleted file mode 100644 index c2466c7e..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/runtime-swift4.stencil +++ /dev/null @@ -1,112 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if files %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -import Foundation - -// swiftlint:disable superfluous_disable_command -// swiftlint:disable file_length - -// MARK: - JSON Files -{% macro fileBlock file %} - {% call documentBlock file file.document %} -{% endmacro %} -{% macro documentBlock file document %} - {% set rootType %}{% call typeBlock document.metadata %}{% endset %} - {% if document.metadata.type == "Array" %} - {{accessModifier}} static let items: {{rootType}} = objectFromJSON(at: "{% call transformPath file.path %}") - {% elif document.metadata.type == "Dictionary" %} - private static let _document = JSONDocument(path: "{% call transformPath file.path %}") - - {% for key,value in document.metadata.properties %} - {{accessModifier}} {% call propertyBlock key value %} - {% endfor %} - {% else %} - {{accessModifier}} static let value: {{rootType}} = objectFromJSON(at: "{% call transformPath file.path %}") - {% endif %} -{% endmacro %} -{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %} - {% if metadata.type == "Array" %} - [{% call typeBlock metadata.element %}] - {% elif metadata.type == "Dictionary" %} - [String: Any] - {% elif metadata.type == "Optional" %} - Any? - {% else %} - {{metadata.type}} - {% endif %} -{% endfilter %}{% endmacro %} -{% macro propertyBlock key metadata %}{% filter removeNewlines:"leading" %} - {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} - {% set propertyType %}{% call typeBlock metadata %}{% endset %} - static let {{propertyName}}: {{propertyType}} = _document["{{key}}"] -{% endfilter %}{% endmacro %} -{% macro transformPath path %}{% filter removeNewlines %} - {% if param.preservePath %} - {{path}} - {% else %} - {{path|basename}} - {% endif %} -{% endfilter %}{% endmacro %} - -// swiftlint:disable identifier_name line_length type_body_length -{{accessModifier}} enum {{param.enumName|default:"JSONFiles"}} { - {% if files.count > 1 or param.forceFileNameEnum %} - {% for file in files %} - {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call fileBlock files.first %} - {% endif %} -} -// swiftlint:enable identifier_name line_length type_body_length - -// MARK: - Implementation Details - -private func objectFromJSON(at path: String) -> T { - {% if param.lookupFunction %} - guard let url = {{param.lookupFunction}}(path), - {% else %} - guard let url = {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil), - {% endif %} - let json = try? JSONSerialization.jsonObject(with: Data(contentsOf: url), options: []), - let result = json as? T else { - fatalError("Unable to load JSON at path: \(path)") - } - return result -} - -private struct JSONDocument { - let data: [String: Any] - - init(path: String) { - self.data = objectFromJSON(at: path) - } - - subscript(key: String) -> T { - guard let result = data[key] as? T else { - fatalError("Property '\(key)' is not of type \(T.self)") - } - return result - } -} -{% if not param.bundle and not param.lookupFunction %} - -// swiftlint:disable convenience_type -private final class BundleToken { - static let bundle: Bundle = { - #if SWIFT_PACKAGE - return Bundle.module - #else - return Bundle(for: BundleToken.self) - #endif - }() -} -// swiftlint:enable convenience_type -{% endif %} -{% else %} -// No files found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/runtime-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/runtime-swift5.stencil deleted file mode 100644 index c2466c7e..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/json/runtime-swift5.stencil +++ /dev/null @@ -1,112 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if files %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -import Foundation - -// swiftlint:disable superfluous_disable_command -// swiftlint:disable file_length - -// MARK: - JSON Files -{% macro fileBlock file %} - {% call documentBlock file file.document %} -{% endmacro %} -{% macro documentBlock file document %} - {% set rootType %}{% call typeBlock document.metadata %}{% endset %} - {% if document.metadata.type == "Array" %} - {{accessModifier}} static let items: {{rootType}} = objectFromJSON(at: "{% call transformPath file.path %}") - {% elif document.metadata.type == "Dictionary" %} - private static let _document = JSONDocument(path: "{% call transformPath file.path %}") - - {% for key,value in document.metadata.properties %} - {{accessModifier}} {% call propertyBlock key value %} - {% endfor %} - {% else %} - {{accessModifier}} static let value: {{rootType}} = objectFromJSON(at: "{% call transformPath file.path %}") - {% endif %} -{% endmacro %} -{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %} - {% if metadata.type == "Array" %} - [{% call typeBlock metadata.element %}] - {% elif metadata.type == "Dictionary" %} - [String: Any] - {% elif metadata.type == "Optional" %} - Any? - {% else %} - {{metadata.type}} - {% endif %} -{% endfilter %}{% endmacro %} -{% macro propertyBlock key metadata %}{% filter removeNewlines:"leading" %} - {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} - {% set propertyType %}{% call typeBlock metadata %}{% endset %} - static let {{propertyName}}: {{propertyType}} = _document["{{key}}"] -{% endfilter %}{% endmacro %} -{% macro transformPath path %}{% filter removeNewlines %} - {% if param.preservePath %} - {{path}} - {% else %} - {{path|basename}} - {% endif %} -{% endfilter %}{% endmacro %} - -// swiftlint:disable identifier_name line_length type_body_length -{{accessModifier}} enum {{param.enumName|default:"JSONFiles"}} { - {% if files.count > 1 or param.forceFileNameEnum %} - {% for file in files %} - {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call fileBlock files.first %} - {% endif %} -} -// swiftlint:enable identifier_name line_length type_body_length - -// MARK: - Implementation Details - -private func objectFromJSON(at path: String) -> T { - {% if param.lookupFunction %} - guard let url = {{param.lookupFunction}}(path), - {% else %} - guard let url = {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil), - {% endif %} - let json = try? JSONSerialization.jsonObject(with: Data(contentsOf: url), options: []), - let result = json as? T else { - fatalError("Unable to load JSON at path: \(path)") - } - return result -} - -private struct JSONDocument { - let data: [String: Any] - - init(path: String) { - self.data = objectFromJSON(at: path) - } - - subscript(key: String) -> T { - guard let result = data[key] as? T else { - fatalError("Property '\(key)' is not of type \(T.self)") - } - return result - } -} -{% if not param.bundle and not param.lookupFunction %} - -// swiftlint:disable convenience_type -private final class BundleToken { - static let bundle: Bundle = { - #if SWIFT_PACKAGE - return Bundle.module - #else - return Bundle(for: BundleToken.self) - #endif - }() -} -// swiftlint:enable convenience_type -{% endif %} -{% else %} -// No files found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/inline-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/inline-swift4.stencil deleted file mode 100644 index c8e88310..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/inline-swift4.stencil +++ /dev/null @@ -1,82 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if files %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -import Foundation - -// swiftlint:disable superfluous_disable_command -// swiftlint:disable file_length - -// MARK: - Plist Files -{% macro fileBlock file %} - {% call documentBlock file file.document %} -{% endmacro %} -{% macro documentBlock file document %} - {% set rootType %}{% call typeBlock document.metadata %}{% endset %} - {% if document.metadata.type == "Array" %} - {{accessModifier}} static let items: {{rootType}} = {% call valueBlock document.data document.metadata %} - {% elif document.metadata.type == "Dictionary" %} - {% for key,value in document.metadata.properties %} - {{accessModifier}} {% call propertyBlock key value document.data %} - {% endfor %} - {% else %} - {{accessModifier}} static let value: {{rootType}} = {% call valueBlock document.data document.metadata %} - {% endif %} -{% endmacro %} -{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %} - {% if metadata.type == "Array" %} - [{% call typeBlock metadata.element %}] - {% elif metadata.type == "Dictionary" %} - [String: Any] - {% else %} - {{metadata.type}} - {% endif %} -{% endfilter %}{% endmacro %} -{% macro propertyBlock key metadata data %}{% filter removeNewlines:"leading" %} - {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} - {% set propertyType %}{% call typeBlock metadata %}{% endset %} - static let {{propertyName}}: {{propertyType}} = {% call valueBlock data[key] metadata %} -{% endfilter %}{% endmacro %} -{% macro valueBlock value metadata %}{% filter removeNewlines:"leading" %} - {% if metadata.type == "String" %} - "{{ value }}" - {% elif metadata.type == "Date" %} - Date(timeIntervalSinceReferenceDate: {{ value.timeIntervalSinceReferenceDate }}) - {% elif metadata.type == "Optional" %} - nil - {% elif metadata.type == "Array" and value %} - [{% for value in value %} - {% call valueBlock value metadata.element.items[forloop.counter0]|default:metadata.element %} - {{ ", " if not forloop.last }} - {% endfor %}] - {% elif metadata.type == "Dictionary" %} - [{% for key,value in value %} - "{{key}}": {% call valueBlock value metadata.properties[key] %} - {{ ", " if not forloop.last }} - {% empty %} - : - {% endfor %}] - {% elif metadata.type == "Bool" %} - {% if value %}true{% else %}false{% endif %} - {% else %} - {{ value }} - {% endif %} -{% endfilter %}{% endmacro %} - -// swiftlint:disable identifier_name line_length number_separator type_body_length -{{accessModifier}} enum {{param.enumName|default:"PlistFiles"}} { - {% if files.count > 1 or param.forceFileNameEnum %} - {% for file in files %} - {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call fileBlock files.first %} - {% endif %} -} -// swiftlint:enable identifier_name line_length number_separator type_body_length -{% else %} -// No files found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/inline-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/inline-swift5.stencil deleted file mode 100644 index c8e88310..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/inline-swift5.stencil +++ /dev/null @@ -1,82 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if files %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -import Foundation - -// swiftlint:disable superfluous_disable_command -// swiftlint:disable file_length - -// MARK: - Plist Files -{% macro fileBlock file %} - {% call documentBlock file file.document %} -{% endmacro %} -{% macro documentBlock file document %} - {% set rootType %}{% call typeBlock document.metadata %}{% endset %} - {% if document.metadata.type == "Array" %} - {{accessModifier}} static let items: {{rootType}} = {% call valueBlock document.data document.metadata %} - {% elif document.metadata.type == "Dictionary" %} - {% for key,value in document.metadata.properties %} - {{accessModifier}} {% call propertyBlock key value document.data %} - {% endfor %} - {% else %} - {{accessModifier}} static let value: {{rootType}} = {% call valueBlock document.data document.metadata %} - {% endif %} -{% endmacro %} -{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %} - {% if metadata.type == "Array" %} - [{% call typeBlock metadata.element %}] - {% elif metadata.type == "Dictionary" %} - [String: Any] - {% else %} - {{metadata.type}} - {% endif %} -{% endfilter %}{% endmacro %} -{% macro propertyBlock key metadata data %}{% filter removeNewlines:"leading" %} - {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} - {% set propertyType %}{% call typeBlock metadata %}{% endset %} - static let {{propertyName}}: {{propertyType}} = {% call valueBlock data[key] metadata %} -{% endfilter %}{% endmacro %} -{% macro valueBlock value metadata %}{% filter removeNewlines:"leading" %} - {% if metadata.type == "String" %} - "{{ value }}" - {% elif metadata.type == "Date" %} - Date(timeIntervalSinceReferenceDate: {{ value.timeIntervalSinceReferenceDate }}) - {% elif metadata.type == "Optional" %} - nil - {% elif metadata.type == "Array" and value %} - [{% for value in value %} - {% call valueBlock value metadata.element.items[forloop.counter0]|default:metadata.element %} - {{ ", " if not forloop.last }} - {% endfor %}] - {% elif metadata.type == "Dictionary" %} - [{% for key,value in value %} - "{{key}}": {% call valueBlock value metadata.properties[key] %} - {{ ", " if not forloop.last }} - {% empty %} - : - {% endfor %}] - {% elif metadata.type == "Bool" %} - {% if value %}true{% else %}false{% endif %} - {% else %} - {{ value }} - {% endif %} -{% endfilter %}{% endmacro %} - -// swiftlint:disable identifier_name line_length number_separator type_body_length -{{accessModifier}} enum {{param.enumName|default:"PlistFiles"}} { - {% if files.count > 1 or param.forceFileNameEnum %} - {% for file in files %} - {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call fileBlock files.first %} - {% endif %} -} -// swiftlint:enable identifier_name line_length number_separator type_body_length -{% else %} -// No files found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/runtime-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/runtime-swift4.stencil deleted file mode 100644 index a498a8f2..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/runtime-swift4.stencil +++ /dev/null @@ -1,117 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if files %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -import Foundation - -// swiftlint:disable superfluous_disable_command -// swiftlint:disable file_length - -// MARK: - Plist Files -{% macro fileBlock file %} - {% call documentBlock file file.document %} -{% endmacro %} -{% macro documentBlock file document %} - {% set rootType %}{% call typeBlock document.metadata %}{% endset %} - {% if document.metadata.type == "Array" %} - {{accessModifier}} static let items: {{rootType}} = arrayFromPlist(at: "{% call transformPath file.path %}") - {% elif document.metadata.type == "Dictionary" %} - private static let _document = PlistDocument(path: "{% call transformPath file.path %}") - - {% for key,value in document.metadata.properties %} - {{accessModifier}} {% call propertyBlock key value %} - {% endfor %} - {% else %} - // Unsupported root type `{{rootType}}` - {% endif %} -{% endmacro %} -{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %} - {% if metadata.type == "Array" %} - [{% call typeBlock metadata.element %}] - {% elif metadata.type == "Dictionary" %} - [String: Any] - {% else %} - {{metadata.type}} - {% endif %} -{% endfilter %}{% endmacro %} -{% macro propertyBlock key metadata %}{% filter removeNewlines:"leading" %} - {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} - {% set propertyType %}{% call typeBlock metadata %}{% endset %} - static let {{propertyName}}: {{propertyType}} = _document["{{key}}"] -{% endfilter %}{% endmacro %} -{% macro transformPath path %}{% filter removeNewlines %} - {% if param.preservePath %} - {{path}} - {% else %} - {{path|basename}} - {% endif %} -{% endfilter %}{% endmacro %} - -// swiftlint:disable identifier_name line_length type_body_length -{{accessModifier}} enum {{param.enumName|default:"PlistFiles"}} { - {% if files.count > 1 or param.forceFileNameEnum %} - {% for file in files %} - {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call fileBlock files.first %} - {% endif %} -} -// swiftlint:enable identifier_name line_length type_body_length - -// MARK: - Implementation Details - -private func arrayFromPlist(at path: String) -> [T] { - {% if param.lookupFunction %} - guard let url = {{param.lookupFunction}}(path), - {% else %} - guard let url = {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil), - {% endif %} - let data = NSArray(contentsOf: url) as? [T] else { - fatalError("Unable to load PLIST at path: \(path)") - } - return data -} - -private struct PlistDocument { - let data: [String: Any] - - init(path: String) { - {% if param.lookupFunction %} - guard let url = {{param.lookupFunction}}(path), - {% else %} - guard let url = {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil), - {% endif %} - let data = NSDictionary(contentsOf: url) as? [String: Any] else { - fatalError("Unable to load PLIST at path: \(path)") - } - self.data = data - } - - subscript(key: String) -> T { - guard let result = data[key] as? T else { - fatalError("Property '\(key)' is not of type \(T.self)") - } - return result - } -} -{% if not param.bundle and not param.lookupFunction %} - -// swiftlint:disable convenience_type -private final class BundleToken { - static let bundle: Bundle = { - #if SWIFT_PACKAGE - return Bundle.module - #else - return Bundle(for: BundleToken.self) - #endif - }() -} -// swiftlint:enable convenience_type -{% endif %} -{% else %} -// No files found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/runtime-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/runtime-swift5.stencil deleted file mode 100644 index a498a8f2..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/plist/runtime-swift5.stencil +++ /dev/null @@ -1,117 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if files %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -import Foundation - -// swiftlint:disable superfluous_disable_command -// swiftlint:disable file_length - -// MARK: - Plist Files -{% macro fileBlock file %} - {% call documentBlock file file.document %} -{% endmacro %} -{% macro documentBlock file document %} - {% set rootType %}{% call typeBlock document.metadata %}{% endset %} - {% if document.metadata.type == "Array" %} - {{accessModifier}} static let items: {{rootType}} = arrayFromPlist(at: "{% call transformPath file.path %}") - {% elif document.metadata.type == "Dictionary" %} - private static let _document = PlistDocument(path: "{% call transformPath file.path %}") - - {% for key,value in document.metadata.properties %} - {{accessModifier}} {% call propertyBlock key value %} - {% endfor %} - {% else %} - // Unsupported root type `{{rootType}}` - {% endif %} -{% endmacro %} -{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %} - {% if metadata.type == "Array" %} - [{% call typeBlock metadata.element %}] - {% elif metadata.type == "Dictionary" %} - [String: Any] - {% else %} - {{metadata.type}} - {% endif %} -{% endfilter %}{% endmacro %} -{% macro propertyBlock key metadata %}{% filter removeNewlines:"leading" %} - {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} - {% set propertyType %}{% call typeBlock metadata %}{% endset %} - static let {{propertyName}}: {{propertyType}} = _document["{{key}}"] -{% endfilter %}{% endmacro %} -{% macro transformPath path %}{% filter removeNewlines %} - {% if param.preservePath %} - {{path}} - {% else %} - {{path|basename}} - {% endif %} -{% endfilter %}{% endmacro %} - -// swiftlint:disable identifier_name line_length type_body_length -{{accessModifier}} enum {{param.enumName|default:"PlistFiles"}} { - {% if files.count > 1 or param.forceFileNameEnum %} - {% for file in files %} - {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call fileBlock files.first %} - {% endif %} -} -// swiftlint:enable identifier_name line_length type_body_length - -// MARK: - Implementation Details - -private func arrayFromPlist(at path: String) -> [T] { - {% if param.lookupFunction %} - guard let url = {{param.lookupFunction}}(path), - {% else %} - guard let url = {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil), - {% endif %} - let data = NSArray(contentsOf: url) as? [T] else { - fatalError("Unable to load PLIST at path: \(path)") - } - return data -} - -private struct PlistDocument { - let data: [String: Any] - - init(path: String) { - {% if param.lookupFunction %} - guard let url = {{param.lookupFunction}}(path), - {% else %} - guard let url = {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil), - {% endif %} - let data = NSDictionary(contentsOf: url) as? [String: Any] else { - fatalError("Unable to load PLIST at path: \(path)") - } - self.data = data - } - - subscript(key: String) -> T { - guard let result = data[key] as? T else { - fatalError("Property '\(key)' is not of type \(T.self)") - } - return result - } -} -{% if not param.bundle and not param.lookupFunction %} - -// swiftlint:disable convenience_type -private final class BundleToken { - static let bundle: Bundle = { - #if SWIFT_PACKAGE - return Bundle.module - #else - return Bundle(for: BundleToken.self) - #endif - }() -} -// swiftlint:enable convenience_type -{% endif %} -{% else %} -// No files found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/flat-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/flat-swift4.stencil deleted file mode 100644 index 5bb4a128..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/flat-swift4.stencil +++ /dev/null @@ -1,99 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if tables.count > 0 %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -import Foundation - -// swiftlint:disable superfluous_disable_command file_length implicit_return - -// MARK: - Strings - -{% macro parametersBlock types %}{% filter removeNewlines:"leading" %} - {% for type in types %} - {% if type == "String" %} - _ p{{forloop.counter}}: Any - {% else %} - _ p{{forloop.counter}}: {{type}} - {% endif %} - {{ ", " if not forloop.last }} - {% endfor %} -{% endfilter %}{% endmacro %} -{% macro argumentsBlock types %}{% filter removeNewlines:"leading" %} - {% for type in types %} - {% if type == "String" %} - String(describing: p{{forloop.counter}}) - {% elif type == "UnsafeRawPointer" %} - Int(bitPattern: p{{forloop.counter}}) - {% else %} - p{{forloop.counter}} - {% endif %} - {{ ", " if not forloop.last }} - {% endfor %} -{% endfilter %}{% endmacro %} -{% macro recursiveBlock table item %} - {% for string in item.strings %} - {% if not param.noComments %} - {% for line in string.translation|split:"\n" %} - /// {{line}} - {% endfor %} - {% endif %} - {% if string.types %} - {{accessModifier}} static func {{string.key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}({% call parametersBlock string.types %}) -> String { - return {{enumName}}.tr("{{table}}", "{{string.key}}", {% call argumentsBlock string.types %}) - } - {% elif param.lookupFunction %} - {# custom localization function is mostly used for in-app lang selection, so we want the loc to be recomputed at each call for those (hence the computed var) #} - {{accessModifier}} static var {{string.key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}: String { return {{enumName}}.tr("{{table}}", "{{string.key}}") } - {% else %} - {{accessModifier}} static let {{string.key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{enumName}}.tr("{{table}}", "{{string.key}}") - {% endif %} - {% endfor %} - {% for child in item.children %} - {% call recursiveBlock table child %} - {% endfor %} -{% endmacro %} -// swiftlint:disable function_parameter_count identifier_name line_length type_body_length -{% set enumName %}{{param.enumName|default:"L10n"}}{% endset %} -{{accessModifier}} enum {{enumName}} { - {% if tables.count > 1 or param.forceFileNameEnum %} - {% for table in tables %} - {{accessModifier}} enum {{table.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call recursiveBlock table.name table.levels %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call recursiveBlock tables.first.name tables.first.levels %} - {% endif %} -} -// swiftlint:enable function_parameter_count identifier_name line_length type_body_length - -// MARK: - Implementation Details - -extension {{enumName}} { - private static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String { - {% if param.lookupFunction %} - let format = {{ param.lookupFunction }}(key, table) - {% else %} - let format = {{param.bundle|default:"BundleToken.bundle"}}.localizedString(forKey: key, value: nil, table: table) - {% endif %} - return String(format: format, locale: Locale.current, arguments: args) - } -} -{% if not param.bundle and not param.lookupFunction %} - -// swiftlint:disable convenience_type -private final class BundleToken { - static let bundle: Bundle = { - #if SWIFT_PACKAGE - return Bundle.module - #else - return Bundle(for: BundleToken.self) - #endif - }() -} -// swiftlint:enable convenience_type -{% endif %} -{% else %} -// No string found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/flat-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/flat-swift5.stencil deleted file mode 100644 index 5bb4a128..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/flat-swift5.stencil +++ /dev/null @@ -1,99 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if tables.count > 0 %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -import Foundation - -// swiftlint:disable superfluous_disable_command file_length implicit_return - -// MARK: - Strings - -{% macro parametersBlock types %}{% filter removeNewlines:"leading" %} - {% for type in types %} - {% if type == "String" %} - _ p{{forloop.counter}}: Any - {% else %} - _ p{{forloop.counter}}: {{type}} - {% endif %} - {{ ", " if not forloop.last }} - {% endfor %} -{% endfilter %}{% endmacro %} -{% macro argumentsBlock types %}{% filter removeNewlines:"leading" %} - {% for type in types %} - {% if type == "String" %} - String(describing: p{{forloop.counter}}) - {% elif type == "UnsafeRawPointer" %} - Int(bitPattern: p{{forloop.counter}}) - {% else %} - p{{forloop.counter}} - {% endif %} - {{ ", " if not forloop.last }} - {% endfor %} -{% endfilter %}{% endmacro %} -{% macro recursiveBlock table item %} - {% for string in item.strings %} - {% if not param.noComments %} - {% for line in string.translation|split:"\n" %} - /// {{line}} - {% endfor %} - {% endif %} - {% if string.types %} - {{accessModifier}} static func {{string.key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}({% call parametersBlock string.types %}) -> String { - return {{enumName}}.tr("{{table}}", "{{string.key}}", {% call argumentsBlock string.types %}) - } - {% elif param.lookupFunction %} - {# custom localization function is mostly used for in-app lang selection, so we want the loc to be recomputed at each call for those (hence the computed var) #} - {{accessModifier}} static var {{string.key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}: String { return {{enumName}}.tr("{{table}}", "{{string.key}}") } - {% else %} - {{accessModifier}} static let {{string.key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{enumName}}.tr("{{table}}", "{{string.key}}") - {% endif %} - {% endfor %} - {% for child in item.children %} - {% call recursiveBlock table child %} - {% endfor %} -{% endmacro %} -// swiftlint:disable function_parameter_count identifier_name line_length type_body_length -{% set enumName %}{{param.enumName|default:"L10n"}}{% endset %} -{{accessModifier}} enum {{enumName}} { - {% if tables.count > 1 or param.forceFileNameEnum %} - {% for table in tables %} - {{accessModifier}} enum {{table.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call recursiveBlock table.name table.levels %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call recursiveBlock tables.first.name tables.first.levels %} - {% endif %} -} -// swiftlint:enable function_parameter_count identifier_name line_length type_body_length - -// MARK: - Implementation Details - -extension {{enumName}} { - private static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String { - {% if param.lookupFunction %} - let format = {{ param.lookupFunction }}(key, table) - {% else %} - let format = {{param.bundle|default:"BundleToken.bundle"}}.localizedString(forKey: key, value: nil, table: table) - {% endif %} - return String(format: format, locale: Locale.current, arguments: args) - } -} -{% if not param.bundle and not param.lookupFunction %} - -// swiftlint:disable convenience_type -private final class BundleToken { - static let bundle: Bundle = { - #if SWIFT_PACKAGE - return Bundle.module - #else - return Bundle(for: BundleToken.self) - #endif - }() -} -// swiftlint:enable convenience_type -{% endif %} -{% else %} -// No string found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/objc-h.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/objc-h.stencil deleted file mode 100644 index 7c502917..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/objc-h.stencil +++ /dev/null @@ -1,68 +0,0 @@ -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if tables.count > 0 %} -#import - -NS_ASSUME_NONNULL_BEGIN - -{% macro parametersBlock types %}{% filter removeNewlines:"leading" %} - {% for type in types %} - ({% call paramTranslate type %})p{{ forloop.counter }}{{ " :" if not forloop.last }} - {% endfor %} -{% endfilter %}{% endmacro %} -{% macro argumentsBlock types %}{% filter removeNewlines:"leading" %} - {% for type in types %} - p{{forloop.counter}}{{ ", " if not forloop.last }} - {% endfor %} -{% endfilter %}{% endmacro %} -{% macro paramTranslate swiftType %} - {% if swiftType == "Any" %} - id - {% elif swiftType == "CChar" %} - char - {% elif swiftType == "Float" %} - float - {% elif swiftType == "Int" %} - NSInteger - {% elif swiftType == "String" %} - id - {% elif swiftType == "UnsafePointer" %} - char* - {% elif swiftType == "UnsafeRawPointer" %} - void* - {% else %} - objc-h.stencil is missing '{{swiftType}}' - {% endif %} -{% endmacro %} -{% macro emitOneMethod table item %} -{% for string in item.strings %} -{% if not param.noComments %} -{% for line in string.translation|split:"\n" %} -/// {{line}} -{% endfor %} -{% endif %} -{% if string.types %} - {% if string.types.count == 1 %} -+ (NSString*){{string.key|swiftIdentifier:"pretty"|lowerFirstWord}}WithValue:{% call parametersBlock string.types %}; - {% else %} -+ (NSString*){{string.key|swiftIdentifier:"pretty"|lowerFirstWord}}WithValues:{% call parametersBlock string.types %}; - {% endif %} -{% else %} -+ (NSString*){{string.key|swiftIdentifier:"pretty"|lowerFirstWord}}; -{% endif %} -{% endfor %} -{% for child in item.children %} -{% call emitOneMethod table child %} -{% endfor %} -{% endmacro %} -{% for table in tables %} -@interface {{ table.name }} : NSObject - {% call emitOneMethod table.name table.levels %} -@end - -{% endfor %} - -NS_ASSUME_NONNULL_END -{% else %} -// No strings found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/objc-m.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/objc-m.stencil deleted file mode 100644 index 1f154b59..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/objc-m.stencil +++ /dev/null @@ -1,90 +0,0 @@ -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if tables.count > 0 %} -#import "{{ param.headerName|default:"Localizable.h" }}" -{% if not param.bundle %} - -@interface BundleToken : NSObject -@end - -@implementation BundleToken -@end -{% endif %} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wformat-security" - -static NSString* tr(NSString *tableName, NSString *key, ...) { - NSBundle *bundle = {{param.bundle|default:"[NSBundle bundleForClass:BundleToken.class]"}}; - NSString *format = [bundle localizedStringForKey:key value:nil table:tableName]; - NSLocale *locale = [NSLocale currentLocale]; - - va_list args; - va_start(args, key); - NSString *result = [[NSString alloc] initWithFormat:format locale:locale arguments:args]; - va_end(args); - - return result; -}; -#pragma clang diagnostic pop - -{% macro parametersBlock types %}{% filter removeNewlines:"leading" %} - {% for type in types %} - ({% call paramTranslate type %})p{{ forloop.counter }}{{ " :" if not forloop.last }} - {% endfor %} -{% endfilter %}{% endmacro %} -{% macro argumentsBlock types %}{% filter removeNewlines:"leading" %} - {% for type in types %} - p{{forloop.counter}}{{ ", " if not forloop.last }} - {% endfor %} -{% endfilter %}{% endmacro %} -{% macro paramTranslate swiftType %} - {% if swiftType == "Any" %} - id - {% elif swiftType == "CChar" %} - char - {% elif swiftType == "Float" %} - float - {% elif swiftType == "Int" %} - NSInteger - {% elif swiftType == "String" %} - id - {% elif swiftType == "UnsafePointer" %} - char* - {% elif swiftType == "UnsafeRawPointer" %} - void* - {% else %} - objc-m.stencil is missing '{{swiftType}}' - {% endif %} -{% endmacro %} -{% macro tableContents table item %} - {% for string in item.strings %} - {% if string.types %} - {% if string.types.count == 1 %} -+ (NSString*){{string.key|swiftIdentifier:"pretty"|lowerFirstWord}}WithValue:{% call parametersBlock string.types %} - {% else %} -+ (NSString*){{string.key|swiftIdentifier:"pretty"|lowerFirstWord}}WithValues:{% call parametersBlock string.types %} - {% endif %} -{ - return tr(@"{{table}}", @"{{string.key}}", {% call argumentsBlock string.types %}); -} -{% else %} -+ (NSString*){{string.key|swiftIdentifier:"pretty"|lowerFirstWord}} { - return tr(@"{{table}}", @"{{string.key}}"); -} - {% endif %} - {% endfor %} - {% for child in item.children %} - {% call tableContents table child %} - {% endfor %} -{% endmacro %} -{% for table in tables %} - {% set tableName %}{{table.name|default:"Localized"}}{% endset %} -@implementation {{ tableName }} : NSObject - {% call tableContents table.name table.levels %} -@end - -{% endfor %} -{% else %} -// No strings found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/structured-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/structured-swift4.stencil deleted file mode 100644 index f809bc24..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/structured-swift4.stencil +++ /dev/null @@ -1,104 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if tables.count > 0 %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -import Foundation - -// swiftlint:disable superfluous_disable_command file_length implicit_return - -// MARK: - Strings - -{% macro parametersBlock types %}{% filter removeNewlines:"leading" %} - {% for type in types %} - {% if type == "String" %} - _ p{{forloop.counter}}: Any - {% else %} - _ p{{forloop.counter}}: {{type}} - {% endif %} - {{ ", " if not forloop.last }} - {% endfor %} -{% endfilter %}{% endmacro %} -{% macro argumentsBlock types %}{% filter removeNewlines:"leading" %} - {% for type in types %} - {% if type == "String" %} - String(describing: p{{forloop.counter}}) - {% elif type == "UnsafeRawPointer" %} - Int(bitPattern: p{{forloop.counter}}) - {% else %} - p{{forloop.counter}} - {% endif %} - {{ ", " if not forloop.last }} - {% endfor %} -{% endfilter %}{% endmacro %} -{% macro recursiveBlock table item %} - {% for string in item.strings %} - {% if not param.noComments %} - {% for line in string.translation|split:"\n" %} - /// {{line}} - {% endfor %} - {% endif %} - {% if string.types %} - {{accessModifier}} static func {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}({% call parametersBlock string.types %}) -> String { - return {{enumName}}.tr("{{table}}", "{{string.key}}", {% call argumentsBlock string.types %}) - } - {% elif param.lookupFunction %} - {# custom localization function is mostly used for in-app lang selection, so we want the loc to be recomputed at each call for those (hence the computed var) #} - {{accessModifier}} static var {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}: String { return {{enumName}}.tr("{{table}}", "{{string.key}}") } - {% else %} - {{accessModifier}} static let {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{enumName}}.tr("{{table}}", "{{string.key}}") - {% endif %} - {% endfor %} - {% for child in item.children %} - - {{accessModifier}} enum {{child.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call recursiveBlock table child %}{% endfilter %} - } - {% endfor %} -{% endmacro %} -// swiftlint:disable explicit_type_interface function_parameter_count identifier_name line_length -// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces -{% set enumName %}{{param.enumName|default:"L10n"}}{% endset %} -{{accessModifier}} enum {{enumName}} { - {% if tables.count > 1 or param.forceFileNameEnum %} - {% for table in tables %} - {{accessModifier}} enum {{table.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call recursiveBlock table.name table.levels %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call recursiveBlock tables.first.name tables.first.levels %} - {% endif %} -} -// swiftlint:enable explicit_type_interface function_parameter_count identifier_name line_length -// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces - -// MARK: - Implementation Details - -extension {{enumName}} { - private static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String { - {% if param.lookupFunction %} - let format = {{ param.lookupFunction }}(key, table) - {% else %} - let format = {{param.bundle|default:"BundleToken.bundle"}}.localizedString(forKey: key, value: nil, table: table) - {% endif %} - return String(format: format, locale: Locale.current, arguments: args) - } -} -{% if not param.bundle and not param.lookupFunction %} - -// swiftlint:disable convenience_type -private final class BundleToken { - static let bundle: Bundle = { - #if SWIFT_PACKAGE - return Bundle.module - #else - return Bundle(for: BundleToken.self) - #endif - }() -} -// swiftlint:enable convenience_type -{% endif %} -{% else %} -// No string found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/structured-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/structured-swift5.stencil deleted file mode 100644 index f809bc24..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/strings/structured-swift5.stencil +++ /dev/null @@ -1,104 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if tables.count > 0 %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -import Foundation - -// swiftlint:disable superfluous_disable_command file_length implicit_return - -// MARK: - Strings - -{% macro parametersBlock types %}{% filter removeNewlines:"leading" %} - {% for type in types %} - {% if type == "String" %} - _ p{{forloop.counter}}: Any - {% else %} - _ p{{forloop.counter}}: {{type}} - {% endif %} - {{ ", " if not forloop.last }} - {% endfor %} -{% endfilter %}{% endmacro %} -{% macro argumentsBlock types %}{% filter removeNewlines:"leading" %} - {% for type in types %} - {% if type == "String" %} - String(describing: p{{forloop.counter}}) - {% elif type == "UnsafeRawPointer" %} - Int(bitPattern: p{{forloop.counter}}) - {% else %} - p{{forloop.counter}} - {% endif %} - {{ ", " if not forloop.last }} - {% endfor %} -{% endfilter %}{% endmacro %} -{% macro recursiveBlock table item %} - {% for string in item.strings %} - {% if not param.noComments %} - {% for line in string.translation|split:"\n" %} - /// {{line}} - {% endfor %} - {% endif %} - {% if string.types %} - {{accessModifier}} static func {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}({% call parametersBlock string.types %}) -> String { - return {{enumName}}.tr("{{table}}", "{{string.key}}", {% call argumentsBlock string.types %}) - } - {% elif param.lookupFunction %} - {# custom localization function is mostly used for in-app lang selection, so we want the loc to be recomputed at each call for those (hence the computed var) #} - {{accessModifier}} static var {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}: String { return {{enumName}}.tr("{{table}}", "{{string.key}}") } - {% else %} - {{accessModifier}} static let {{string.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{enumName}}.tr("{{table}}", "{{string.key}}") - {% endif %} - {% endfor %} - {% for child in item.children %} - - {{accessModifier}} enum {{child.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call recursiveBlock table child %}{% endfilter %} - } - {% endfor %} -{% endmacro %} -// swiftlint:disable explicit_type_interface function_parameter_count identifier_name line_length -// swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces -{% set enumName %}{{param.enumName|default:"L10n"}}{% endset %} -{{accessModifier}} enum {{enumName}} { - {% if tables.count > 1 or param.forceFileNameEnum %} - {% for table in tables %} - {{accessModifier}} enum {{table.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call recursiveBlock table.name table.levels %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call recursiveBlock tables.first.name tables.first.levels %} - {% endif %} -} -// swiftlint:enable explicit_type_interface function_parameter_count identifier_name line_length -// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces - -// MARK: - Implementation Details - -extension {{enumName}} { - private static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String { - {% if param.lookupFunction %} - let format = {{ param.lookupFunction }}(key, table) - {% else %} - let format = {{param.bundle|default:"BundleToken.bundle"}}.localizedString(forKey: key, value: nil, table: table) - {% endif %} - return String(format: format, locale: Locale.current, arguments: args) - } -} -{% if not param.bundle and not param.lookupFunction %} - -// swiftlint:disable convenience_type -private final class BundleToken { - static let bundle: Bundle = { - #if SWIFT_PACKAGE - return Bundle.module - #else - return Bundle(for: BundleToken.self) - #endif - }() -} -// swiftlint:enable convenience_type -{% endif %} -{% else %} -// No string found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/xcassets/swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/xcassets/swift4.stencil deleted file mode 100644 index c8565931..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/xcassets/swift4.stencil +++ /dev/null @@ -1,329 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if catalogs %} -{% set enumName %}{{param.enumName|default:"Asset"}}{% endset %} -{% set arResourceGroupType %}{{param.arResourceGroupTypeName|default:"ARResourceGroupAsset"}}{% endset %} -{% set colorType %}{{param.colorTypeName|default:"ColorAsset"}}{% endset %} -{% set dataType %}{{param.dataTypeName|default:"DataAsset"}}{% endset %} -{% set imageType %}{{param.imageTypeName|default:"ImageAsset"}}{% endset %} -{% set symbolType %}{{param.symbolTypeName|default:"SymbolAsset"}}{% endset %} -{% set forceNamespaces %}{{param.forceProvidesNamespaces|default:"false"}}{% endset %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -#if os(macOS) - import AppKit -#elseif os(iOS) -{% if resourceCount.arresourcegroup > 0 %} - import ARKit -{% endif %} - import UIKit -#elseif os(tvOS) || os(watchOS) - import UIKit -#endif - -// Deprecated typealiases -{% if resourceCount.color > 0 %} -@available(*, deprecated, renamed: "{{colorType}}.Color", message: "This typealias will be removed in SwiftGen 7.0") -{{accessModifier}} typealias {{param.colorAliasName|default:"AssetColorTypeAlias"}} = {{colorType}}.Color -{% endif %} -{% if resourceCount.image > 0 %} -@available(*, deprecated, renamed: "{{imageType}}.Image", message: "This typealias will be removed in SwiftGen 7.0") -{{accessModifier}} typealias {{param.imageAliasName|default:"AssetImageTypeAlias"}} = {{imageType}}.Image -{% endif %} - -// swiftlint:disable superfluous_disable_command file_length implicit_return - -// MARK: - Asset Catalogs - -{% macro enumBlock assets %} - {% call casesBlock assets %} - {% if param.allValues %} - - // swiftlint:disable trailing_comma - {% if resourceCount.arresourcegroup > 0 %} - {{accessModifier}} static let allResourceGroups: [{{arResourceGroupType}}] = [ - {% filter indent:2 %}{% call allValuesBlock assets "arresourcegroup" "" %}{% endfilter %} - ] - {% endif %} - {% if resourceCount.color > 0 %} - {{accessModifier}} static let allColors: [{{colorType}}] = [ - {% filter indent:2 %}{% call allValuesBlock assets "color" "" %}{% endfilter %} - ] - {% endif %} - {% if resourceCount.data > 0 %} - {{accessModifier}} static let allDataAssets: [{{dataType}}] = [ - {% filter indent:2 %}{% call allValuesBlock assets "data" "" %}{% endfilter %} - ] - {% endif %} - {% if resourceCount.image > 0 %} - {{accessModifier}} static let allImages: [{{imageType}}] = [ - {% filter indent:2 %}{% call allValuesBlock assets "image" "" %}{% endfilter %} - ] - {% endif %} - {% if resourceCount.symbol > 0 %} - {{accessModifier}} static let allSymbols: [{{symbolType}}] = [ - {% filter indent:2 %}{% call allValuesBlock assets "symbol" "" %}{% endfilter %} - ] - {% endif %} - // swiftlint:enable trailing_comma - {% endif %} -{% endmacro %} -{% macro casesBlock assets %} - {% for asset in assets %} - {% if asset.type == "arresourcegroup" %} - {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{arResourceGroupType}}(name: "{{asset.value}}") - {% elif asset.type == "color" %} - {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{colorType}}(name: "{{asset.value}}") - {% elif asset.type == "data" %} - {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{dataType}}(name: "{{asset.value}}") - {% elif asset.type == "image" %} - {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{imageType}}(name: "{{asset.value}}") - {% elif asset.type == "symbol" %} - {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{symbolType}}(name: "{{asset.value}}") - {% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %} - {{accessModifier}} enum {{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call casesBlock asset.items %}{% endfilter %} - } - {% elif asset.items %} - {% call casesBlock asset.items %} - {% endif %} - {% endfor %} -{% endmacro %} -{% macro allValuesBlock assets filter prefix %} - {% for asset in assets %} - {% if asset.type == filter %} - {{prefix}}{{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}, - {% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %} - {% set prefix2 %}{{prefix}}{{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}.{% endset %} - {% call allValuesBlock asset.items filter prefix2 %} - {% elif asset.items %} - {% call allValuesBlock asset.items filter prefix %} - {% endif %} - {% endfor %} -{% endmacro %} -// swiftlint:disable identifier_name line_length nesting type_body_length type_name -{{accessModifier}} enum {{enumName}} { - {% if catalogs.count > 1 or param.forceFileNameEnum %} - {% for catalog in catalogs %} - {{accessModifier}} enum {{catalog.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call enumBlock catalog.assets %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call enumBlock catalogs.first.assets %} - {% endif %} -} -// swiftlint:enable identifier_name line_length nesting type_body_length type_name - -// MARK: - Implementation Details -{% if resourceCount.arresourcegroup > 0 %} - -{{accessModifier}} struct {{arResourceGroupType}} { - {{accessModifier}} fileprivate(set) var name: String - - #if os(iOS) - @available(iOS 11.3, *) - {{accessModifier}} var referenceImages: Set { - return ARReferenceImage.referenceImages(in: self) - } - - @available(iOS 12.0, *) - {{accessModifier}} var referenceObjects: Set { - return ARReferenceObject.referenceObjects(in: self) - } - #endif -} - -#if os(iOS) -@available(iOS 11.3, *) -{{accessModifier}} extension ARReferenceImage { - static func referenceImages(in asset: {{arResourceGroupType}}) -> Set { - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - return referenceImages(inGroupNamed: asset.name, bundle: bundle) ?? Set() - } -} - -@available(iOS 12.0, *) -{{accessModifier}} extension ARReferenceObject { - static func referenceObjects(in asset: {{arResourceGroupType}}) -> Set { - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - return referenceObjects(inGroupNamed: asset.name, bundle: bundle) ?? Set() - } -} -#endif -{% endif %} -{% if resourceCount.color > 0 %} - -{{accessModifier}} final class {{colorType}} { - {{accessModifier}} fileprivate(set) var name: String - - #if os(macOS) - {{accessModifier}} typealias Color = NSColor - #elseif os(iOS) || os(tvOS) || os(watchOS) - {{accessModifier}} typealias Color = UIColor - #endif - - @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *) - {{accessModifier}} private(set) lazy var color: Color = Color(asset: self) - - #if os(iOS) || os(tvOS) - @available(iOS 11.0, tvOS 11.0, *) - {{accessModifier}} func color(compatibleWith traitCollection: UITraitCollection) -> Color { - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - guard let color = Color(named: name, in: bundle, compatibleWith: traitCollection) else { - fatalError("Unable to load color asset named \(name).") - } - return color - } - #endif - - fileprivate init(name: String) { - self.name = name - } -} - -{{accessModifier}} extension {{colorType}}.Color { - @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *) - convenience init!(asset: {{colorType}}) { - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - #if os(iOS) || os(tvOS) - self.init(named: asset.name, in: bundle, compatibleWith: nil) - #elseif os(macOS) - self.init(named: NSColor.Name(asset.name), bundle: bundle) - #elseif os(watchOS) - self.init(named: asset.name) - #endif - } -} -{% endif %} -{% if resourceCount.data > 0 %} - -{{accessModifier}} struct {{dataType}} { - {{accessModifier}} fileprivate(set) var name: String - - @available(iOS 9.0, tvOS 9.0, watchOS 6.0, macOS 10.11, *) - {{accessModifier}} var data: NSDataAsset { - return NSDataAsset(asset: self) - } -} - -@available(iOS 9.0, tvOS 9.0, watchOS 6.0, macOS 10.11, *) -{{accessModifier}} extension NSDataAsset { - convenience init!(asset: {{dataType}}) { - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - #if os(iOS) || os(tvOS) || os(watchOS) - self.init(name: asset.name, bundle: bundle) - #elseif os(macOS) - self.init(name: NSDataAsset.Name(asset.name), bundle: bundle) - #endif - } -} -{% endif %} -{% if resourceCount.image > 0 %} - -{{accessModifier}} struct {{imageType}} { - {{accessModifier}} fileprivate(set) var name: String - - #if os(macOS) - {{accessModifier}} typealias Image = NSImage - #elseif os(iOS) || os(tvOS) || os(watchOS) - {{accessModifier}} typealias Image = UIImage - #endif - - @available(iOS 8.0, tvOS 9.0, watchOS 2.0, macOS 10.7, *) - {{accessModifier}} var image: Image { - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - #if os(iOS) || os(tvOS) - let image = Image(named: name, in: bundle, compatibleWith: nil) - #elseif os(macOS) - let name = NSImage.Name(self.name) - let image = (bundle == .main) ? NSImage(named: name) : bundle.image(forResource: name) - #elseif os(watchOS) - let image = Image(named: name) - #endif - guard let result = image else { - fatalError("Unable to load image asset named \(name).") - } - return result - } - - #if os(iOS) || os(tvOS) - @available(iOS 8.0, tvOS 9.0, *) - {{accessModifier}} func image(compatibleWith traitCollection: UITraitCollection) -> Image { - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - guard let result = Image(named: name, in: bundle, compatibleWith: traitCollection) else { - fatalError("Unable to load image asset named \(name).") - } - return result - } - #endif -} - -{{accessModifier}} extension {{imageType}}.Image { - @available(iOS 8.0, tvOS 9.0, watchOS 2.0, *) - @available(macOS, deprecated, - message: "This initializer is unsafe on macOS, please use the {{imageType}}.image property") - convenience init!(asset: {{imageType}}) { - #if os(iOS) || os(tvOS) - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - self.init(named: asset.name, in: bundle, compatibleWith: nil) - #elseif os(macOS) - self.init(named: NSImage.Name(asset.name)) - #elseif os(watchOS) - self.init(named: asset.name) - #endif - } -} -{% endif %} -{% if resourceCount.symbol > 0 %} - -{{accessModifier}} struct {{symbolType}} { - {{accessModifier}} fileprivate(set) var name: String - - #if os(iOS) || os(tvOS) || os(watchOS) - @available(iOS 13.0, tvOS 13.0, watchOS 6.0, *) - {{accessModifier}} typealias Configuration = UIImage.SymbolConfiguration - {{accessModifier}} typealias Image = UIImage - - @available(iOS 12.0, tvOS 12.0, watchOS 5.0, *) - {{accessModifier}} var image: Image { - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - #if os(iOS) || os(tvOS) - let image = Image(named: name, in: bundle, compatibleWith: nil) - #elseif os(watchOS) - let image = Image(named: name) - #endif - guard let result = image else { - fatalError("Unable to load symbol asset named \(name).") - } - return result - } - - @available(iOS 13.0, tvOS 13.0, watchOS 6.0, *) - {{accessModifier}} func image(with configuration: Configuration) -> Image { - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - guard let result = Image(named: name, in: bundle, with: configuration) else { - fatalError("Unable to load symbol asset named \(name).") - } - return result - } - #endif -} -{% endif %} -{% if not param.bundle %} - -// swiftlint:disable convenience_type -private final class BundleToken { - static let bundle: Bundle = { - #if SWIFT_PACKAGE - return Bundle.module - #else - return Bundle(for: BundleToken.self) - #endif - }() -} -// swiftlint:enable convenience_type -{% endif %} -{% else %} -// No assets found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/xcassets/swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/xcassets/swift5.stencil deleted file mode 100644 index 42df7be8..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/xcassets/swift5.stencil +++ /dev/null @@ -1,337 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if catalogs %} -{% set enumName %}{{param.enumName|default:"Asset"}}{% endset %} -{% set arResourceGroupType %}{{param.arResourceGroupTypeName|default:"ARResourceGroupAsset"}}{% endset %} -{% set colorType %}{{param.colorTypeName|default:"ColorAsset"}}{% endset %} -{% set dataType %}{{param.dataTypeName|default:"DataAsset"}}{% endset %} -{% set imageType %}{{param.imageTypeName|default:"ImageAsset"}}{% endset %} -{% set symbolType %}{{param.symbolTypeName|default:"SymbolAsset"}}{% endset %} -{% set forceNamespaces %}{{param.forceProvidesNamespaces|default:"false"}}{% endset %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -#if os(macOS) - import AppKit -#elseif os(iOS) -{% if resourceCount.arresourcegroup > 0 %} - import ARKit -{% endif %} - import UIKit -#elseif os(tvOS) || os(watchOS) - import UIKit -#endif - -// Deprecated typealiases -{% if resourceCount.color > 0 %} -@available(*, deprecated, renamed: "{{colorType}}.Color", message: "This typealias will be removed in SwiftGen 7.0") -{{accessModifier}} typealias {{param.colorAliasName|default:"AssetColorTypeAlias"}} = {{colorType}}.Color -{% endif %} -{% if resourceCount.image > 0 %} -@available(*, deprecated, renamed: "{{imageType}}.Image", message: "This typealias will be removed in SwiftGen 7.0") -{{accessModifier}} typealias {{param.imageAliasName|default:"AssetImageTypeAlias"}} = {{imageType}}.Image -{% endif %} - -// swiftlint:disable superfluous_disable_command file_length implicit_return - -// MARK: - Asset Catalogs - -{% macro enumBlock assets %} - {% call casesBlock assets %} - {% if param.allValues %} - - // swiftlint:disable trailing_comma - {% if resourceCount.arresourcegroup > 0 %} - {{accessModifier}} static let allResourceGroups: [{{arResourceGroupType}}] = [ - {% filter indent:2 %}{% call allValuesBlock assets "arresourcegroup" "" %}{% endfilter %} - ] - {% endif %} - {% if resourceCount.color > 0 %} - {{accessModifier}} static let allColors: [{{colorType}}] = [ - {% filter indent:2 %}{% call allValuesBlock assets "color" "" %}{% endfilter %} - ] - {% endif %} - {% if resourceCount.data > 0 %} - {{accessModifier}} static let allDataAssets: [{{dataType}}] = [ - {% filter indent:2 %}{% call allValuesBlock assets "data" "" %}{% endfilter %} - ] - {% endif %} - {% if resourceCount.image > 0 %} - {{accessModifier}} static let allImages: [{{imageType}}] = [ - {% filter indent:2 %}{% call allValuesBlock assets "image" "" %}{% endfilter %} - ] - {% endif %} - {% if resourceCount.symbol > 0 %} - {{accessModifier}} static let allSymbols: [{{symbolType}}] = [ - {% filter indent:2 %}{% call allValuesBlock assets "symbol" "" %}{% endfilter %} - ] - {% endif %} - // swiftlint:enable trailing_comma - {% endif %} -{% endmacro %} -{% macro casesBlock assets %} - {% for asset in assets %} - {% if asset.type == "arresourcegroup" %} - {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{arResourceGroupType}}(name: "{{asset.value}}") - {% elif asset.type == "color" %} - {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{colorType}}(name: "{{asset.value}}") - {% elif asset.type == "data" %} - {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{dataType}}(name: "{{asset.value}}") - {% elif asset.type == "image" %} - {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{imageType}}(name: "{{asset.value}}") - {% elif asset.type == "symbol" %} - {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{symbolType}}(name: "{{asset.value}}") - {% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %} - {{accessModifier}} enum {{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call casesBlock asset.items %}{% endfilter %} - } - {% elif asset.items %} - {% call casesBlock asset.items %} - {% endif %} - {% endfor %} -{% endmacro %} -{% macro allValuesBlock assets filter prefix %} - {% for asset in assets %} - {% if asset.type == filter %} - {{prefix}}{{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}, - {% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %} - {% set prefix2 %}{{prefix}}{{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}.{% endset %} - {% call allValuesBlock asset.items filter prefix2 %} - {% elif asset.items %} - {% call allValuesBlock asset.items filter prefix %} - {% endif %} - {% endfor %} -{% endmacro %} -// swiftlint:disable identifier_name line_length nesting type_body_length type_name -{{accessModifier}} enum {{enumName}} { - {% if catalogs.count > 1 or param.forceFileNameEnum %} - {% for catalog in catalogs %} - {{accessModifier}} enum {{catalog.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call enumBlock catalog.assets %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call enumBlock catalogs.first.assets %} - {% endif %} -} -// swiftlint:enable identifier_name line_length nesting type_body_length type_name - -// MARK: - Implementation Details -{% if resourceCount.arresourcegroup > 0 %} - -{{accessModifier}} struct {{arResourceGroupType}} { - {{accessModifier}} fileprivate(set) var name: String - - #if os(iOS) - @available(iOS 11.3, *) - {{accessModifier}} var referenceImages: Set { - return ARReferenceImage.referenceImages(in: self) - } - - @available(iOS 12.0, *) - {{accessModifier}} var referenceObjects: Set { - return ARReferenceObject.referenceObjects(in: self) - } - #endif -} - -#if os(iOS) -@available(iOS 11.3, *) -{{accessModifier}} extension ARReferenceImage { - static func referenceImages(in asset: {{arResourceGroupType}}) -> Set { - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - return referenceImages(inGroupNamed: asset.name, bundle: bundle) ?? Set() - } -} - -@available(iOS 12.0, *) -{{accessModifier}} extension ARReferenceObject { - static func referenceObjects(in asset: {{arResourceGroupType}}) -> Set { - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - return referenceObjects(inGroupNamed: asset.name, bundle: bundle) ?? Set() - } -} -#endif -{% endif %} -{% if resourceCount.color > 0 %} - -{{accessModifier}} final class {{colorType}} { - {{accessModifier}} fileprivate(set) var name: String - - #if os(macOS) - {{accessModifier}} typealias Color = NSColor - #elseif os(iOS) || os(tvOS) || os(watchOS) - {{accessModifier}} typealias Color = UIColor - #endif - - @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *) - {{accessModifier}} private(set) lazy var color: Color = { - guard let color = Color(asset: self) else { - fatalError("Unable to load color asset named \(name).") - } - return color - }() - - #if os(iOS) || os(tvOS) - @available(iOS 11.0, tvOS 11.0, *) - {{accessModifier}} func color(compatibleWith traitCollection: UITraitCollection) -> Color { - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - guard let color = Color(named: name, in: bundle, compatibleWith: traitCollection) else { - fatalError("Unable to load color asset named \(name).") - } - return color - } - #endif - - fileprivate init(name: String) { - self.name = name - } -} - -{{accessModifier}} extension {{colorType}}.Color { - @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *) - convenience init?(asset: {{colorType}}) { - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - #if os(iOS) || os(tvOS) - self.init(named: asset.name, in: bundle, compatibleWith: nil) - #elseif os(macOS) - self.init(named: NSColor.Name(asset.name), bundle: bundle) - #elseif os(watchOS) - self.init(named: asset.name) - #endif - } -} -{% endif %} -{% if resourceCount.data > 0 %} - -{{accessModifier}} struct {{dataType}} { - {{accessModifier}} fileprivate(set) var name: String - - @available(iOS 9.0, tvOS 9.0, watchOS 6.0, macOS 10.11, *) - {{accessModifier}} var data: NSDataAsset { - guard let data = NSDataAsset(asset: self) else { - fatalError("Unable to load data asset named \(name).") - } - return data - } -} - -@available(iOS 9.0, tvOS 9.0, watchOS 6.0, macOS 10.11, *) -{{accessModifier}} extension NSDataAsset { - convenience init?(asset: {{dataType}}) { - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - #if os(iOS) || os(tvOS) || os(watchOS) - self.init(name: asset.name, bundle: bundle) - #elseif os(macOS) - self.init(name: NSDataAsset.Name(asset.name), bundle: bundle) - #endif - } -} -{% endif %} -{% if resourceCount.image > 0 %} - -{{accessModifier}} struct {{imageType}} { - {{accessModifier}} fileprivate(set) var name: String - - #if os(macOS) - {{accessModifier}} typealias Image = NSImage - #elseif os(iOS) || os(tvOS) || os(watchOS) - {{accessModifier}} typealias Image = UIImage - #endif - - @available(iOS 8.0, tvOS 9.0, watchOS 2.0, macOS 10.7, *) - {{accessModifier}} var image: Image { - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - #if os(iOS) || os(tvOS) - let image = Image(named: name, in: bundle, compatibleWith: nil) - #elseif os(macOS) - let name = NSImage.Name(self.name) - let image = (bundle == .main) ? NSImage(named: name) : bundle.image(forResource: name) - #elseif os(watchOS) - let image = Image(named: name) - #endif - guard let result = image else { - fatalError("Unable to load image asset named \(name).") - } - return result - } - - #if os(iOS) || os(tvOS) - @available(iOS 8.0, tvOS 9.0, *) - {{accessModifier}} func image(compatibleWith traitCollection: UITraitCollection) -> Image { - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - guard let result = Image(named: name, in: bundle, compatibleWith: traitCollection) else { - fatalError("Unable to load image asset named \(name).") - } - return result - } - #endif -} - -{{accessModifier}} extension {{imageType}}.Image { - @available(iOS 8.0, tvOS 9.0, watchOS 2.0, *) - @available(macOS, deprecated, - message: "This initializer is unsafe on macOS, please use the {{imageType}}.image property") - convenience init?(asset: {{imageType}}) { - #if os(iOS) || os(tvOS) - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - self.init(named: asset.name, in: bundle, compatibleWith: nil) - #elseif os(macOS) - self.init(named: NSImage.Name(asset.name)) - #elseif os(watchOS) - self.init(named: asset.name) - #endif - } -} -{% endif %} -{% if resourceCount.symbol > 0 %} - -{{accessModifier}} struct {{symbolType}} { - {{accessModifier}} fileprivate(set) var name: String - - #if os(iOS) || os(tvOS) || os(watchOS) - @available(iOS 13.0, tvOS 13.0, watchOS 6.0, *) - {{accessModifier}} typealias Configuration = UIImage.SymbolConfiguration - {{accessModifier}} typealias Image = UIImage - - @available(iOS 12.0, tvOS 12.0, watchOS 5.0, *) - {{accessModifier}} var image: Image { - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - #if os(iOS) || os(tvOS) - let image = Image(named: name, in: bundle, compatibleWith: nil) - #elseif os(watchOS) - let image = Image(named: name) - #endif - guard let result = image else { - fatalError("Unable to load symbol asset named \(name).") - } - return result - } - - @available(iOS 13.0, tvOS 13.0, watchOS 6.0, *) - {{accessModifier}} func image(with configuration: Configuration) -> Image { - let bundle = {{param.bundle|default:"BundleToken.bundle"}} - guard let result = Image(named: name, in: bundle, with: configuration) else { - fatalError("Unable to load symbol asset named \(name).") - } - return result - } - #endif -} -{% endif %} -{% if not param.bundle %} - -// swiftlint:disable convenience_type -private final class BundleToken { - static let bundle: Bundle = { - #if SWIFT_PACKAGE - return Bundle.module - #else - return Bundle(for: BundleToken.self) - #endif - }() -} -// swiftlint:enable convenience_type -{% endif %} -{% else %} -// No assets found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/yaml/inline-swift4.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/yaml/inline-swift4.stencil deleted file mode 100644 index 9cc2aa36..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/yaml/inline-swift4.stencil +++ /dev/null @@ -1,92 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if files %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -{% set documentPrefix %}{{param.documentName|default:"Document"}}{% endset %} -import Foundation - -// swiftlint:disable superfluous_disable_command -// swiftlint:disable file_length - -// MARK: - YAML Files -{% macro fileBlock file %} - {% if file.documents.count > 1 %} - {% for document in file.documents %} - {% set documentName %}{{documentPrefix}}{{forloop.counter}}{% endset %} - {{accessModifier}} enum {{documentName|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call documentBlock file document %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call documentBlock file file.documents.first %} - {% endif %} -{% endmacro %} -{% macro documentBlock file document %} - {% set rootType %}{% call typeBlock document.metadata %}{% endset %} - {% if document.metadata.type == "Array" %} - {{accessModifier}} static let items: {{rootType}} = {% call valueBlock document.data document.metadata %} - {% elif document.metadata.type == "Dictionary" %} - {% for key,value in document.metadata.properties %} - {{accessModifier}} {% call propertyBlock key value document.data %} - {% endfor %} - {% else %} - {{accessModifier}} static let value: {{rootType}} = {% call valueBlock document.data document.metadata %} - {% endif %} -{% endmacro %} -{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %} - {% if metadata.type == "Array" %} - [{% call typeBlock metadata.element %}] - {% elif metadata.type == "Dictionary" %} - [String: Any] - {% elif metadata.type == "Optional" %} - Any? - {% else %} - {{metadata.type}} - {% endif %} -{% endfilter %}{% endmacro %} -{% macro propertyBlock key metadata data %}{% filter removeNewlines:"leading" %} - {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} - {% set propertyType %}{% call typeBlock metadata %}{% endset %} - static let {{propertyName}}: {{propertyType}} = {% call valueBlock data[key] metadata %} -{% endfilter %}{% endmacro %} -{% macro valueBlock value metadata %}{% filter removeNewlines:"leading" %} - {% if metadata.type == "String" %} - "{{ value }}" - {% elif metadata.type == "Optional" %} - nil - {% elif metadata.type == "Array" and value %} - [{% for value in value %} - {% call valueBlock value metadata.element.items[forloop.counter0]|default:metadata.element %} - {{ ", " if not forloop.last }} - {% endfor %}] - {% elif metadata.type == "Dictionary" %} - [{% for key,value in value %} - "{{key}}": {% call valueBlock value metadata.properties[key] %} - {{ ", " if not forloop.last }} - {% empty %} - : - {% endfor %}] - {% elif metadata.type == "Bool" %} - {% if value %}true{% else %}false{% endif %} - {% else %} - {{ value }} - {% endif %} -{% endfilter %}{% endmacro %} - -// swiftlint:disable identifier_name line_length number_separator type_body_length -{{accessModifier}} enum {{param.enumName|default:"YAMLFiles"}} { - {% if files.count > 1 or param.forceFileNameEnum %} - {% for file in files %} - {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call fileBlock files.first %} - {% endif %} -} -// swiftlint:enable identifier_name line_length number_separator type_body_length -{% else %} -// No files found -{% endif %} diff --git a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/yaml/inline-swift5.stencil b/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/yaml/inline-swift5.stencil deleted file mode 100644 index 9cc2aa36..00000000 --- a/bin/SwiftGen_SwiftGenCLI.bundle/Contents/Resources/templates/yaml/inline-swift5.stencil +++ /dev/null @@ -1,92 +0,0 @@ -// swiftlint:disable all -// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen - -{% if files %} -{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} -{% set documentPrefix %}{{param.documentName|default:"Document"}}{% endset %} -import Foundation - -// swiftlint:disable superfluous_disable_command -// swiftlint:disable file_length - -// MARK: - YAML Files -{% macro fileBlock file %} - {% if file.documents.count > 1 %} - {% for document in file.documents %} - {% set documentName %}{{documentPrefix}}{{forloop.counter}}{% endset %} - {{accessModifier}} enum {{documentName|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call documentBlock file document %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call documentBlock file file.documents.first %} - {% endif %} -{% endmacro %} -{% macro documentBlock file document %} - {% set rootType %}{% call typeBlock document.metadata %}{% endset %} - {% if document.metadata.type == "Array" %} - {{accessModifier}} static let items: {{rootType}} = {% call valueBlock document.data document.metadata %} - {% elif document.metadata.type == "Dictionary" %} - {% for key,value in document.metadata.properties %} - {{accessModifier}} {% call propertyBlock key value document.data %} - {% endfor %} - {% else %} - {{accessModifier}} static let value: {{rootType}} = {% call valueBlock document.data document.metadata %} - {% endif %} -{% endmacro %} -{% macro typeBlock metadata %}{% filter removeNewlines:"leading" %} - {% if metadata.type == "Array" %} - [{% call typeBlock metadata.element %}] - {% elif metadata.type == "Dictionary" %} - [String: Any] - {% elif metadata.type == "Optional" %} - Any? - {% else %} - {{metadata.type}} - {% endif %} -{% endfilter %}{% endmacro %} -{% macro propertyBlock key metadata data %}{% filter removeNewlines:"leading" %} - {% set propertyName %}{{key|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %} - {% set propertyType %}{% call typeBlock metadata %}{% endset %} - static let {{propertyName}}: {{propertyType}} = {% call valueBlock data[key] metadata %} -{% endfilter %}{% endmacro %} -{% macro valueBlock value metadata %}{% filter removeNewlines:"leading" %} - {% if metadata.type == "String" %} - "{{ value }}" - {% elif metadata.type == "Optional" %} - nil - {% elif metadata.type == "Array" and value %} - [{% for value in value %} - {% call valueBlock value metadata.element.items[forloop.counter0]|default:metadata.element %} - {{ ", " if not forloop.last }} - {% endfor %}] - {% elif metadata.type == "Dictionary" %} - [{% for key,value in value %} - "{{key}}": {% call valueBlock value metadata.properties[key] %} - {{ ", " if not forloop.last }} - {% empty %} - : - {% endfor %}] - {% elif metadata.type == "Bool" %} - {% if value %}true{% else %}false{% endif %} - {% else %} - {{ value }} - {% endif %} -{% endfilter %}{% endmacro %} - -// swiftlint:disable identifier_name line_length number_separator type_body_length -{{accessModifier}} enum {{param.enumName|default:"YAMLFiles"}} { - {% if files.count > 1 or param.forceFileNameEnum %} - {% for file in files %} - {{accessModifier}} enum {{file.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { - {% filter indent:2 %}{% call fileBlock file %}{% endfilter %} - } - {% endfor %} - {% else %} - {% call fileBlock files.first %} - {% endif %} -} -// swiftlint:enable identifier_name line_length number_separator type_body_length -{% else %} -// No files found -{% endif %} diff --git a/bin/swiftgen b/bin/swiftgen deleted file mode 100755 index 1bc2b874..00000000 Binary files a/bin/swiftgen and /dev/null differ diff --git a/contributing.md b/contributing.md index ebc6e6d5..dab114c5 100644 --- a/contributing.md +++ b/contributing.md @@ -6,19 +6,18 @@ ## Setup -Fork the Swiftfin repo and install the necessary Carthage with Xcode 13: +Fork the Swiftfin repo and install the necessary dependencies with Xcode 13: ```bash -# install Carthage (if not installed) -$ brew install carthage +# install Carthage, SwiftFormat, and SwiftGen with homebrew +$ brew install carthage swiftformat swiftgen -# update dependencies +# install or update dependencies $ carthage update --use-xcframeworks - -# open project and build -$ open Swiftfin.xcodeproj ``` +If you run into a build error with Swift Packages because some have not finished installing, you may need to close and reopen Xcode to finish installing the last packages. + ## Git Flow Swiftfin follows the same Pull Request Guidelines as outlined in the [Jellyfin Pull Request Guidelines](https://jellyfin.org/docs/general/contributing/development.html#pull-request-guidelines). @@ -30,11 +29,11 @@ If your Pull Request relates to an Issue, mention the issue correctly in your PR The following must pass in order for a PR to be merged: - automated `iOS` and `tvOS` builds must succeed - developer account cannot be attached -- SwiftFormat linting check must pass +- SwiftFormat linting check must pass. If this does not pass after you have linted, you may need to update your local `swiftformat` - new strings that are not part of an experimental feature must be localized - correct label(s) are attached, if applicable -Labeling PRs with `enhancement`, `bug`, or `crash` will allow the PR to be tracked in GitHub's [automatically generated release notes](https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes). Small fixes (like minor UI adjustments) or non-user facing issues (like developer project clean up) should also have the `ignore-for-release` label since many PRs may be similar. If you think that no labels are required, that is acceptable. +Labeling PRs with `enhancement`, `bug`, or `crash` will allow the PR to be tracked in GitHub's [automatically generated release notes](https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes). Small fixes (like minor UI adjustments) or non-user facing issues (like developer project clean up) can also have the `ignore-for-release` label because they may not be important to include in the release notes. If you think that no labels are required, that is acceptable. ### Documentation Documentation for advanced or complex features and other implementation reasoning is encouraged so that future developers may have insights and a better understand of the application. `// MARK:` comments are encouraged for organization, maintainability, and ease of navigation in Xcode's Minimap. @@ -49,7 +48,7 @@ Playback is done with [VLCKit](https://code.videolan.org/videolan/VLCKit) for it While there are no design guidelines for UI/UX features, Swiftfin has the goal to use native SwiftUI/UIKit components while adhering to a Jellyfin theme. If your feature creates new UI/UX components, you are welcome to introduce a general design that may receive feedback during the PR process or may be re-designed later on. -User customizable UI/UX features are welcome and intended, however not all customization may be accepted for code maintainability and to also establish a specific Swiftfin design. Taking inspiration, but not always copying, from other applications is encouraged. +User customizable UI/UX features are welcome and intended, however not all customization may be accepted for code maintainability and to also establish a distinct Swiftfin design. Taking inspiration, but not always copying, from other applications is encouraged. ## New Features @@ -57,7 +56,7 @@ If you would like to develop a new feature or `Developer` issue, create an issue ## Other Code Work -Other code work like bug fixes, issues with `Developer` tags, and localization and accessibility efforts are welcome to be picked up at any time. Just leave a comment when you start work on a bug fix or `Developer` issue. +Other code work like bug fixes, issues with `Developer` tags, localizations, and accessibility efforts are welcome to be picked up at any time. Just leave a comment when you start work on a bug fix or `Developer` issue. If you notice undesirable behavior or would like to make a UI/UX tweak, create an issue or ask in the iOS Matrix/Discord channel and a discussion will be made.