diff --git a/Apollo.xcodeproj/project.pbxproj b/Apollo.xcodeproj/project.pbxproj index 8a1fa4948d..00c5d80a0c 100644 --- a/Apollo.xcodeproj/project.pbxproj +++ b/Apollo.xcodeproj/project.pbxproj @@ -182,6 +182,7 @@ 9FF90A6F1DDDEB420034C3B6 /* InputValueEncodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FF90A6A1DDDEB420034C3B6 /* InputValueEncodingTests.swift */; }; 9FF90A711DDDEB420034C3B6 /* ReadFieldValueTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FF90A6B1DDDEB420034C3B6 /* ReadFieldValueTests.swift */; }; 9FF90A731DDDEB420034C3B6 /* ParseQueryResponseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FF90A6C1DDDEB420034C3B6 /* ParseQueryResponseTests.swift */; }; + AE1CFBD0245EBA25002C8CEE /* ApolloExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE1CFBCE245EB998002C8CEE /* ApolloExtension.swift */; }; C3279FC72345234D00224790 /* TestCustomRequestCreator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3279FC52345233000224790 /* TestCustomRequestCreator.swift */; }; C338DF1722DD9DE9006AF33E /* RequestCreatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C338DF1622DD9DE9006AF33E /* RequestCreatorTests.swift */; }; C35D43C222DDD4AC00BCBABE /* b.txt in Resources */ = {isa = PBXBuildFile; fileRef = C35D43BE22DDD3C100BCBABE /* b.txt */; }; @@ -572,6 +573,7 @@ 9FF90A6A1DDDEB420034C3B6 /* InputValueEncodingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputValueEncodingTests.swift; sourceTree = ""; }; 9FF90A6B1DDDEB420034C3B6 /* ReadFieldValueTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReadFieldValueTests.swift; sourceTree = ""; }; 9FF90A6C1DDDEB420034C3B6 /* ParseQueryResponseTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ParseQueryResponseTests.swift; sourceTree = ""; }; + AE1CFBCE245EB998002C8CEE /* ApolloExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApolloExtension.swift; sourceTree = ""; }; C304EBD322DDC7B200748F72 /* a.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = a.txt; sourceTree = ""; }; C3279FC52345233000224790 /* TestCustomRequestCreator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestCustomRequestCreator.swift; sourceTree = ""; }; C338DF1622DD9DE9006AF33E /* RequestCreatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestCreatorTests.swift; sourceTree = ""; }; @@ -769,6 +771,7 @@ 9BD681302405F676000874CB /* Output */, 9B8788702405F0150008789E /* Parsing */, 9BD681342405F6D1000874CB /* SchemaDownload */, + AE1CFBCE245EB998002C8CEE /* ApolloExtension.swift */, 9B518C8A235F8B05004C426D /* ApolloFilePathHelper.swift */, 9BD6812E2405F665000874CB /* JSON.swift */, 9BAEEBF22346DDAD00808306 /* CodegenLogger.swift */, @@ -1830,6 +1833,7 @@ 9BD6812B2405F410000874CB /* ASTFragment.swift in Sources */, 9B68F04A24130D6500E97318 /* EnumGenerator.swift in Sources */, 9B7B6F69233C2C0C00F32205 /* FileManager+Apollo.swift in Sources */, + AE1CFBD0245EBA25002C8CEE /* ApolloExtension.swift in Sources */, 9BE74D3D23FB4A8E006D354F /* FileFinder.swift in Sources */, 9B7B6F59233C287200F32205 /* ApolloCodegen.swift in Sources */, 9BD6813E2405FAC8000874CB /* ASTField.swift in Sources */, diff --git a/Sources/ApolloCodegenLib/ASTVariableType.swift b/Sources/ApolloCodegenLib/ASTVariableType.swift index d0ce9b3699..907434a852 100644 --- a/Sources/ApolloCodegenLib/ASTVariableType.swift +++ b/Sources/ApolloCodegenLib/ASTVariableType.swift @@ -46,7 +46,7 @@ class ASTForthcomingVariableType: Codable { case .LIST: return "[\(inner)]?" case .NON_NULL: - return try inner.apollo_droppingSuffix("?") + return try inner.apollo.droppingSuffix("?") case .ENUM, .INPUT_OBJECT, .INTERFACE, diff --git a/Sources/ApolloCodegenLib/ApolloCodegen.swift b/Sources/ApolloCodegenLib/ApolloCodegen.swift index 2660a3da81..f8bb35c9e4 100644 --- a/Sources/ApolloCodegenLib/ApolloCodegen.swift +++ b/Sources/ApolloCodegenLib/ApolloCodegen.swift @@ -29,15 +29,15 @@ public class ApolloCodegen { public static func run(from folder: URL, with cliFolderURL: URL, options: ApolloCodegenOptions) throws -> String { - guard FileManager.default.apollo_folderExists(at: folder) else { + guard FileManager.default.apollo.folderExists(at: folder) else { throw CodegenError.folderDoesNotExist(folder) } switch options.outputFormat { case .multipleFiles(let folderURL): - try FileManager.default.apollo_createFolderIfNeeded(at: folderURL) + try FileManager.default.apollo.createFolderIfNeeded(at: folderURL) case .singleFile(let fileURL): - try FileManager.default.apollo_createContainingFolderIfNeeded(for: fileURL) + try FileManager.default.apollo.createContainingFolderIfNeeded(for: fileURL) } let cli = try ApolloCLI.createCLI(cliFolderURL: cliFolderURL, timeout: options.downloadTimeout) diff --git a/Sources/ApolloCodegenLib/ApolloExtension.swift b/Sources/ApolloCodegenLib/ApolloExtension.swift new file mode 100644 index 0000000000..749de8fe38 --- /dev/null +++ b/Sources/ApolloCodegenLib/ApolloExtension.swift @@ -0,0 +1,21 @@ +import Foundation + +public struct ApolloExtension { + public let base: Base +} + +public protocol ApolloCompatible { + associatedtype Base + var apollo: ApolloExtension { get } + static var apollo: ApolloExtension.Type { get } +} + +extension ApolloCompatible { + public var apollo: ApolloExtension { + ApolloExtension(base: self) + } + + public static var apollo: ApolloExtension.Type { + ApolloExtension.self + } +} diff --git a/Sources/ApolloCodegenLib/ApolloSchemaDownloader.swift b/Sources/ApolloCodegenLib/ApolloSchemaDownloader.swift index 9118d24ef7..13de73c727 100644 --- a/Sources/ApolloCodegenLib/ApolloSchemaDownloader.swift +++ b/Sources/ApolloCodegenLib/ApolloSchemaDownloader.swift @@ -15,7 +15,7 @@ public struct ApolloSchemaDownloader { @discardableResult public static func run(with cliFolderURL: URL, options: ApolloSchemaOptions) throws -> String { - try FileManager.default.apollo_createContainingFolderIfNeeded(for: options.outputURL) + try FileManager.default.apollo.createContainingFolderIfNeeded(for: options.outputURL) let cli = try ApolloCLI.createCLI(cliFolderURL: cliFolderURL, timeout: options.downloadTimeout) return try cli.runApollo(with: options.arguments) diff --git a/Sources/ApolloCodegenLib/CLIDownloader.swift b/Sources/ApolloCodegenLib/CLIDownloader.swift index 077c7e15c9..9d5e698595 100644 --- a/Sources/ApolloCodegenLib/CLIDownloader.swift +++ b/Sources/ApolloCodegenLib/CLIDownloader.swift @@ -39,7 +39,7 @@ struct CLIDownloader { /// - timeout: The maximum time to wait before indicating that the download timed out, in seconds. static func downloadIfNeeded(cliFolderURL: URL, timeout: Double) throws { let zipFileURL = ApolloFilePathHelper.zipFileURL(fromCLIFolder: cliFolderURL) - guard !FileManager.default.apollo_fileExists(at: zipFileURL) else { + guard !FileManager.default.apollo.fileExists(at: zipFileURL) else { CodegenLogger.log("Zip file with the CLI is already downloaded!") return } @@ -54,9 +54,9 @@ struct CLIDownloader { /// - timeout: The maximum time to wait before indicating that the download timed out, in seconds. static func forceRedownload(cliFolderURL: URL, timeout: Double) throws { let zipFileURL = ApolloFilePathHelper.zipFileURL(fromCLIFolder: cliFolderURL) - try FileManager.default.apollo_deleteFile(at: zipFileURL) + try FileManager.default.apollo.deleteFile(at: zipFileURL) let apolloFolderURL = ApolloFilePathHelper.apolloFolderURL(fromCLIFolder: cliFolderURL) - try FileManager.default.apollo_deleteFolder(at: apolloFolderURL) + try FileManager.default.apollo.deleteFolder(at: apolloFolderURL) try self.download(to: zipFileURL, timeout: timeout) } @@ -67,7 +67,7 @@ struct CLIDownloader { /// - zipFileURL: The URL where downloaded data should be saved. /// - timeout: The maximum time to wait before indicating that the download timed out, in seconds. private static func download(to zipFileURL: URL, timeout: Double) throws { - try FileManager.default.apollo_createContainingFolderIfNeeded(for: zipFileURL) + try FileManager.default.apollo.createContainingFolderIfNeeded(for: zipFileURL) CodegenLogger.log("Downloading zip file with the CLI...") let semaphore = DispatchSemaphore(value: 0) diff --git a/Sources/ApolloCodegenLib/CLIExtractor.swift b/Sources/ApolloCodegenLib/CLIExtractor.swift index 36e1a39213..177fe75463 100644 --- a/Sources/ApolloCodegenLib/CLIExtractor.swift +++ b/Sources/ApolloCodegenLib/CLIExtractor.swift @@ -35,22 +35,22 @@ struct CLIExtractor { static func extractCLIIfNeeded(from cliFolderURL: URL, expectedSHASUM: String = CLIExtractor.expectedSHASUM) throws -> URL { let apolloFolderURL = ApolloFilePathHelper.apolloFolderURL(fromCLIFolder: cliFolderURL) - guard FileManager.default.apollo_folderExists(at: apolloFolderURL) else { + guard FileManager.default.apollo.folderExists(at: apolloFolderURL) else { CodegenLogger.log("Apollo folder doesn't exist, extracting CLI from zip file.") return try self.extractCLIFromZip(cliFolderURL: cliFolderURL) } guard try self.validateSHASUMInExtractedFile(apolloFolderURL: apolloFolderURL, expected: expectedSHASUM) else { CodegenLogger.log("SHASUM of extracted zip does not match expected, deleting existing folder and re-extracting.") - try FileManager.default.apollo_deleteFolder(at: apolloFolderURL) + try FileManager.default.apollo.deleteFolder(at: apolloFolderURL) return try self.extractCLIFromZip(cliFolderURL: cliFolderURL) } let binaryFolderURL = ApolloFilePathHelper.binaryFolderURL(fromApollo: apolloFolderURL) let binaryURL = ApolloFilePathHelper.binaryURL(fromBinaryFolder: binaryFolderURL) - guard FileManager.default.apollo_fileExists(at: binaryURL) else { + guard FileManager.default.apollo.fileExists(at: binaryURL) else { CodegenLogger.log("There was a valid `.shasum` file, but no binary at the expected path. Deleting existing apollo folder and re-extracting.", logLevel: .warning) - try FileManager.default.apollo_deleteFolder(at: apolloFolderURL) + try FileManager.default.apollo.deleteFolder(at: apolloFolderURL) return try self.extractCLIFromZip(cliFolderURL: cliFolderURL, expectedSHASUM: expectedSHASUM) } @@ -65,7 +65,7 @@ struct CLIExtractor { /// - Returns: true if the shasums match, false if not. static func validateSHASUMInExtractedFile(apolloFolderURL: URL, expected: String = CLIExtractor.expectedSHASUM) throws -> Bool { let shasumFileURL = ApolloFilePathHelper.shasumFileURL(fromApollo: apolloFolderURL) - guard FileManager.default.apollo_fileExists(at: shasumFileURL) else { + guard FileManager.default.apollo.fileExists(at: shasumFileURL) else { return false } @@ -104,7 +104,7 @@ struct CLIExtractor { let apolloFolderURL = ApolloFilePathHelper.apolloFolderURL(fromCLIFolder: cliFolderURL) let binaryFolderURL = ApolloFilePathHelper.binaryFolderURL(fromApollo: apolloFolderURL) - guard FileManager.default.apollo_folderExists(at: binaryFolderURL) else { + guard FileManager.default.apollo.folderExists(at: binaryFolderURL) else { throw CLIExtractorError.noBinaryFolderAfterUnzipping(atURL: binaryFolderURL) } @@ -118,7 +118,7 @@ struct CLIExtractor { /// - Parameter zipFileURL: The url to the zip file containing the Apollo CLI. /// - Parameter expected: The expected SHASUM. Defaults to the real expected SHASUM. This parameter exists mostly for testing. static func validateZipFileSHASUM(at zipFileURL: URL, expected: String = CLIExtractor.expectedSHASUM) throws { - let shasum = try FileManager.default.apollo_shasum(at: zipFileURL) + let shasum = try FileManager.default.apollo.shasum(at: zipFileURL) print("SHASUM: \(shasum)") guard shasum == expected else { throw CLIExtractorError.zipFileHasInvalidSHASUM(expectedSHASUM: expected, gotSHASUM: shasum) diff --git a/Sources/ApolloCodegenLib/CodeGenerator.swift b/Sources/ApolloCodegenLib/CodeGenerator.swift index 2dd59ae67a..5e1927e2e4 100644 --- a/Sources/ApolloCodegenLib/CodeGenerator.swift +++ b/Sources/ApolloCodegenLib/CodeGenerator.swift @@ -66,7 +66,7 @@ public class CodeGenerator { private func createFileWithOutput(_ output: String, named name: String, inFolder folderURL: URL) throws { - try FileManager.default.apollo_createFolderIfNeeded(at: folderURL) + try FileManager.default.apollo.createFolderIfNeeded(at: folderURL) let fileURL = folderURL .appendingPathComponent(name) .appendingPathExtension("swift") diff --git a/Sources/ApolloCodegenLib/CodegenLogger.swift b/Sources/ApolloCodegenLib/CodegenLogger.swift index 133ed339bd..4c58c3ef4d 100644 --- a/Sources/ApolloCodegenLib/CodegenLogger.swift +++ b/Sources/ApolloCodegenLib/CodegenLogger.swift @@ -39,7 +39,7 @@ public struct CodegenLogger { } var standardOutput = FileHandle.standardOutput - print("[\(logLevel.name) - ApolloCodegenLib:\(file.apollo_lastPathComponent):\(line)] - \(logString())", to: &standardOutput) + print("[\(logLevel.name) - ApolloCodegenLib:\(file.apollo.lastPathComponent):\(line)] - \(logString())", to: &standardOutput) } } diff --git a/Sources/ApolloCodegenLib/EnumGenerator.swift b/Sources/ApolloCodegenLib/EnumGenerator.swift index e780c72c51..5c5f6bcb58 100644 --- a/Sources/ApolloCodegenLib/EnumGenerator.swift +++ b/Sources/ApolloCodegenLib/EnumGenerator.swift @@ -21,8 +21,8 @@ public class EnumGenerator { init(astEnumValue: ASTEnumValue) { self.name = astEnumValue.name - self.nameVariableDeclaration = astEnumValue.name.apollo_sanitizedVariableDeclaration - self.nameUsage = astEnumValue.name.apollo_sanitizedVariableUsage + self.nameVariableDeclaration = astEnumValue.name.apollo.sanitizedVariableDeclaration + self.nameUsage = astEnumValue.name.apollo.sanitizedVariableUsage self.description = astEnumValue.description self.isDeprecated = astEnumValue.isDeprecated } diff --git a/Sources/ApolloCodegenLib/FileFinder.swift b/Sources/ApolloCodegenLib/FileFinder.swift index 36729acfce..ecf11a615e 100644 --- a/Sources/ApolloCodegenLib/FileFinder.swift +++ b/Sources/ApolloCodegenLib/FileFinder.swift @@ -3,7 +3,7 @@ import Foundation public struct FileFinder { public static func findParentFolder(from filePath: StaticString = #file) -> URL { - self.findParentFolder(from: filePath.apollo_toString) + self.findParentFolder(from: filePath.apollo.toString) } public static func findParentFolder(from filePath: String) -> URL { diff --git a/Sources/ApolloCodegenLib/FileManager+Apollo.swift b/Sources/ApolloCodegenLib/FileManager+Apollo.swift index 1451bb7ba5..29d3ce0e57 100644 --- a/Sources/ApolloCodegenLib/FileManager+Apollo.swift +++ b/Sources/ApolloCodegenLib/FileManager+Apollo.swift @@ -1,35 +1,35 @@ import Foundation import CommonCrypto -public extension FileManager { +extension FileManager: ApolloCompatible {} +extension ApolloExtension where Base == FileManager { + /// Checks if a file exists (and is not a folder) at the given path - /// + /// /// - Parameter path: The path to check /// - Returns: `true` if there is something at the path and it is a file, not a folder. - func apollo_fileExists(at path: String) -> Bool { + public func fileExists(at path: String) -> Bool { var isFolder = ObjCBool(false) - let exists = self.fileExists(atPath: path, isDirectory: &isFolder) - + let exists = base.fileExists(atPath: path, isDirectory: &isFolder) return exists && !isFolder.boolValue } - + /// Checks if a file exists (and is not a folder) at the given URL /// /// - Parameter url: The URL to check /// - Returns: `true` if there is something at the URL and it is a file, not a folder. - func apollo_fileExists(at url: URL) -> Bool { - return self.apollo_fileExists(at: url.path) + public func fileExists(at url: URL) -> Bool { + return fileExists(at: url.path) } - + /// Checks if a folder exists (and is not a file) at the given path. /// /// - Parameter path: The path to check /// - Returns: `true` if there is something at the path and it is a folder, not a file. - func apollo_folderExists(at path: String) -> Bool { + public func folderExists(at path: String) -> Bool { var isFolder = ObjCBool(false) - let exists = self.fileExists(atPath: path, isDirectory: &isFolder) - + let exists = base.fileExists(atPath: path, isDirectory: &isFolder) return exists && isFolder.boolValue } @@ -37,59 +37,55 @@ public extension FileManager { /// /// - Parameter url: The URL to check /// - Returns: `true` if there is something at the URL and it is a folder, not a file. - func apollo_folderExists(at url: URL) -> Bool { - return self.apollo_folderExists(at: url.path) + public func folderExists(at url: URL) -> Bool { + return folderExists(at: url.path) } /// Checks if a folder exists then attempts to delete it if it's there. - /// + /// /// - Parameter url: The URL to delete the folder for - func apollo_deleteFolder(at url: URL) throws { - guard apollo_folderExists(at: url) else { + public func deleteFolder(at url: URL) throws { + guard folderExists(at: url) else { // Nothing to delete! return } - - try self.removeItem(at: url) + try base.removeItem(at: url) } /// Checks if a file exists then attempts to delete it if it's there. /// /// - Parameter url: The URL to delete the file for - func apollo_deleteFile(at url: URL) throws { - guard apollo_fileExists(at: url) else { + public func deleteFile(at url: URL) throws { + guard fileExists(at: url) else { // Nothing to delete! return } - - try self.removeItem(at: url) + try base.removeItem(at: url) } /// Creates the containing folder (including all intermediate directories) for the given file URL if necessary. /// /// - Parameter fileURL: The URL of the file to create a containing folder for if necessary. - func apollo_createContainingFolderIfNeeded(for fileURL: URL) throws { + public func createContainingFolderIfNeeded(for fileURL: URL) throws { let parent = fileURL.deletingLastPathComponent() - try self.apollo_createFolderIfNeeded(at: parent) + try createFolderIfNeeded(at: parent) } /// Creates the folder (including all intermediate directories) for the given URL if necessary. /// /// - Parameter url: The URL of the folder to create if necessary. - func apollo_createFolderIfNeeded(at url: URL) throws { - guard !self.apollo_folderExists(at: url) else { + public func createFolderIfNeeded(at url: URL) throws { + guard !folderExists(at: url) else { // Folder already exists, nothing more to do here. return } - - try self.createDirectory(atPath: url.path, - withIntermediateDirectories: true) + try base.createDirectory(atPath: url.path, withIntermediateDirectories: true) } /// Calculates the SHASUM (ie, SHA256 hash) of the given file /// /// - Parameter fileURL: The file to calculate the SHASUM for. - func apollo_shasum(at fileURL: URL) throws -> String { + public func shasum(at fileURL: URL) throws -> String { let file = try FileHandle(forReadingFrom: fileURL) defer { file.closeFile() diff --git a/Sources/ApolloCodegenLib/OptionalBoolean.swift b/Sources/ApolloCodegenLib/OptionalBoolean.swift index e0c049dffd..5caec55ed9 100644 --- a/Sources/ApolloCodegenLib/OptionalBoolean.swift +++ b/Sources/ApolloCodegenLib/OptionalBoolean.swift @@ -1,8 +1,8 @@ import Foundation extension Optional where Wrapped == Bool { - - var apollo_boolValue: Bool { + /// It returns false if it is called on `nil` + var boolValue: Bool { switch self { case .none: return false diff --git a/Sources/ApolloCodegenLib/StaticString+Apollo.swift b/Sources/ApolloCodegenLib/StaticString+Apollo.swift index a99651ecef..8bd53f3c6e 100644 --- a/Sources/ApolloCodegenLib/StaticString+Apollo.swift +++ b/Sources/ApolloCodegenLib/StaticString+Apollo.swift @@ -1,13 +1,14 @@ import Foundation -extension StaticString { - - var apollo_lastPathComponent: String { - return (self.apollo_toString as NSString).lastPathComponent +extension StaticString: ApolloCompatible {} + +extension ApolloExtension where Base == StaticString { + var lastPathComponent: String { + return (toString as NSString).lastPathComponent } - var apollo_toString: String { - return self.withUTF8Buffer { + var toString: String { + return base.withUTF8Buffer { String(decoding: $0, as: UTF8.self) } } diff --git a/Sources/ApolloCodegenLib/String+Apollo.swift b/Sources/ApolloCodegenLib/String+Apollo.swift index 1c62d03f2b..96df1a317c 100644 --- a/Sources/ApolloCodegenLib/String+Apollo.swift +++ b/Sources/ApolloCodegenLib/String+Apollo.swift @@ -1,16 +1,18 @@ import Foundation -extension String { - enum ApolloStringError: Error { - case expectedSuffixMissing(_ suffix: String) - } +enum ApolloStringError: Error { + case expectedSuffixMissing(_ suffix: String) +} + +extension String: ApolloCompatible {} + +extension ApolloExtension where Base == String { - func apollo_droppingSuffix(_ suffix: String) throws -> String { - guard self.hasSuffix(suffix) else { + func droppingSuffix(_ suffix: String) throws -> String { + guard base.hasSuffix(suffix) else { throw ApolloStringError.expectedSuffixMissing(suffix) } - - return String(self.dropLast(suffix.count)) + return String(base.dropLast(suffix.count)) } /// Swift identifiers that are keywords @@ -19,7 +21,7 @@ extension String { /// context. As we don"t understand context, we will treat them as keywords in all contexts. /// /// This list does not include keywords that aren"t identifiers, such as `#available`. - static var apollo_reservedKeywords: Set { + static var reservedKeywords: Set { [ // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID413 // Keywords used in declarations @@ -54,26 +56,22 @@ extension String { /// known to have meaning in member position. /// /// We use this to avoid unnecessary escaping with expressions like `.public`. - static var apollo_reservedMemberKeywords: Set { - [ - "self", "Type", "Protocol" - ] + static var reservedMemberKeywords: Set { + ["self", "Type", "Protocol"] } - var apollo_sanitizedVariableDeclaration: String { - guard String.apollo_reservedKeywords.contains(self) else { - return self + var sanitizedVariableDeclaration: String { + guard String.apollo.reservedKeywords.contains(base) else { + return base } - - return "`\(self)`" + return "`\(base)`" } - var apollo_sanitizedVariableUsage: String { - guard String.apollo_reservedMemberKeywords.contains(self) else { - return self + var sanitizedVariableUsage: String { + guard String.apollo.reservedMemberKeywords.contains(base) else { + return base } - - return "`\(self)`" + return "`\(base)`" } /// Certain tokens aren't valid as method parameter names, even when escaped with backticks, as @@ -81,9 +79,8 @@ extension String { /// works this way. /// - parameter input: The proposed parameter name. /// - returns: `true` if the name can be used, or `false` if it needs a separate internal parameter name. - var apollo_isValidParameterName: Bool { + var isValidParameterName: Bool { // Right now `self` is the only known token that we can't use with escaping. - return self != "self" + return base != "self" } - } diff --git a/SwiftScripts/Sources/Codegen/main.swift b/SwiftScripts/Sources/Codegen/main.swift index 0fa3871cc0..2d8b623205 100644 --- a/SwiftScripts/Sources/Codegen/main.swift +++ b/SwiftScripts/Sources/Codegen/main.swift @@ -21,7 +21,7 @@ let options = target.options(fromSourceRoot: sourceRootURL) // This more necessary if you're using a sub-folder, but make sure // there's actually a place to write out what you're doing. -try FileManager.default.apollo_createFolderIfNeeded(at: targetURL) +try FileManager.default.apollo.createFolderIfNeeded(at: targetURL) // Calculate where you want to download the CLI folder. let cliFolderURL = sourceRootURL diff --git a/Tests/ApolloCodegenTests/ASTParsingTests.swift b/Tests/ApolloCodegenTests/ASTParsingTests.swift index 8cbab44a72..9efd9ff39f 100644 --- a/Tests/ApolloCodegenTests/ASTParsingTests.swift +++ b/Tests/ApolloCodegenTests/ASTParsingTests.swift @@ -174,7 +174,7 @@ mutation CreateAwesomeReview {\n createReview(episode: JEDI, review: {stars: 10 XCTAssertEqual(outerField.responseName, "createReview") XCTAssertEqual(outerField.fieldName, "createReview") XCTAssertEqual(outerField.type, "Review") - XCTAssertFalse(outerField.isDeprecated.apollo_boolValue) + XCTAssertFalse(outerField.isDeprecated.boolValue) XCTAssertFalse(outerField.isConditional) let fragmentSpreads = try XCTUnwrap(outerField.fragmentSpreads) XCTAssertTrue(fragmentSpreads.isEmpty) diff --git a/Tests/ApolloCodegenTests/ApolloCodegenTests.swift b/Tests/ApolloCodegenTests/ApolloCodegenTests.swift index 859c505cce..16cdfb7cf8 100644 --- a/Tests/ApolloCodegenTests/ApolloCodegenTests.swift +++ b/Tests/ApolloCodegenTests/ApolloCodegenTests.swift @@ -127,8 +127,8 @@ class ApolloCodegenTests: XCTestCase { return } - XCTAssertTrue(FileManager.default.apollo_folderExists(at: outputFolder)) - XCTAssertTrue(FileManager.default.apollo_fileExists(at: outputFile)) + XCTAssertTrue(FileManager.default.apollo.folderExists(at: outputFolder)) + XCTAssertTrue(FileManager.default.apollo.fileExists(at: outputFile)) let contents = try FileManager.default.contentsOfDirectory(atPath: outputFolder.path) XCTAssertEqual(contents.count, 1) @@ -148,7 +148,7 @@ class ApolloCodegenTests: XCTestCase { with: scriptFolderURL, options: options) - XCTAssertTrue(FileManager.default.apollo_folderExists(at: outputFolder)) + XCTAssertTrue(FileManager.default.apollo.folderExists(at: outputFolder)) let contents = try FileManager.default.contentsOfDirectory(atPath: outputFolder.path) XCTAssertEqual(contents.count, 17) diff --git a/Tests/ApolloCodegenTests/ApolloSchemaTests.swift b/Tests/ApolloCodegenTests/ApolloSchemaTests.swift index 8810a351b6..2f18b658c1 100644 --- a/Tests/ApolloCodegenTests/ApolloSchemaTests.swift +++ b/Tests/ApolloCodegenTests/ApolloSchemaTests.swift @@ -68,8 +68,8 @@ class ApolloSchemaTests: XCTestCase { outputFolderURL: testOutputFolderURL) // Delete anything existing at the output URL - try FileManager.default.apollo_deleteFile(at: options.outputURL) - XCTAssertFalse(FileManager.default.apollo_fileExists(at: options.outputURL)) + try FileManager.default.apollo.deleteFile(at: options.outputURL) + XCTAssertFalse(FileManager.default.apollo.fileExists(at: options.outputURL)) let cliFolderURL = CodegenTestHelper.cliFolderURL() @@ -77,7 +77,7 @@ class ApolloSchemaTests: XCTestCase { options: options) // Does the file now exist? - XCTAssertTrue(FileManager.default.apollo_fileExists(at: options.outputURL)) + XCTAssertTrue(FileManager.default.apollo.fileExists(at: options.outputURL)) // Is it non-empty? let data = try Data(contentsOf: options.outputURL) @@ -90,8 +90,8 @@ class ApolloSchemaTests: XCTestCase { _ = try XCTUnwrap(json["__schema"]) // OK delete it now - try FileManager.default.apollo_deleteFile(at: options.outputURL) - XCTAssertFalse(FileManager.default.apollo_fileExists(at: options.outputURL)) + try FileManager.default.apollo.deleteFile(at: options.outputURL) + XCTAssertFalse(FileManager.default.apollo.fileExists(at: options.outputURL)) } func testDownloadingSchemaInSchemaDefinitionLanguage() throws { @@ -102,8 +102,8 @@ class ApolloSchemaTests: XCTestCase { outputFolderURL: testOutputFolderURL) // Delete anything existing at the output URL - try FileManager.default.apollo_deleteFile(at: options.outputURL) - XCTAssertFalse(FileManager.default.apollo_fileExists(at: options.outputURL)) + try FileManager.default.apollo.deleteFile(at: options.outputURL) + XCTAssertFalse(FileManager.default.apollo.fileExists(at: options.outputURL)) let cliFolderURL = CodegenTestHelper.cliFolderURL() @@ -111,7 +111,7 @@ class ApolloSchemaTests: XCTestCase { options: options)) // Does the file now exist? - XCTAssertTrue(FileManager.default.apollo_fileExists(at: options.outputURL)) + XCTAssertTrue(FileManager.default.apollo.fileExists(at: options.outputURL)) // Is it non-empty? let data = try Data(contentsOf: options.outputURL) @@ -121,7 +121,7 @@ class ApolloSchemaTests: XCTestCase { XCTAssertNil(try? JSONSerialization.jsonObject(with: data, options: []) as? [AnyHashable:Any]) // OK delete it now - try FileManager.default.apollo_deleteFile(at: options.outputURL) - XCTAssertFalse(FileManager.default.apollo_fileExists(at: options.outputURL)) + try FileManager.default.apollo.deleteFile(at: options.outputURL) + XCTAssertFalse(FileManager.default.apollo.fileExists(at: options.outputURL)) } } diff --git a/Tests/ApolloCodegenTests/CLIDownloaderTests.swift b/Tests/ApolloCodegenTests/CLIDownloaderTests.swift index 68ac37506f..f9b6d35325 100644 --- a/Tests/ApolloCodegenTests/CLIDownloaderTests.swift +++ b/Tests/ApolloCodegenTests/CLIDownloaderTests.swift @@ -17,19 +17,19 @@ class CLIDownloaderTests: XCTestCase { try CLIDownloader.forceRedownload(cliFolderURL: scriptsURL, timeout: CodegenTestHelper.timeout) let zipFileURL = ApolloFilePathHelper.zipFileURL(fromCLIFolder: scriptsURL) - XCTAssertTrue(FileManager.default.apollo_fileExists(at: zipFileURL)) - XCTAssertEqual(try FileManager.default.apollo_shasum(at: zipFileURL), CLIExtractor.expectedSHASUM) + XCTAssertTrue(FileManager.default.apollo.fileExists(at: zipFileURL)) + XCTAssertEqual(try FileManager.default.apollo.shasum(at: zipFileURL), CLIExtractor.expectedSHASUM) } func testDownloadingToFolderThatDoesntAlreadyExistWorks() throws { let scriptsURL = CodegenTestHelper.cliFolderURL() - try FileManager.default.apollo_deleteFolder(at: scriptsURL) + try FileManager.default.apollo.deleteFolder(at: scriptsURL) - XCTAssertFalse(FileManager.default.apollo_folderExists(at: scriptsURL)) + XCTAssertFalse(FileManager.default.apollo.folderExists(at: scriptsURL)) try CLIDownloader.downloadIfNeeded(cliFolderURL: scriptsURL, timeout: 90.0) - XCTAssertTrue(FileManager.default.apollo_folderExists(at: scriptsURL)) + XCTAssertTrue(FileManager.default.apollo.folderExists(at: scriptsURL)) } func testTimeoutThrowsCorrectError() throws { diff --git a/Tests/ApolloCodegenTests/CLIExtractorTests.swift b/Tests/ApolloCodegenTests/CLIExtractorTests.swift index 17ee362cbf..6a2540993f 100644 --- a/Tests/ApolloCodegenTests/CLIExtractorTests.swift +++ b/Tests/ApolloCodegenTests/CLIExtractorTests.swift @@ -56,12 +56,12 @@ class CLIExtractorTests: XCTestCase { func validateCLIIsExtractedWithRealSHASUM(file: StaticString = #file, line: UInt = #line) { let binaryFolderURL = CodegenTestHelper.binaryFolderURL() - XCTAssertTrue(FileManager.default.apollo_folderExists(at: binaryFolderURL), + XCTAssertTrue(FileManager.default.apollo.folderExists(at: binaryFolderURL), "Binary folder doesn't exist at \(binaryFolderURL)", file: file, line: line) let binaryURL = ApolloFilePathHelper.binaryURL(fromBinaryFolder: binaryFolderURL) - XCTAssertTrue(FileManager.default.apollo_fileExists(at: binaryURL), + XCTAssertTrue(FileManager.default.apollo.fileExists(at: binaryURL), "Binary doesn't exist at \(binaryURL)", file: file, line: line) @@ -100,7 +100,7 @@ class CLIExtractorTests: XCTestCase { // Check that the binary hasn't already been extracted // (it should be getting deleted in `setUp`) let binaryFolderURL = CodegenTestHelper.binaryFolderURL() - XCTAssertFalse(FileManager.default.apollo_folderExists(at: binaryFolderURL)) + XCTAssertFalse(FileManager.default.apollo.folderExists(at: binaryFolderURL)) // Actually extract the CLI let cliFolderURL = CodegenTestHelper.cliFolderURL() @@ -145,7 +145,7 @@ class CLIExtractorTests: XCTestCase { func testFolderExistsButMissingSHASUMFileReExtractionWorks() throws { // Make sure there is an apollo folder but no `.shasum` file let apolloFolder = CodegenTestHelper.apolloFolderURL() - try FileManager.default.apollo_createFolderIfNeeded(at: apolloFolder) + try FileManager.default.apollo.createFolderIfNeeded(at: apolloFolder) let cliFolderURL = CodegenTestHelper.cliFolderURL() @@ -160,7 +160,7 @@ class CLIExtractorTests: XCTestCase { // Make sure the binary folder's not there let binaryFolderURL = CodegenTestHelper.binaryFolderURL() - XCTAssertFalse(FileManager.default.apollo_folderExists(at: binaryFolderURL)) + XCTAssertFalse(FileManager.default.apollo.folderExists(at: binaryFolderURL)) // Re-extract and now everything should be there let cliFolderURL = CodegenTestHelper.cliFolderURL() @@ -170,22 +170,22 @@ class CLIExtractorTests: XCTestCase { func testMissingSHASUMFileButCorrectZipFileCreatesSHASUMFile() throws { let shasumFileURL = CodegenTestHelper.shasumFileURL() - try FileManager.default.apollo_deleteFile(at: shasumFileURL) + try FileManager.default.apollo.deleteFile(at: shasumFileURL) - XCTAssertFalse(FileManager.default.apollo_fileExists(at: shasumFileURL)) + XCTAssertFalse(FileManager.default.apollo.fileExists(at: shasumFileURL)) let cliFolderURL = CodegenTestHelper.cliFolderURL() let zipFileURL = ApolloFilePathHelper.zipFileURL(fromCLIFolder: cliFolderURL) - XCTAssertTrue(FileManager.default.apollo_fileExists(at: zipFileURL)) + XCTAssertTrue(FileManager.default.apollo.fileExists(at: zipFileURL)) let binaryURL = try CLIExtractor.extractCLIIfNeeded(from: cliFolderURL) /// Was the binary extracted? - XCTAssertTrue(FileManager.default.apollo_folderExists(at: binaryURL)) + XCTAssertTrue(FileManager.default.apollo.folderExists(at: binaryURL)) /// Did the SHASUM file get created? - XCTAssertTrue(FileManager.default.apollo_fileExists(at: shasumFileURL)) + XCTAssertTrue(FileManager.default.apollo.fileExists(at: shasumFileURL)) self.validateCLIIsExtractedWithRealSHASUM() } } diff --git a/Tests/ApolloCodegenTests/CodegenExtensionTests.swift b/Tests/ApolloCodegenTests/CodegenExtensionTests.swift index a873c5ecf2..0238cd636b 100644 --- a/Tests/ApolloCodegenTests/CodegenExtensionTests.swift +++ b/Tests/ApolloCodegenTests/CodegenExtensionTests.swift @@ -15,13 +15,13 @@ class CodegenExtensionTests: XCTestCase { func testOptionalBoolean() { var optionalBoolean: Bool? = nil - XCTAssertFalse(optionalBoolean.apollo_boolValue) + XCTAssertFalse(optionalBoolean.boolValue) optionalBoolean = true - XCTAssertTrue(optionalBoolean.apollo_boolValue) + XCTAssertTrue(optionalBoolean.boolValue) optionalBoolean = false - XCTAssertFalse(optionalBoolean.apollo_boolValue) + XCTAssertFalse(optionalBoolean.boolValue) } // MARK: String @@ -30,7 +30,7 @@ class CodegenExtensionTests: XCTestCase { let word = "testing" let suffix = "ing" - let dropped = try word.apollo_droppingSuffix(suffix) + let dropped = try word.apollo.droppingSuffix(suffix) XCTAssertEqual(dropped, "test") } @@ -39,11 +39,11 @@ class CodegenExtensionTests: XCTestCase { let suffix = "n" do { - _ = try word.apollo_droppingSuffix(suffix) + _ = try word.apollo.droppingSuffix(suffix) XCTFail("Well that shouldn't have worked") } catch { switch error { - case String.ApolloStringError.expectedSuffixMissing(let expectedSuffix): + case ApolloStringError.expectedSuffixMissing(let expectedSuffix): XCTAssertEqual(expectedSuffix, suffix) default: XCTFail("Unexpected error: \(error)") diff --git a/Tests/ApolloCodegenTests/CodegenTestHelper.swift b/Tests/ApolloCodegenTests/CodegenTestHelper.swift index 5730c84d9e..c463731219 100644 --- a/Tests/ApolloCodegenTests/CodegenTestHelper.swift +++ b/Tests/ApolloCodegenTests/CodegenTestHelper.swift @@ -86,7 +86,7 @@ struct CodegenTestHelper { line: UInt = #line) { do { let outputFolderURL = self.outputFolderURL() - try FileManager.default.apollo_deleteFolder(at: outputFolderURL) + try FileManager.default.apollo.deleteFolder(at: outputFolderURL) } catch { XCTFail("Error deleting output folder!", file: file, @@ -110,7 +110,7 @@ struct CodegenTestHelper { line: UInt = #line) { do { let apolloFolderURL = self.apolloFolderURL() - try FileManager.default.apollo_deleteFolder(at: apolloFolderURL) + try FileManager.default.apollo.deleteFolder(at: apolloFolderURL) } catch { XCTFail("Error deleting Apollo folder: \(error)", file: file, diff --git a/Tests/ApolloCodegenTests/FileManagerExtensionsTests.swift b/Tests/ApolloCodegenTests/FileManagerExtensionsTests.swift index 4699d1691f..6171d43b96 100644 --- a/Tests/ApolloCodegenTests/FileManagerExtensionsTests.swift +++ b/Tests/ApolloCodegenTests/FileManagerExtensionsTests.swift @@ -21,29 +21,29 @@ class FileManagerExtensionsTests: XCTestCase { func testsFileExistsForZipFileURL() throws { let cliFolderURL = CodegenTestHelper.cliFolderURL() let zipFileURL = ApolloFilePathHelper.zipFileURL(fromCLIFolder: cliFolderURL) - XCTAssertTrue(FileManager.default.apollo_fileExists(at: zipFileURL)) + XCTAssertTrue(FileManager.default.apollo.fileExists(at: zipFileURL)) } func testFolderDoesNotExistForZipFileURL() throws { let cliFolderURL = CodegenTestHelper.cliFolderURL() let zipFileURL = ApolloFilePathHelper.zipFileURL(fromCLIFolder: cliFolderURL) - XCTAssertFalse(FileManager.default.apollo_folderExists(at: zipFileURL)) + XCTAssertFalse(FileManager.default.apollo.folderExists(at: zipFileURL)) } func testFolderExistsForCLIFolderURL() throws { let cliFolderURL = CodegenTestHelper.cliFolderURL() - XCTAssertTrue(FileManager.default.apollo_folderExists(at: cliFolderURL)) + XCTAssertTrue(FileManager.default.apollo.folderExists(at: cliFolderURL)) } func testFileDoesNotExistForCLIFolderURL() throws { let cliFolderURL = CodegenTestHelper.cliFolderURL() - XCTAssertFalse(FileManager.default.apollo_fileExists(at: cliFolderURL)) + XCTAssertFalse(FileManager.default.apollo.fileExists(at: cliFolderURL)) } func testSHASUMOfIncludedBinaryMatchesExpected() throws { let clifolderURL = CodegenTestHelper.cliFolderURL() let zipFileURL = ApolloFilePathHelper.zipFileURL(fromCLIFolder: clifolderURL) - let shasum = try FileManager.default.apollo_shasum(at: zipFileURL) + let shasum = try FileManager.default.apollo.shasum(at: zipFileURL) XCTAssertEqual(shasum, CLIExtractor.expectedSHASUM) } } diff --git a/Tests/ApolloCodegenTests/LineByLineComparison.swift b/Tests/ApolloCodegenTests/LineByLineComparison.swift index d23087996d..bdd871b72a 100644 --- a/Tests/ApolloCodegenTests/LineByLineComparison.swift +++ b/Tests/ApolloCodegenTests/LineByLineComparison.swift @@ -23,7 +23,7 @@ struct LineByLineComparison { expectedFileURL: URL, file: StaticString = #file, line: UInt = #line) { - guard FileManager.default.apollo_fileExists(at: expectedFileURL) else { + guard FileManager.default.apollo.fileExists(at: expectedFileURL) else { XCTFail("File not found at \(expectedFileURL)", file: file, line: line)