danger-localizationlinter 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 %}