Skip to content

Commit 5ecc967

Browse files
committed
Use SwiftIdentifier in Let/Var/Function
1 parent 23d7406 commit 5ecc967

19 files changed

+121
-128
lines changed

R.swift/Generators/ColorGenerator.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ struct ColorGenerator: Generator {
2828
private static func colorStructFromPalette(palette: ColorPalette) -> Struct? {
2929
if palette.colors.isEmpty { return nil }
3030

31-
let name = sanitizedSwiftName(palette.filename)
31+
let name = SwiftIdentifier(name: palette.filename)
3232
let groupedColors = palette.colors.groupBySwiftIdentifiers { $0.0 }
3333

3434
for (sanitizedName, duplicates) in groupedColors.duplicates {
@@ -60,7 +60,7 @@ struct ColorGenerator: Generator {
6060
"<span style='background-color: #\(color.hexString); color: #\(color.opposite.hexString); padding: 1px 3px;'>#\(color.hexString)</span> \(name)"
6161
],
6262
isStatic: true,
63-
name: name,
63+
name: SwiftIdentifier(name: name),
6464
typeDefinition: .Inferred(Type.ColorResource),
6565
value: "ColorResource(name: \"\(name)\", red: \(color.redComponent), green: \(color.greenComponent), blue: \(color.blueComponent), alpha: \(color.alphaComponent))"
6666
)
@@ -74,7 +74,7 @@ struct ColorGenerator: Generator {
7474
"UIColor(red: \(color.redComponent), green: \(color.greenComponent), blue: \(color.blueComponent), alpha: \(color.alphaComponent))"
7575
],
7676
isStatic: true,
77-
name: name,
77+
name: SwiftIdentifier(name: name),
7878
generics: nil,
7979
parameters: [
8080
Function.Parameter(name: "_", type: Type._Void)

R.swift/Generators/FontGenerator.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ struct FontGenerator: Generator {
1818
Let(
1919
comments: ["Font `\($0.name)`."],
2020
isStatic: true,
21-
name: $0.name,
21+
name: SwiftIdentifier(name: $0.name),
2222
typeDefinition: .Inferred(Type.FontResource),
2323
value: "FontResource(fontName: \"\($0.name)\")"
2424
)
@@ -39,14 +39,14 @@ struct FontGenerator: Generator {
3939
return Function(
4040
comments: ["`UIFont(name: \"\(font.name)\", size: ...)`"],
4141
isStatic: true,
42-
name: font.name,
42+
name: SwiftIdentifier(name: font.name),
4343
generics: nil,
4444
parameters: [
4545
Function.Parameter(name: "size", localName: "size", type: Type._CGFloat)
4646
],
4747
doesThrow: false,
4848
returnType: Type._UIFont.asOptional(),
49-
body: "return UIFont(resource: \(sanitizedSwiftName(font.name)), size: size)"
49+
body: "return UIFont(resource: \(SwiftIdentifier(name: font.name)), size: size)"
5050
)
5151
}
5252
}

R.swift/Generators/ImageGenerator.swift

Lines changed: 30 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -13,56 +13,16 @@ struct ImageGenerator: Generator {
1313
let internalStruct: Struct? = nil
1414

1515
init(assetFolders: [AssetFolder], images: [Image]) {
16-
let assetFolderImageFunctions = assetFolders
16+
let assetFolderImageNames = assetFolders
1717
.flatMap { $0.imageAssets }
18-
.map {
19-
Function(
20-
comments: ["`UIImage(named: \"\($0)\", bundle: ..., traitCollection: ...)`"],
21-
isStatic: true,
22-
name: $0,
23-
generics: nil,
24-
parameters: [
25-
Function.Parameter(
26-
name: "compatibleWithTraitCollection",
27-
localName: "traitCollection",
28-
type: Type._UITraitCollection.asOptional(),
29-
defaultValue: "nil"
30-
)
31-
],
32-
doesThrow: false,
33-
returnType: Type._UIImage.asOptional(),
34-
body: "return UIImage(resource: R.image.\(sanitizedSwiftName($0)), compatibleWithTraitCollection: traitCollection)"
35-
)
36-
}
3718

38-
let uniqueImages = images
19+
let imagesNames = images
3920
.groupBy { $0.name }
4021
.values
41-
.flatMap { $0.first }
22+
.flatMap { $0.first?.name }
4223

43-
let imageFunctions = uniqueImages
44-
.map {
45-
Function(
46-
comments: ["`UIImage(named: \"\($0.name)\", bundle: ..., traitCollection: ...)`"],
47-
isStatic: true,
48-
name: $0.name,
49-
generics: nil,
50-
parameters: [
51-
Function.Parameter(
52-
name: "compatibleWithTraitCollection",
53-
localName: "traitCollection",
54-
type: Type._UITraitCollection.asOptional(),
55-
defaultValue: "nil"
56-
)
57-
],
58-
doesThrow: false,
59-
returnType: Type._UIImage.asOptional(),
60-
body: "return \(Type._UIImage.name)(resource: R.image.\(sanitizedSwiftName($0.name)), compatibleWithTraitCollection: traitCollection)"
61-
)
62-
}
63-
64-
let allFunctions = assetFolderImageFunctions + imageFunctions
65-
let groupedFunctions = allFunctions.groupBySwiftIdentifiers { $0.name }
24+
let allFunctions = assetFolderImageNames + imagesNames
25+
let groupedFunctions = allFunctions.groupBySwiftIdentifiers { $0 }
6626

6727
for (sanitizedName, duplicates) in groupedFunctions.duplicates {
6828
warn("Skipping \(duplicates.count) images because symbol '\(sanitizedName)' would be generated for all of these images: \(duplicates.joinWithSeparator(", "))")
@@ -78,13 +38,13 @@ struct ImageGenerator: Generator {
7838

7939
let imageLets = groupedFunctions
8040
.uniques
81-
.map {
41+
.map { name in
8242
Let(
83-
comments: ["Image `\($0.name)`."],
43+
comments: ["Image `\(name)`."],
8444
isStatic: true,
85-
name: $0.name,
45+
name: SwiftIdentifier(name: name),
8646
typeDefinition: .Inferred(Type.ImageResource),
87-
value: "\(Type.ImageResource.name)(bundle: _R.hostingBundle, name: \"\($0.name)\")"
47+
value: "\(Type.ImageResource.name)(bundle: _R.hostingBundle, name: \"\(name)\")"
8848
)
8949
}
9050

@@ -94,8 +54,28 @@ struct ImageGenerator: Generator {
9454
implements: [],
9555
typealiasses: [],
9656
properties: imageLets.map(anyProperty),
97-
functions: groupedFunctions.uniques,
57+
functions: groupedFunctions.uniques.map(ImageGenerator.functionForImageName),
9858
structs: []
9959
)
10060
}
61+
62+
static func functionForImageName(name: String) -> Function {
63+
return Function(
64+
comments: ["`UIImage(named: \"\(name)\", bundle: ..., traitCollection: ...)`"],
65+
isStatic: true,
66+
name: SwiftIdentifier(name: name),
67+
generics: nil,
68+
parameters: [
69+
Function.Parameter(
70+
name: "compatibleWithTraitCollection",
71+
localName: "traitCollection",
72+
type: Type._UITraitCollection.asOptional(),
73+
defaultValue: "nil"
74+
)
75+
],
76+
doesThrow: false,
77+
returnType: Type._UIImage.asOptional(),
78+
body: "return \(Type._UIImage.name)(resource: R.image.\(SwiftIdentifier(name: name)), compatibleWithTraitCollection: traitCollection)"
79+
)
80+
}
10181
}

R.swift/Generators/NibGenerator.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -83,24 +83,24 @@ struct NibGenerator: Generator {
8383
return Function(
8484
comments: ["`UINib(name: \"\(nib.name)\", bundle: ...)`"],
8585
isStatic: true,
86-
name: nib.name,
86+
name: SwiftIdentifier(name: nib.name),
8787
generics: nil,
8888
parameters: [
8989
Function.Parameter(name: "_", type: Type._Void)
9090
],
9191
doesThrow: false,
9292
returnType: Type._UINib,
93-
body: "return UINib(resource: R.nib.\(sanitizedSwiftName(nib.name)))"
93+
body: "return UINib(resource: R.nib.\(SwiftIdentifier(name: nib.name)))"
9494
)
9595
}
9696

9797
private static func nibVarForNib(nib: Nib) -> Let {
98-
let nibStructName = sanitizedSwiftName("_\(nib.name)")
99-
let structType = Type(module: .Host, name: "_R.nib.\(nibStructName)")
98+
let nibStructName = SwiftIdentifier(name: "_\(nib.name)")
99+
let structType = Type(module: .Host, name: SwiftIdentifier(rawValue: "_R.nib.\(nibStructName)"))
100100
return Let(
101101
comments: ["Nib `\(nib.name)`."],
102102
isStatic: true,
103-
name: nib.name,
103+
name: SwiftIdentifier(name: nib.name),
104104
typeDefinition: .Inferred(structType),
105105
value: "\(structType)()"
106106
)
@@ -110,7 +110,7 @@ struct NibGenerator: Generator {
110110

111111
let instantiateParameters = [
112112
Function.Parameter(name: "owner", localName: "ownerOrNil", type: Type._AnyObject.asOptional()),
113-
Function.Parameter(name: "options", localName: "optionsOrNil", type: Type(module: .StdLib, name: "[NSObject : AnyObject]", optional: true), defaultValue: "nil")
113+
Function.Parameter(name: "options", localName: "optionsOrNil", type: Type(module: .StdLib, name: SwiftIdentifier(rawValue: "[NSObject : AnyObject]"), optional: true), defaultValue: "nil")
114114
]
115115

116116
let bundleLet = Let(
@@ -134,7 +134,7 @@ struct NibGenerator: Generator {
134134
let viewTypeString = viewInfo.view.description
135135
return Function(
136136
isStatic: false,
137-
name: "\(viewInfo.ordinal.word)View",
137+
name: SwiftIdentifier(name: "\(viewInfo.ordinal.word)View"),
138138
generics: nil,
139139
parameters: instantiateParameters,
140140
doesThrow: false,
@@ -161,9 +161,9 @@ struct NibGenerator: Generator {
161161
reuseProtocols = []
162162
}
163163

164-
let sanitizedName = sanitizedSwiftName(nib.name, lowercaseFirstCharacter: false)
164+
let sanitizedName = SwiftIdentifier(name: nib.name, lowercaseFirstCharacter: false)
165165
return Struct(
166-
type: Type(module: .Host, name: "_\(sanitizedName)"),
166+
type: Type(module: .Host, name: SwiftIdentifier(name: "_\(sanitizedName)")),
167167
implements: ([Type.NibResourceType] + reuseProtocols).map(TypePrinter.init),
168168
typealiasses: reuseTypealiasses,
169169
properties: [bundleLet, nameVar] + reuseIdentifierProperties,

R.swift/Generators/ResourceFileGenerator.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ struct ResourceFileGenerator: Generator {
3434
return Let(
3535
comments: ["Resource file `\($0.fullname)`."],
3636
isStatic: true,
37-
name: $0.fullname,
37+
name: SwiftIdentifier(name: $0.fullname),
3838
typeDefinition: .Inferred(Type.FileResource),
3939
value: "FileResource(bundle: _R.hostingBundle, name: \"\($0.filename)\", pathExtension: \(pathExtensionOrNilString))"
4040
)
@@ -50,14 +50,14 @@ struct ResourceFileGenerator: Generator {
5050
Function(
5151
comments: ["`bundle.URLForResource(\"\(filename)\", withExtension: \(pathExtension))`"],
5252
isStatic: true,
53-
name: fullname,
53+
name: SwiftIdentifier(name: fullname),
5454
generics: nil,
5555
parameters: [
5656
Function.Parameter(name: "_", type: Type._Void)
5757
],
5858
doesThrow: false,
5959
returnType: Type._NSURL.asOptional(),
60-
body: "let fileResource = R.file.\(sanitizedSwiftName(fullname))\nreturn fileResource.bundle.URLForResource(fileResource)"
60+
body: "let fileResource = R.file.\(SwiftIdentifier(name: fullname))\nreturn fileResource.bundle.URLForResource(fileResource)"
6161
)
6262
]
6363
}

R.swift/Generators/ReuseIdentifierGenerator.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ struct ReuseIdentifierGenerator: Generator {
5151
return Let(
5252
comments: ["Reuse identifier `\(reusable.identifier)`."],
5353
isStatic: true,
54-
name: reusable.identifier,
54+
name: SwiftIdentifier(name: reusable.identifier),
5555
typeDefinition: .Specified(Type.ReuseIdentifier.withGenericArgs([reusable.type])),
5656
value: "\(Type.ReuseIdentifier.name)(identifier: \"\(reusable.identifier)\")"
5757
)

R.swift/Generators/SegueGenerator.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ struct SegueGenerator: Generator {
116116
return Let(
117117
comments: ["Segue identifier `\(segueWithInfo.segue.identifier)`."],
118118
isStatic: true,
119-
name: segueWithInfo.segue.identifier,
119+
name: SwiftIdentifier(name: segueWithInfo.segue.identifier),
120120
typeDefinition: .Specified(type),
121121
value: "StoryboardSegueIdentifier(identifier: \"\(segueWithInfo.segue.identifier)\")"
122122
)
@@ -130,7 +130,7 @@ struct SegueGenerator: Generator {
130130
"For use inside `prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)`."
131131
],
132132
isStatic: true,
133-
name: segueWithInfo.segue.identifier,
133+
name: SwiftIdentifier(name: segueWithInfo.segue.identifier),
134134
generics: nil,
135135
parameters: [
136136
Function.Parameter.init(name: "segue", localName: "segue", type: Type._UIStoryboardSegue)
@@ -139,11 +139,11 @@ struct SegueGenerator: Generator {
139139
returnType: Type.TypedStoryboardSegueInfo
140140
.asOptional()
141141
.withGenericArgs([segueWithInfo.segue.type, segueWithInfo.sourceType, segueWithInfo.destinationType]),
142-
body: "return TypedStoryboardSegueInfo(segueIdentifier: R.segue.\(sanitizedSwiftName(sourceType.description)).\(sanitizedSwiftName(segueWithInfo.segue.identifier)), segue: segue)"
142+
body: "return TypedStoryboardSegueInfo(segueIdentifier: R.segue.\(SwiftIdentifier(name: sourceType.description)).\(SwiftIdentifier(name: segueWithInfo.segue.identifier)), segue: segue)"
143143
)
144144
}
145145

146-
let typeName = sanitizedSwiftName(sourceType.description)
146+
let typeName = SwiftIdentifier(name: sourceType.description)
147147

148148
return Struct(
149149
comments: ["This struct is generated for `\(sourceType.name)`, and contains static references to \(properties.count) segues."],

R.swift/Generators/StoryboardGenerator.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ struct StoryboardGenerator: Generator {
120120
vc,
121121
Let(
122122
isStatic: false,
123-
name: sanitizedSwiftName(identifier),
123+
name: SwiftIdentifier(name: identifier),
124124
typeDefinition: .Inferred(Type.StoryboardViewControllerResource),
125125
value: "\(Type.StoryboardViewControllerResource.name)<\(vc.type)>(identifier: \"\(identifier)\")"
126126
)
@@ -153,7 +153,7 @@ struct StoryboardGenerator: Generator {
153153
let validateViewControllersLines = storyboard.viewControllers
154154
.flatMap { vc in
155155
vc.storyboardIdentifier.map {
156-
"if _R.storyboard.\(sanitizedSwiftName(storyboard.name))().\(sanitizedSwiftName($0))() == nil { throw ValidationError(description:\"[R.swift] ViewController with identifier '\(sanitizedSwiftName($0))' could not be loaded from storyboard '\(storyboard.name)' as '\(vc.type)'.\") }"
156+
"if _R.storyboard.\(SwiftIdentifier(name: storyboard.name))().\(SwiftIdentifier(name: $0))() == nil { throw ValidationError(description:\"[R.swift] ViewController with identifier '\(SwiftIdentifier(name: $0))' could not be loaded from storyboard '\(storyboard.name)' as '\(vc.type)'.\") }"
157157
}
158158
}
159159
let validateLines = validateImagesLines + validateViewControllersLines
@@ -174,7 +174,7 @@ struct StoryboardGenerator: Generator {
174174

175175
// Return
176176
return Struct(
177-
type: Type(module: .Host, name: sanitizedSwiftName(storyboard.name)),
177+
type: Type(module: .Host, name: SwiftIdentifier(name: storyboard.name)),
178178
implements: implements,
179179
typealiasses: typealiasses,
180180
properties: properties,

R.swift/Generators/StringsGenerator.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ struct StringsGenerator: Generator {
4242

4343
private static func stringStructFromLocalizableStrings(filename: String, strings: [LocalizableStrings]) -> Struct? {
4444

45-
let name = sanitizedSwiftName(filename)
45+
let name = SwiftIdentifier(name: filename)
4646
let params = computeParams(filename, strings: strings)
4747

4848
return Struct(
@@ -186,7 +186,7 @@ struct StringsGenerator: Generator {
186186
return Let(
187187
comments: values.comments,
188188
isStatic: true,
189-
name: values.key,
189+
name: SwiftIdentifier(name: values.key),
190190
typeDefinition: .Inferred(Type.StringResource),
191191
value: "StringResource(key: \"\(escapedKey)\", tableName: \"\(values.tableName)\", locales: [\(locales)])"
192192
)
@@ -206,7 +206,7 @@ struct StringsGenerator: Generator {
206206
return Function(
207207
comments: values.comments,
208208
isStatic: true,
209-
name: values.key,
209+
name: SwiftIdentifier(name: values.key),
210210
generics: nil,
211211
parameters: [
212212
Function.Parameter(name: "_", type: Type._Void)
@@ -240,7 +240,7 @@ struct StringsGenerator: Generator {
240240
return Function(
241241
comments: values.comments,
242242
isStatic: true,
243-
name: values.key,
243+
name: SwiftIdentifier(name: values.key),
244244
generics: nil,
245245
parameters: params,
246246
doesThrow: false,

R.swift/ResourceTypes/Nib.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,9 @@ private class NibParserDelegate: NSObject, NSXMLParserDelegate {
8585
let customModuleProvider = attributeDict["customModuleProvider"]
8686
let customModule = (customModuleProvider == "target") ? nil : attributeDict["customModule"]
8787
let customClass = attributeDict["customClass"]
88-
let customType = customClass.map { Type(module: Module(name: customModule), name: $0, optional: false) }
88+
let customType = customClass
89+
.map { SwiftIdentifier(name: $0, lowercaseFirstCharacter: false) }
90+
.map { Type(module: Module(name: customModule), name: $0, optional: false) }
8991

9092
return customType ?? ElementNameToTypeMapping[elementName] ?? Type._UIView
9193
}
@@ -98,7 +100,9 @@ private class NibParserDelegate: NSObject, NSXMLParserDelegate {
98100
let customModuleProvider = attributeDict["customModuleProvider"]
99101
let customModule = (customModuleProvider == "target") ? nil : attributeDict["customModule"]
100102
let customClass = attributeDict["customClass"]
101-
let customType = customClass.map { Type(module: Module(name: customModule), name: $0, optional: false) }
103+
let customType = customClass
104+
.map { SwiftIdentifier(name: $0, lowercaseFirstCharacter: false) }
105+
.map { Type(module: Module(name: customModule), name: $0, optional: false) }
102106

103107
let type = customType ?? ElementNameToTypeMapping[elementName] ?? Type._UIView
104108

0 commit comments

Comments
 (0)