danger-localizationlinter 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (136) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +20 -0
  3. data/.travis.yml +12 -0
  4. data/Gemfile +6 -0
  5. data/Gemfile.lock +167 -0
  6. data/Guardfile +21 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +62 -0
  9. data/Rakefile +25 -0
  10. data/danger-localizationlinter.gemspec +60 -0
  11. data/ext/localizationlinter/helper/validate_wording_cli.rb +21 -0
  12. data/ext/localizationlinter/localizationlinter.rb +331 -0
  13. data/ext/localizationlinter/swiftgen_localizables_check.stencil +36 -0
  14. data/lib/danger_localizationlinter.rb +3 -0
  15. data/lib/danger_plugin.rb +3 -0
  16. data/lib/localizationlinter/gem_version.rb +5 -0
  17. data/lib/localizationlinter/plugin.rb +96 -0
  18. data/spec/Test/Podfile +6 -0
  19. data/spec/Test/Podfile.lock +16 -0
  20. data/spec/Test/Pods/SwiftGen/CHANGELOG.md +1357 -0
  21. data/spec/Test/Pods/SwiftGen/LICENCE +21 -0
  22. data/spec/Test/Pods/SwiftGen/README.md +892 -0
  23. data/spec/Test/Pods/SwiftGen/bin/swiftgen +0 -0
  24. data/spec/Test/Pods/SwiftGen/lib/Commander.framework/Commander +0 -0
  25. data/spec/Test/Pods/SwiftGen/lib/Commander.framework/Resources/Info.plist +48 -0
  26. data/spec/Test/Pods/SwiftGen/lib/Commander.framework/Versions/A/Commander +0 -0
  27. data/spec/Test/Pods/SwiftGen/lib/Commander.framework/Versions/A/Resources/Info.plist +48 -0
  28. data/spec/Test/Pods/SwiftGen/lib/Commander.framework/Versions/A/_CodeSignature/CodeResources +132 -0
  29. data/spec/Test/Pods/SwiftGen/lib/Commander.framework/Versions/Current/Commander +0 -0
  30. data/spec/Test/Pods/SwiftGen/lib/Commander.framework/Versions/Current/Resources/Info.plist +48 -0
  31. data/spec/Test/Pods/SwiftGen/lib/Commander.framework/Versions/Current/_CodeSignature/CodeResources +132 -0
  32. data/spec/Test/Pods/SwiftGen/lib/Kanna.framework/Kanna +0 -0
  33. data/spec/Test/Pods/SwiftGen/lib/Kanna.framework/Resources/Info.plist +48 -0
  34. data/spec/Test/Pods/SwiftGen/lib/Kanna.framework/Versions/A/Kanna +0 -0
  35. data/spec/Test/Pods/SwiftGen/lib/Kanna.framework/Versions/A/Resources/Info.plist +48 -0
  36. data/spec/Test/Pods/SwiftGen/lib/Kanna.framework/Versions/A/_CodeSignature/CodeResources +132 -0
  37. data/spec/Test/Pods/SwiftGen/lib/Kanna.framework/Versions/Current/Kanna +0 -0
  38. data/spec/Test/Pods/SwiftGen/lib/Kanna.framework/Versions/Current/Resources/Info.plist +48 -0
  39. data/spec/Test/Pods/SwiftGen/lib/Kanna.framework/Versions/Current/_CodeSignature/CodeResources +132 -0
  40. data/spec/Test/Pods/SwiftGen/lib/PathKit.framework/PathKit +0 -0
  41. data/spec/Test/Pods/SwiftGen/lib/PathKit.framework/Resources/Info.plist +48 -0
  42. data/spec/Test/Pods/SwiftGen/lib/PathKit.framework/Versions/A/PathKit +0 -0
  43. data/spec/Test/Pods/SwiftGen/lib/PathKit.framework/Versions/A/Resources/Info.plist +48 -0
  44. data/spec/Test/Pods/SwiftGen/lib/PathKit.framework/Versions/A/_CodeSignature/CodeResources +132 -0
  45. data/spec/Test/Pods/SwiftGen/lib/PathKit.framework/Versions/Current/PathKit +0 -0
  46. data/spec/Test/Pods/SwiftGen/lib/PathKit.framework/Versions/Current/Resources/Info.plist +48 -0
  47. data/spec/Test/Pods/SwiftGen/lib/PathKit.framework/Versions/Current/_CodeSignature/CodeResources +132 -0
  48. data/spec/Test/Pods/SwiftGen/lib/Stencil.framework/Resources/Info.plist +48 -0
  49. data/spec/Test/Pods/SwiftGen/lib/Stencil.framework/Stencil +0 -0
  50. data/spec/Test/Pods/SwiftGen/lib/Stencil.framework/Versions/A/Resources/Info.plist +48 -0
  51. data/spec/Test/Pods/SwiftGen/lib/Stencil.framework/Versions/A/Stencil +0 -0
  52. data/spec/Test/Pods/SwiftGen/lib/Stencil.framework/Versions/A/_CodeSignature/CodeResources +132 -0
  53. data/spec/Test/Pods/SwiftGen/lib/Stencil.framework/Versions/Current/Resources/Info.plist +48 -0
  54. data/spec/Test/Pods/SwiftGen/lib/Stencil.framework/Versions/Current/Stencil +0 -0
  55. data/spec/Test/Pods/SwiftGen/lib/Stencil.framework/Versions/Current/_CodeSignature/CodeResources +132 -0
  56. data/spec/Test/Pods/SwiftGen/lib/StencilSwiftKit.framework/Resources/Info.plist +48 -0
  57. data/spec/Test/Pods/SwiftGen/lib/StencilSwiftKit.framework/StencilSwiftKit +0 -0
  58. data/spec/Test/Pods/SwiftGen/lib/StencilSwiftKit.framework/Versions/A/Resources/Info.plist +48 -0
  59. data/spec/Test/Pods/SwiftGen/lib/StencilSwiftKit.framework/Versions/A/StencilSwiftKit +0 -0
  60. data/spec/Test/Pods/SwiftGen/lib/StencilSwiftKit.framework/Versions/A/_CodeSignature/CodeResources +132 -0
  61. data/spec/Test/Pods/SwiftGen/lib/StencilSwiftKit.framework/Versions/Current/Resources/Info.plist +48 -0
  62. data/spec/Test/Pods/SwiftGen/lib/StencilSwiftKit.framework/Versions/Current/StencilSwiftKit +0 -0
  63. data/spec/Test/Pods/SwiftGen/lib/StencilSwiftKit.framework/Versions/Current/_CodeSignature/CodeResources +132 -0
  64. data/spec/Test/Pods/SwiftGen/lib/SwiftGenKit.framework/Resources/Info.plist +48 -0
  65. data/spec/Test/Pods/SwiftGen/lib/SwiftGenKit.framework/SwiftGenKit +0 -0
  66. data/spec/Test/Pods/SwiftGen/lib/SwiftGenKit.framework/Versions/A/Resources/Info.plist +48 -0
  67. data/spec/Test/Pods/SwiftGen/lib/SwiftGenKit.framework/Versions/A/SwiftGenKit +0 -0
  68. data/spec/Test/Pods/SwiftGen/lib/SwiftGenKit.framework/Versions/A/_CodeSignature/CodeResources +132 -0
  69. data/spec/Test/Pods/SwiftGen/lib/SwiftGenKit.framework/Versions/Current/Resources/Info.plist +48 -0
  70. data/spec/Test/Pods/SwiftGen/lib/SwiftGenKit.framework/Versions/Current/SwiftGenKit +0 -0
  71. data/spec/Test/Pods/SwiftGen/lib/SwiftGenKit.framework/Versions/Current/_CodeSignature/CodeResources +132 -0
  72. data/spec/Test/Pods/SwiftGen/lib/Yams.framework/Resources/Info.plist +48 -0
  73. data/spec/Test/Pods/SwiftGen/lib/Yams.framework/Versions/A/Resources/Info.plist +48 -0
  74. data/spec/Test/Pods/SwiftGen/lib/Yams.framework/Versions/A/Yams +0 -0
  75. data/spec/Test/Pods/SwiftGen/lib/Yams.framework/Versions/A/_CodeSignature/CodeResources +132 -0
  76. data/spec/Test/Pods/SwiftGen/lib/Yams.framework/Versions/Current/Resources/Info.plist +48 -0
  77. data/spec/Test/Pods/SwiftGen/lib/Yams.framework/Versions/Current/Yams +0 -0
  78. data/spec/Test/Pods/SwiftGen/lib/Yams.framework/Versions/Current/_CodeSignature/CodeResources +132 -0
  79. data/spec/Test/Pods/SwiftGen/lib/Yams.framework/Yams +0 -0
  80. data/spec/Test/Pods/SwiftGen/templates/colors/literals-swift4.stencil +43 -0
  81. data/spec/Test/Pods/SwiftGen/templates/colors/literals-swift5.stencil +43 -0
  82. data/spec/Test/Pods/SwiftGen/templates/colors/swift4.stencil +84 -0
  83. data/spec/Test/Pods/SwiftGen/templates/colors/swift5.stencil +84 -0
  84. data/spec/Test/Pods/SwiftGen/templates/coredata/swift4.stencil +211 -0
  85. data/spec/Test/Pods/SwiftGen/templates/coredata/swift5.stencil +211 -0
  86. data/spec/Test/Pods/SwiftGen/templates/fonts/swift4.stencil +110 -0
  87. data/spec/Test/Pods/SwiftGen/templates/fonts/swift5.stencil +113 -0
  88. data/spec/Test/Pods/SwiftGen/templates/ib/scenes-swift4.stencil +157 -0
  89. data/spec/Test/Pods/SwiftGen/templates/ib/scenes-swift5.stencil +159 -0
  90. data/spec/Test/Pods/SwiftGen/templates/ib/segues-swift4.stencil +60 -0
  91. data/spec/Test/Pods/SwiftGen/templates/ib/segues-swift5.stencil +60 -0
  92. data/spec/Test/Pods/SwiftGen/templates/json/inline-swift4.stencil +82 -0
  93. data/spec/Test/Pods/SwiftGen/templates/json/inline-swift5.stencil +82 -0
  94. data/spec/Test/Pods/SwiftGen/templates/json/runtime-swift4.stencil +112 -0
  95. data/spec/Test/Pods/SwiftGen/templates/json/runtime-swift5.stencil +112 -0
  96. data/spec/Test/Pods/SwiftGen/templates/plist/inline-swift4.stencil +82 -0
  97. data/spec/Test/Pods/SwiftGen/templates/plist/inline-swift5.stencil +82 -0
  98. data/spec/Test/Pods/SwiftGen/templates/plist/runtime-swift4.stencil +117 -0
  99. data/spec/Test/Pods/SwiftGen/templates/plist/runtime-swift5.stencil +117 -0
  100. data/spec/Test/Pods/SwiftGen/templates/strings/flat-swift4.stencil +97 -0
  101. data/spec/Test/Pods/SwiftGen/templates/strings/flat-swift5.stencil +97 -0
  102. data/spec/Test/Pods/SwiftGen/templates/strings/objc-h.stencil +66 -0
  103. data/spec/Test/Pods/SwiftGen/templates/strings/objc-m.stencil +90 -0
  104. data/spec/Test/Pods/SwiftGen/templates/strings/structured-swift4.stencil +102 -0
  105. data/spec/Test/Pods/SwiftGen/templates/strings/structured-swift5.stencil +102 -0
  106. data/spec/Test/Pods/SwiftGen/templates/xcassets/swift4.stencil +266 -0
  107. data/spec/Test/Pods/SwiftGen/templates/xcassets/swift5.stencil +274 -0
  108. data/spec/Test/Pods/SwiftGen/templates/yaml/inline-swift4.stencil +92 -0
  109. data/spec/Test/Pods/SwiftGen/templates/yaml/inline-swift5.stencil +92 -0
  110. data/spec/Test/Test.xcodeproj/project.pbxproj +406 -0
  111. data/spec/Test/Test.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  112. data/spec/Test/Test.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  113. data/spec/Test/Test.xcworkspace/contents.xcworkspacedata +10 -0
  114. data/spec/Test/Test.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  115. data/spec/Test/Test/AppDelegate.swift +36 -0
  116. data/spec/Test/Test/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  117. data/spec/Test/Test/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
  118. data/spec/Test/Test/Assets.xcassets/Contents.json +6 -0
  119. data/spec/Test/Test/ContentView.swift +21 -0
  120. data/spec/Test/Test/Info.plist +62 -0
  121. data/spec/Test/Test/SceneDelegate.swift +63 -0
  122. data/spec/Test/Test/all_target_main_language.yml +1 -0
  123. data/spec/Test/Test/en.lproj/LaunchScreen.storyboard +25 -0
  124. data/spec/Test/Test/en.lproj/localizable.strings +3 -0
  125. data/spec/Test/Test/fr.lproj/LaunchScreen.storyboard +25 -0
  126. data/spec/Test/Test/fr.lproj/localizable.strings +3 -0
  127. data/spec/localizationofficer_spec.rb +116 -0
  128. data/spec/spec_helper.rb +67 -0
  129. data/spec/support/fixtures/all_target_main_language.yml +1 -0
  130. data/spec/support/fixtures/resources/TEST/en.lproj/Localizable.strings +8 -0
  131. data/spec/support/fixtures/resources/TEST/en.lproj/Localizable.stringsdict +30 -0
  132. data/spec/support/fixtures/resources/TEST_KO/en.lproj/Localizable.strings +11 -0
  133. data/spec/support/fixtures/resources/TEST_KO/en.lproj/Localizable.stringsdict +30 -0
  134. data/spec/support/fixtures/resources/TEST_KO/fr.lproj/Localizable.strings +11 -0
  135. data/spec/support/fixtures/resources/TEST_KO/fr.lproj/Localizable.stringsdict +30 -0
  136. metadata +491 -0
@@ -0,0 +1,266 @@
1
+ // swiftlint:disable all
2
+ // Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
3
+
4
+ {% if catalogs %}
5
+ {% set enumName %}{{param.enumName|default:"Asset"}}{% endset %}
6
+ {% set arResourceGroupType %}{{param.arResourceGroupTypeName|default:"ARResourceGroupAsset"}}{% endset %}
7
+ {% set colorType %}{{param.colorTypeName|default:"ColorAsset"}}{% endset %}
8
+ {% set dataType %}{{param.dataTypeName|default:"DataAsset"}}{% endset %}
9
+ {% set imageType %}{{param.imageTypeName|default:"ImageAsset"}}{% endset %}
10
+ {% set forceNamespaces %}{{param.forceProvidesNamespaces|default:"false"}}{% endset %}
11
+ {% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
12
+ #if os(macOS)
13
+ import AppKit
14
+ #elseif os(iOS)
15
+ {% if resourceCount.arresourcegroup > 0 %}
16
+ import ARKit
17
+ {% endif %}
18
+ import UIKit
19
+ #elseif os(tvOS) || os(watchOS)
20
+ import UIKit
21
+ #endif
22
+
23
+ // Deprecated typealiases
24
+ {% if resourceCount.color > 0 %}
25
+ @available(*, deprecated, renamed: "{{colorType}}.Color", message: "This typealias will be removed in SwiftGen 7.0")
26
+ {{accessModifier}} typealias {{param.colorAliasName|default:"AssetColorTypeAlias"}} = {{colorType}}.Color
27
+ {% endif %}
28
+ {% if resourceCount.image > 0 %}
29
+ @available(*, deprecated, renamed: "{{imageType}}.Image", message: "This typealias will be removed in SwiftGen 7.0")
30
+ {{accessModifier}} typealias {{param.imageAliasName|default:"AssetImageTypeAlias"}} = {{imageType}}.Image
31
+ {% endif %}
32
+
33
+ // swiftlint:disable superfluous_disable_command file_length implicit_return
34
+
35
+ // MARK: - Asset Catalogs
36
+
37
+ {% macro enumBlock assets %}
38
+ {% call casesBlock assets %}
39
+ {% if param.allValues %}
40
+
41
+ // swiftlint:disable trailing_comma
42
+ {% if resourceCount.arresourcegroup > 0 %}
43
+ {{accessModifier}} static let allResourceGroups: [{{arResourceGroupType}}] = [
44
+ {% filter indent:2 %}{% call allValuesBlock assets "arresourcegroup" "" %}{% endfilter %}
45
+ ]
46
+ {% endif %}
47
+ {% if resourceCount.color > 0 %}
48
+ {{accessModifier}} static let allColors: [{{colorType}}] = [
49
+ {% filter indent:2 %}{% call allValuesBlock assets "color" "" %}{% endfilter %}
50
+ ]
51
+ {% endif %}
52
+ {% if resourceCount.data > 0 %}
53
+ {{accessModifier}} static let allDataAssets: [{{dataType}}] = [
54
+ {% filter indent:2 %}{% call allValuesBlock assets "data" "" %}{% endfilter %}
55
+ ]
56
+ {% endif %}
57
+ {% if resourceCount.image > 0 %}
58
+ {{accessModifier}} static let allImages: [{{imageType}}] = [
59
+ {% filter indent:2 %}{% call allValuesBlock assets "image" "" %}{% endfilter %}
60
+ ]
61
+ {% endif %}
62
+ // swiftlint:enable trailing_comma
63
+ {% endif %}
64
+ {% endmacro %}
65
+ {% macro casesBlock assets %}
66
+ {% for asset in assets %}
67
+ {% if asset.type == "arresourcegroup" %}
68
+ {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{arResourceGroupType}}(name: "{{asset.value}}")
69
+ {% elif asset.type == "color" %}
70
+ {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{colorType}}(name: "{{asset.value}}")
71
+ {% elif asset.type == "data" %}
72
+ {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{dataType}}(name: "{{asset.value}}")
73
+ {% elif asset.type == "image" %}
74
+ {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{imageType}}(name: "{{asset.value}}")
75
+ {% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %}
76
+ {{accessModifier}} enum {{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
77
+ {% filter indent:2 %}{% call casesBlock asset.items %}{% endfilter %}
78
+ }
79
+ {% elif asset.items %}
80
+ {% call casesBlock asset.items %}
81
+ {% endif %}
82
+ {% endfor %}
83
+ {% endmacro %}
84
+ {% macro allValuesBlock assets filter prefix %}
85
+ {% for asset in assets %}
86
+ {% if asset.type == filter %}
87
+ {{prefix}}{{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}},
88
+ {% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %}
89
+ {% set prefix2 %}{{prefix}}{{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}.{% endset %}
90
+ {% call allValuesBlock asset.items filter prefix2 %}
91
+ {% elif asset.items %}
92
+ {% call allValuesBlock asset.items filter prefix %}
93
+ {% endif %}
94
+ {% endfor %}
95
+ {% endmacro %}
96
+ // swiftlint:disable identifier_name line_length nesting type_body_length type_name
97
+ {{accessModifier}} enum {{enumName}} {
98
+ {% if catalogs.count > 1 or param.forceFileNameEnum %}
99
+ {% for catalog in catalogs %}
100
+ {{accessModifier}} enum {{catalog.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
101
+ {% filter indent:2 %}{% call enumBlock catalog.assets %}{% endfilter %}
102
+ }
103
+ {% endfor %}
104
+ {% else %}
105
+ {% call enumBlock catalogs.first.assets %}
106
+ {% endif %}
107
+ }
108
+ // swiftlint:enable identifier_name line_length nesting type_body_length type_name
109
+
110
+ // MARK: - Implementation Details
111
+ {% if resourceCount.arresourcegroup > 0 %}
112
+
113
+ {{accessModifier}} struct {{arResourceGroupType}} {
114
+ {{accessModifier}} fileprivate(set) var name: String
115
+
116
+ #if os(iOS)
117
+ @available(iOS 11.3, *)
118
+ {{accessModifier}} var referenceImages: Set<ARReferenceImage> {
119
+ return ARReferenceImage.referenceImages(in: self)
120
+ }
121
+
122
+ @available(iOS 12.0, *)
123
+ {{accessModifier}} var referenceObjects: Set<ARReferenceObject> {
124
+ return ARReferenceObject.referenceObjects(in: self)
125
+ }
126
+ #endif
127
+ }
128
+
129
+ #if os(iOS)
130
+ @available(iOS 11.3, *)
131
+ {{accessModifier}} extension ARReferenceImage {
132
+ static func referenceImages(in asset: {{arResourceGroupType}}) -> Set<ARReferenceImage> {
133
+ let bundle = {{param.bundle|default:"BundleToken.bundle"}}
134
+ return referenceImages(inGroupNamed: asset.name, bundle: bundle) ?? Set()
135
+ }
136
+ }
137
+
138
+ @available(iOS 12.0, *)
139
+ {{accessModifier}} extension ARReferenceObject {
140
+ static func referenceObjects(in asset: {{arResourceGroupType}}) -> Set<ARReferenceObject> {
141
+ let bundle = {{param.bundle|default:"BundleToken.bundle"}}
142
+ return referenceObjects(inGroupNamed: asset.name, bundle: bundle) ?? Set()
143
+ }
144
+ }
145
+ #endif
146
+ {% endif %}
147
+ {% if resourceCount.color > 0 %}
148
+
149
+ {{accessModifier}} final class {{colorType}} {
150
+ {{accessModifier}} fileprivate(set) var name: String
151
+
152
+ #if os(macOS)
153
+ {{accessModifier}} typealias Color = NSColor
154
+ #elseif os(iOS) || os(tvOS) || os(watchOS)
155
+ {{accessModifier}} typealias Color = UIColor
156
+ #endif
157
+
158
+ @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *)
159
+ {{accessModifier}} private(set) lazy var color: Color = Color(asset: self)
160
+
161
+ fileprivate init(name: String) {
162
+ self.name = name
163
+ }
164
+ }
165
+
166
+ {{accessModifier}} extension {{colorType}}.Color {
167
+ @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *)
168
+ convenience init!(asset: {{colorType}}) {
169
+ let bundle = {{param.bundle|default:"BundleToken.bundle"}}
170
+ #if os(iOS) || os(tvOS)
171
+ self.init(named: asset.name, in: bundle, compatibleWith: nil)
172
+ #elseif os(macOS)
173
+ self.init(named: NSColor.Name(asset.name), bundle: bundle)
174
+ #elseif os(watchOS)
175
+ self.init(named: asset.name)
176
+ #endif
177
+ }
178
+ }
179
+ {% endif %}
180
+ {% if resourceCount.data > 0 %}
181
+
182
+ {{accessModifier}} struct {{dataType}} {
183
+ {{accessModifier}} fileprivate(set) var name: String
184
+
185
+ #if os(iOS) || os(tvOS) || os(macOS)
186
+ @available(iOS 9.0, macOS 10.11, *)
187
+ {{accessModifier}} var data: NSDataAsset {
188
+ return NSDataAsset(asset: self)
189
+ }
190
+ #endif
191
+ }
192
+
193
+ #if os(iOS) || os(tvOS) || os(macOS)
194
+ @available(iOS 9.0, macOS 10.11, *)
195
+ {{accessModifier}} extension NSDataAsset {
196
+ convenience init!(asset: {{dataType}}) {
197
+ let bundle = {{param.bundle|default:"BundleToken.bundle"}}
198
+ #if os(iOS) || os(tvOS)
199
+ self.init(name: asset.name, bundle: bundle)
200
+ #elseif os(macOS)
201
+ self.init(name: NSDataAsset.Name(asset.name), bundle: bundle)
202
+ #endif
203
+ }
204
+ }
205
+ #endif
206
+ {% endif %}
207
+ {% if resourceCount.image > 0 %}
208
+
209
+ {{accessModifier}} struct {{imageType}} {
210
+ {{accessModifier}} fileprivate(set) var name: String
211
+
212
+ #if os(macOS)
213
+ {{accessModifier}} typealias Image = NSImage
214
+ #elseif os(iOS) || os(tvOS) || os(watchOS)
215
+ {{accessModifier}} typealias Image = UIImage
216
+ #endif
217
+
218
+ {{accessModifier}} var image: Image {
219
+ let bundle = {{param.bundle|default:"BundleToken.bundle"}}
220
+ #if os(iOS) || os(tvOS)
221
+ let image = Image(named: name, in: bundle, compatibleWith: nil)
222
+ #elseif os(macOS)
223
+ let name = NSImage.Name(self.name)
224
+ let image = (bundle == .main) ? NSImage(named: name) : bundle.image(forResource: name)
225
+ #elseif os(watchOS)
226
+ let image = Image(named: name)
227
+ #endif
228
+ guard let result = image else {
229
+ fatalError("Unable to load image named \(name).")
230
+ }
231
+ return result
232
+ }
233
+ }
234
+
235
+ {{accessModifier}} extension {{imageType}}.Image {
236
+ @available(macOS, deprecated,
237
+ message: "This initializer is unsafe on macOS, please use the {{imageType}}.image property")
238
+ convenience init!(asset: {{imageType}}) {
239
+ #if os(iOS) || os(tvOS)
240
+ let bundle = {{param.bundle|default:"BundleToken.bundle"}}
241
+ self.init(named: asset.name, in: bundle, compatibleWith: nil)
242
+ #elseif os(macOS)
243
+ self.init(named: NSImage.Name(asset.name))
244
+ #elseif os(watchOS)
245
+ self.init(named: asset.name)
246
+ #endif
247
+ }
248
+ }
249
+ {% endif %}
250
+ {% if not param.bundle %}
251
+
252
+ // swiftlint:disable convenience_type
253
+ private final class BundleToken {
254
+ static let bundle: Bundle = {
255
+ #if SWIFT_PACKAGE
256
+ return Bundle.module
257
+ #else
258
+ return Bundle(for: BundleToken.self)
259
+ #endif
260
+ }()
261
+ }
262
+ // swiftlint:enable convenience_type
263
+ {% endif %}
264
+ {% else %}
265
+ // No assets found
266
+ {% endif %}
@@ -0,0 +1,274 @@
1
+ // swiftlint:disable all
2
+ // Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
3
+
4
+ {% if catalogs %}
5
+ {% set enumName %}{{param.enumName|default:"Asset"}}{% endset %}
6
+ {% set arResourceGroupType %}{{param.arResourceGroupTypeName|default:"ARResourceGroupAsset"}}{% endset %}
7
+ {% set colorType %}{{param.colorTypeName|default:"ColorAsset"}}{% endset %}
8
+ {% set dataType %}{{param.dataTypeName|default:"DataAsset"}}{% endset %}
9
+ {% set imageType %}{{param.imageTypeName|default:"ImageAsset"}}{% endset %}
10
+ {% set forceNamespaces %}{{param.forceProvidesNamespaces|default:"false"}}{% endset %}
11
+ {% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
12
+ #if os(macOS)
13
+ import AppKit
14
+ #elseif os(iOS)
15
+ {% if resourceCount.arresourcegroup > 0 %}
16
+ import ARKit
17
+ {% endif %}
18
+ import UIKit
19
+ #elseif os(tvOS) || os(watchOS)
20
+ import UIKit
21
+ #endif
22
+
23
+ // Deprecated typealiases
24
+ {% if resourceCount.color > 0 %}
25
+ @available(*, deprecated, renamed: "{{colorType}}.Color", message: "This typealias will be removed in SwiftGen 7.0")
26
+ {{accessModifier}} typealias {{param.colorAliasName|default:"AssetColorTypeAlias"}} = {{colorType}}.Color
27
+ {% endif %}
28
+ {% if resourceCount.image > 0 %}
29
+ @available(*, deprecated, renamed: "{{imageType}}.Image", message: "This typealias will be removed in SwiftGen 7.0")
30
+ {{accessModifier}} typealias {{param.imageAliasName|default:"AssetImageTypeAlias"}} = {{imageType}}.Image
31
+ {% endif %}
32
+
33
+ // swiftlint:disable superfluous_disable_command file_length implicit_return
34
+
35
+ // MARK: - Asset Catalogs
36
+
37
+ {% macro enumBlock assets %}
38
+ {% call casesBlock assets %}
39
+ {% if param.allValues %}
40
+
41
+ // swiftlint:disable trailing_comma
42
+ {% if resourceCount.arresourcegroup > 0 %}
43
+ {{accessModifier}} static let allResourceGroups: [{{arResourceGroupType}}] = [
44
+ {% filter indent:2 %}{% call allValuesBlock assets "arresourcegroup" "" %}{% endfilter %}
45
+ ]
46
+ {% endif %}
47
+ {% if resourceCount.color > 0 %}
48
+ {{accessModifier}} static let allColors: [{{colorType}}] = [
49
+ {% filter indent:2 %}{% call allValuesBlock assets "color" "" %}{% endfilter %}
50
+ ]
51
+ {% endif %}
52
+ {% if resourceCount.data > 0 %}
53
+ {{accessModifier}} static let allDataAssets: [{{dataType}}] = [
54
+ {% filter indent:2 %}{% call allValuesBlock assets "data" "" %}{% endfilter %}
55
+ ]
56
+ {% endif %}
57
+ {% if resourceCount.image > 0 %}
58
+ {{accessModifier}} static let allImages: [{{imageType}}] = [
59
+ {% filter indent:2 %}{% call allValuesBlock assets "image" "" %}{% endfilter %}
60
+ ]
61
+ {% endif %}
62
+ // swiftlint:enable trailing_comma
63
+ {% endif %}
64
+ {% endmacro %}
65
+ {% macro casesBlock assets %}
66
+ {% for asset in assets %}
67
+ {% if asset.type == "arresourcegroup" %}
68
+ {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{arResourceGroupType}}(name: "{{asset.value}}")
69
+ {% elif asset.type == "color" %}
70
+ {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{colorType}}(name: "{{asset.value}}")
71
+ {% elif asset.type == "data" %}
72
+ {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{dataType}}(name: "{{asset.value}}")
73
+ {% elif asset.type == "image" %}
74
+ {{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{imageType}}(name: "{{asset.value}}")
75
+ {% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %}
76
+ {{accessModifier}} enum {{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
77
+ {% filter indent:2 %}{% call casesBlock asset.items %}{% endfilter %}
78
+ }
79
+ {% elif asset.items %}
80
+ {% call casesBlock asset.items %}
81
+ {% endif %}
82
+ {% endfor %}
83
+ {% endmacro %}
84
+ {% macro allValuesBlock assets filter prefix %}
85
+ {% for asset in assets %}
86
+ {% if asset.type == filter %}
87
+ {{prefix}}{{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}},
88
+ {% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %}
89
+ {% set prefix2 %}{{prefix}}{{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}.{% endset %}
90
+ {% call allValuesBlock asset.items filter prefix2 %}
91
+ {% elif asset.items %}
92
+ {% call allValuesBlock asset.items filter prefix %}
93
+ {% endif %}
94
+ {% endfor %}
95
+ {% endmacro %}
96
+ // swiftlint:disable identifier_name line_length nesting type_body_length type_name
97
+ {{accessModifier}} enum {{enumName}} {
98
+ {% if catalogs.count > 1 or param.forceFileNameEnum %}
99
+ {% for catalog in catalogs %}
100
+ {{accessModifier}} enum {{catalog.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
101
+ {% filter indent:2 %}{% call enumBlock catalog.assets %}{% endfilter %}
102
+ }
103
+ {% endfor %}
104
+ {% else %}
105
+ {% call enumBlock catalogs.first.assets %}
106
+ {% endif %}
107
+ }
108
+ // swiftlint:enable identifier_name line_length nesting type_body_length type_name
109
+
110
+ // MARK: - Implementation Details
111
+ {% if resourceCount.arresourcegroup > 0 %}
112
+
113
+ {{accessModifier}} struct {{arResourceGroupType}} {
114
+ {{accessModifier}} fileprivate(set) var name: String
115
+
116
+ #if os(iOS)
117
+ @available(iOS 11.3, *)
118
+ {{accessModifier}} var referenceImages: Set<ARReferenceImage> {
119
+ return ARReferenceImage.referenceImages(in: self)
120
+ }
121
+
122
+ @available(iOS 12.0, *)
123
+ {{accessModifier}} var referenceObjects: Set<ARReferenceObject> {
124
+ return ARReferenceObject.referenceObjects(in: self)
125
+ }
126
+ #endif
127
+ }
128
+
129
+ #if os(iOS)
130
+ @available(iOS 11.3, *)
131
+ {{accessModifier}} extension ARReferenceImage {
132
+ static func referenceImages(in asset: {{arResourceGroupType}}) -> Set<ARReferenceImage> {
133
+ let bundle = {{param.bundle|default:"BundleToken.bundle"}}
134
+ return referenceImages(inGroupNamed: asset.name, bundle: bundle) ?? Set()
135
+ }
136
+ }
137
+
138
+ @available(iOS 12.0, *)
139
+ {{accessModifier}} extension ARReferenceObject {
140
+ static func referenceObjects(in asset: {{arResourceGroupType}}) -> Set<ARReferenceObject> {
141
+ let bundle = {{param.bundle|default:"BundleToken.bundle"}}
142
+ return referenceObjects(inGroupNamed: asset.name, bundle: bundle) ?? Set()
143
+ }
144
+ }
145
+ #endif
146
+ {% endif %}
147
+ {% if resourceCount.color > 0 %}
148
+
149
+ {{accessModifier}} final class {{colorType}} {
150
+ {{accessModifier}} fileprivate(set) var name: String
151
+
152
+ #if os(macOS)
153
+ {{accessModifier}} typealias Color = NSColor
154
+ #elseif os(iOS) || os(tvOS) || os(watchOS)
155
+ {{accessModifier}} typealias Color = UIColor
156
+ #endif
157
+
158
+ @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *)
159
+ {{accessModifier}} private(set) lazy var color: Color = {
160
+ guard let color = Color(asset: self) else {
161
+ fatalError("Unable to load color asset named \(name).")
162
+ }
163
+ return color
164
+ }()
165
+
166
+ fileprivate init(name: String) {
167
+ self.name = name
168
+ }
169
+ }
170
+
171
+ {{accessModifier}} extension {{colorType}}.Color {
172
+ @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *)
173
+ convenience init?(asset: {{colorType}}) {
174
+ let bundle = {{param.bundle|default:"BundleToken.bundle"}}
175
+ #if os(iOS) || os(tvOS)
176
+ self.init(named: asset.name, in: bundle, compatibleWith: nil)
177
+ #elseif os(macOS)
178
+ self.init(named: NSColor.Name(asset.name), bundle: bundle)
179
+ #elseif os(watchOS)
180
+ self.init(named: asset.name)
181
+ #endif
182
+ }
183
+ }
184
+ {% endif %}
185
+ {% if resourceCount.data > 0 %}
186
+
187
+ {{accessModifier}} struct {{dataType}} {
188
+ {{accessModifier}} fileprivate(set) var name: String
189
+
190
+ #if os(iOS) || os(tvOS) || os(macOS)
191
+ @available(iOS 9.0, macOS 10.11, *)
192
+ {{accessModifier}} var data: NSDataAsset {
193
+ guard let data = NSDataAsset(asset: self) else {
194
+ fatalError("Unable to load data asset named \(name).")
195
+ }
196
+ return data
197
+ }
198
+ #endif
199
+ }
200
+
201
+ #if os(iOS) || os(tvOS) || os(macOS)
202
+ @available(iOS 9.0, macOS 10.11, *)
203
+ {{accessModifier}} extension NSDataAsset {
204
+ convenience init?(asset: {{dataType}}) {
205
+ let bundle = {{param.bundle|default:"BundleToken.bundle"}}
206
+ #if os(iOS) || os(tvOS)
207
+ self.init(name: asset.name, bundle: bundle)
208
+ #elseif os(macOS)
209
+ self.init(name: NSDataAsset.Name(asset.name), bundle: bundle)
210
+ #endif
211
+ }
212
+ }
213
+ #endif
214
+ {% endif %}
215
+ {% if resourceCount.image > 0 %}
216
+
217
+ {{accessModifier}} struct {{imageType}} {
218
+ {{accessModifier}} fileprivate(set) var name: String
219
+
220
+ #if os(macOS)
221
+ {{accessModifier}} typealias Image = NSImage
222
+ #elseif os(iOS) || os(tvOS) || os(watchOS)
223
+ {{accessModifier}} typealias Image = UIImage
224
+ #endif
225
+
226
+ {{accessModifier}} var image: Image {
227
+ let bundle = {{param.bundle|default:"BundleToken.bundle"}}
228
+ #if os(iOS) || os(tvOS)
229
+ let image = Image(named: name, in: bundle, compatibleWith: nil)
230
+ #elseif os(macOS)
231
+ let name = NSImage.Name(self.name)
232
+ let image = (bundle == .main) ? NSImage(named: name) : bundle.image(forResource: name)
233
+ #elseif os(watchOS)
234
+ let image = Image(named: name)
235
+ #endif
236
+ guard let result = image else {
237
+ fatalError("Unable to load image asset named \(name).")
238
+ }
239
+ return result
240
+ }
241
+ }
242
+
243
+ {{accessModifier}} extension {{imageType}}.Image {
244
+ @available(macOS, deprecated,
245
+ message: "This initializer is unsafe on macOS, please use the {{imageType}}.image property")
246
+ convenience init?(asset: {{imageType}}) {
247
+ #if os(iOS) || os(tvOS)
248
+ let bundle = {{param.bundle|default:"BundleToken.bundle"}}
249
+ self.init(named: asset.name, in: bundle, compatibleWith: nil)
250
+ #elseif os(macOS)
251
+ self.init(named: NSImage.Name(asset.name))
252
+ #elseif os(watchOS)
253
+ self.init(named: asset.name)
254
+ #endif
255
+ }
256
+ }
257
+ {% endif %}
258
+ {% if not param.bundle %}
259
+
260
+ // swiftlint:disable convenience_type
261
+ private final class BundleToken {
262
+ static let bundle: Bundle = {
263
+ #if SWIFT_PACKAGE
264
+ return Bundle.module
265
+ #else
266
+ return Bundle(for: BundleToken.self)
267
+ #endif
268
+ }()
269
+ }
270
+ // swiftlint:enable convenience_type
271
+ {% endif %}
272
+ {% else %}
273
+ // No assets found
274
+ {% endif %}