Skip to content

Commit

Permalink
feat: escape files starting with a number
Browse files Browse the repository at this point in the history
  • Loading branch information
alephao committed Sep 19, 2024
1 parent fc6588a commit 1ec39b3
Show file tree
Hide file tree
Showing 7 changed files with 41 additions and 16 deletions.
8 changes: 5 additions & 3 deletions Sources/SacogeCore/AssetDirectory.swift
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,9 @@ struct AssetDirectory {

for subpath in subpaths {
#if swift(>=6)
let subpathURL = url.appending(path: subpath)
let subpathURL = url.appending(path: subpath)
#else
let subpathURL = url.appendingPathComponent(subpath)
let subpathURL = url.appendingPathComponent(subpath)
#endif
var isDir: ObjCBool = false
_ = FileManager.default.fileExists(
Expand Down Expand Up @@ -96,7 +96,9 @@ extension AssetDirectory {
}

private var declarationName: String {
url.lastPathComponent.replacingSymbolsWithUnderscores()
url.lastPathComponent
.replacingSymbolsWithUnderscores()
.escapingFirstDigitIfNumber()
}

private func declaration(for child: AssetFileOrDirectory) -> String {
Expand Down
28 changes: 15 additions & 13 deletions Sources/SacogeCore/AssetFile.swift
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ struct AssetFile {
}

#if swift(>=6)
let fileURL = URL(filePath: url.path, directoryHint: .notDirectory)
let fileURL = URL(filePath: url.path, directoryHint: .notDirectory)
#else
let fileURL = URL(fileURLWithPath: url.path)
let fileURL = URL(fileURLWithPath: url.path)
#endif

let data = try Data(contentsOf: fileURL)
Expand All @@ -48,17 +48,17 @@ struct AssetFile {
+ externalURL.pathExtension

#if swift(>=6)
let externalPathWithChecksum =
externalURL
.deletingLastPathComponent()
.appending(path: externalFileName)
.path
let externalPathWithChecksum =
externalURL
.deletingLastPathComponent()
.appending(path: externalFileName)
.path
#else
let externalPathWithChecksum =
externalURL
.deletingLastPathComponent()
.appendingPathComponent(externalFileName)
.path
let externalPathWithChecksum =
externalURL
.deletingLastPathComponent()
.appendingPathComponent(externalFileName)
.path
#endif

self.url = url
Expand All @@ -78,7 +78,9 @@ extension AssetFile {
}

var staticReferenceVarName: String {
url.lastPathComponent.replacingSymbolsWithUnderscores()
url.lastPathComponent
.replacingSymbolsWithUnderscores()
.escapingFirstDigitIfNumber()
}

func dictEntry(parentPath: String) -> String {
Expand Down
6 changes: 6 additions & 0 deletions Sources/SacogeCore/String+Formatting.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@ extension String {
.replacingOccurrences(of: ".", with: "_")
}

func escapingFirstDigitIfNumber() -> String {
(first?.isNumber ?? false)
? "_\(self)"
: self
}

func indent(_ n: Int) -> String {
return String(repeating: " ", count: n) + self
}
Expand Down
1 change: 1 addition & 0 deletions Tests/SacogeCoreTests/GeneratorMappingTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ final class GeneratorMappingTests: GeneratorTestCase {
"""
extension MyAsset {
public static let externalToInternalMapping: [String: String] = [
MyAsset._1_number._2_number_txt.externalPath: MyAsset._1_number._2_number_txt.internalPath,
MyAsset.deep.deep2.deep3.level3_nochecksum_txt.externalPath: MyAsset.deep.deep2.deep3.level3_nochecksum_txt.internalPath,
MyAsset.deep.deep2.deep3.level3_txt.externalPath: MyAsset.deep.deep2.deep3.level3_txt.internalPath,
MyAsset.deep.deep2.level2_nochecksum_txt.externalPath: MyAsset.deep.deep2.level2_nochecksum_txt.internalPath,
Expand Down
6 changes: 6 additions & 0 deletions Tests/SacogeCoreTests/GeneratorStaticReferencesTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ final class GeneratorStaticReferencesTests: GeneratorTestCase {
assertInlineSnapshot(of: generated, as: .lines) {
"""
extension MyAsset {
public enum _1_number {
public static let _2_number_txt = Asset(
internalPath: "1_number/2_number.txt",
externalPath: "/static/immutable/1_number/2_number_e3b0c442.txt"
)
}
public enum deep {
public enum deep2 {
public enum deep3 {
Expand Down
1 change: 1 addition & 0 deletions Tests/SacogeCoreTests/GeneratorTestCase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ class GeneratorTestCase: XCTestCase {
try touch("my_public_files/with-dash.txt")
try touch("my_public_files/with_underscore.txt")
try touch("my_public_files/[email protected]")
try touch("my_public_files/1_number/2_number.txt")

// Ignore
try touch("my_public_files/ignore_this.txt")
Expand Down
7 changes: 7 additions & 0 deletions Tests/SacogeCoreTests/GeneratorTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,12 @@ final class GeneratorTests: GeneratorTestCase {
}
extension MyAsset {
public enum _1_number {
public static let _2_number_txt = Asset(
internalPath: "1_number/2_number.txt",
externalPath: "/static/immutable/1_number/2_number_e3b0c442.txt"
)
}
public enum deep {
public enum deep2 {
public enum deep3 {
Expand Down Expand Up @@ -76,6 +82,7 @@ final class GeneratorTests: GeneratorTestCase {
extension MyAsset {
public static let externalToInternalMapping: [String: String] = [
MyAsset._1_number._2_number_txt.externalPath: MyAsset._1_number._2_number_txt.internalPath,
MyAsset.deep.deep2.deep3.level3_nochecksum_txt.externalPath: MyAsset.deep.deep2.deep3.level3_nochecksum_txt.internalPath,
MyAsset.deep.deep2.deep3.level3_txt.externalPath: MyAsset.deep.deep2.deep3.level3_txt.internalPath,
MyAsset.deep.deep2.level2_nochecksum_txt.externalPath: MyAsset.deep.deep2.level2_nochecksum_txt.internalPath,
Expand Down

0 comments on commit 1ec39b3

Please sign in to comment.