Skip to content

Commit

Permalink
feature: propose additional capitalization rules configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
tonyarnold committed Aug 18, 2024
1 parent 5c8d3e1 commit 675ba12
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -458,6 +458,8 @@ public struct ApolloCodegenConfiguration: Codable, Equatable {

// MARK: - Other Types
public struct OutputOptions: Codable, Equatable {
/// Any non-default rules for capitalization you wish to include.
public let additionalCapitalizationRules: [CapitalizationRule]
/// Any non-default rules for pluralization or singularization you wish to include.
public let additionalInflectionRules: [InflectionRule]
/// How deprecated enum cases from the schema should be handled.
Expand Down Expand Up @@ -511,6 +513,7 @@ public struct ApolloCodegenConfiguration: Codable, Equatable {

/// Default property values
public struct Default {
public static let additionalCapitalizationRules: [CapitalizationRule] = []
public static let additionalInflectionRules: [InflectionRule] = []
public static let deprecatedEnumCases: Composition = .include
public static let schemaDocumentation: Composition = .include
Expand All @@ -528,6 +531,7 @@ public struct ApolloCodegenConfiguration: Codable, Equatable {
/// Designated initializer.
///
/// - Parameters:
/// - additionalCapitalizationRules: Any non-default rules for capitalization you wish to include.
/// - additionalInflectionRules: Any non-default rules for pluralization or singularization
/// you wish to include.
/// - deprecatedEnumCases: How deprecated enum cases from the schema should be handled.
Expand All @@ -545,6 +549,7 @@ public struct ApolloCodegenConfiguration: Codable, Equatable {
/// - pruneGeneratedFiles: Whether unused generated files will be automatically deleted.
/// - markOperationDefinitionsAsFinal: Whether generated GraphQL operation and local cache mutation class types will be marked as `final`.
public init(
additionalCapitalizationRules: [CapitalizationRule] = Default.additionalCapitalizationRules,
additionalInflectionRules: [InflectionRule] = Default.additionalInflectionRules,
deprecatedEnumCases: Composition = Default.deprecatedEnumCases,
schemaDocumentation: Composition = Default.schemaDocumentation,
Expand All @@ -557,6 +562,7 @@ public struct ApolloCodegenConfiguration: Codable, Equatable {
pruneGeneratedFiles: Bool = Default.pruneGeneratedFiles,
markOperationDefinitionsAsFinal: Bool = Default.markOperationDefinitionsAsFinal
) {
self.additionalCapitalizationRules = additionalCapitalizationRules
self.additionalInflectionRules = additionalInflectionRules
self.deprecatedEnumCases = deprecatedEnumCases
self.schemaDocumentation = schemaDocumentation
Expand All @@ -573,6 +579,7 @@ public struct ApolloCodegenConfiguration: Codable, Equatable {
// MARK: Codable

enum CodingKeys: CodingKey, CaseIterable {
case additionalCapitalizationRules
case additionalInflectionRules
case queryStringLiteralFormat
case deprecatedEnumCases
Expand All @@ -592,6 +599,11 @@ public struct ApolloCodegenConfiguration: Codable, Equatable {
let values = try decoder.container(keyedBy: CodingKeys.self)
try throwIfContainsUnexpectedKey(container: values, type: Self.self, decoder: decoder)

additionalCapitalizationRules = try values.decodeIfPresent(
[CapitalizationRule].self,
forKey: .additionalCapitalizationRules
) ?? Default.additionalCapitalizationRules

additionalInflectionRules = try values.decodeIfPresent(
[InflectionRule].self,
forKey: .additionalInflectionRules
Expand Down Expand Up @@ -656,6 +668,7 @@ public struct ApolloCodegenConfiguration: Codable, Equatable {
public func encode(to encoder: any Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)

try container.encode(self.additionalCapitalizationRules, forKey: .additionalCapitalizationRules)
try container.encode(self.additionalInflectionRules, forKey: .additionalInflectionRules)
try container.encode(self.deprecatedEnumCases, forKey: .deprecatedEnumCases)
try container.encode(self.schemaDocumentation, forKey: .schemaDocumentation)
Expand Down Expand Up @@ -1479,6 +1492,7 @@ extension ApolloCodegenConfiguration.OutputOptions {
/// Deprecated initializer.
///
/// - Parameters:
/// - additionalCapitalizationRules: Any non-default rules for capitalization you wish to include.
/// - additionalInflectionRules: Any non-default rules for pluralization or singularization
/// you wish to include.
/// - queryStringLiteralFormat: Formatting of the GraphQL query string literal that is
Expand All @@ -1498,9 +1512,10 @@ extension ApolloCodegenConfiguration.OutputOptions {
/// - pruneGeneratedFiles: Whether unused generated files will be automatically deleted.
/// - markOperationDefinitionsAsFinal: Whether generated GraphQL operation and local cache mutation class types will be marked as `final`.
@available(*, deprecated,
renamed: "init(additionalInflectionRules:queryStringLiteralFormat:deprecatedEnumCases:schemaDocumentation:selectionSetInitializers:operationDocumentFormat:cocoapodsCompatibleImportStatements:warningsOnDeprecatedUsage:conversionStrategies:pruneGeneratedFiles:markOperationDefinitionsAsFinal:)"
renamed: "init(additionalCapitalizationRules:additionalInflectionRules:queryStringLiteralFormat:deprecatedEnumCases:schemaDocumentation:selectionSetInitializers:operationDocumentFormat:cocoapodsCompatibleImportStatements:warningsOnDeprecatedUsage:conversionStrategies:pruneGeneratedFiles:markOperationDefinitionsAsFinal:)"
)
public init(
additionalCapitalizationRules: [CapitalizationRule] = Default.additionalCapitalizationRules,
additionalInflectionRules: [InflectionRule] = Default.additionalInflectionRules,
queryStringLiteralFormat: QueryStringLiteralFormat = .singleLine,
deprecatedEnumCases: ApolloCodegenConfiguration.Composition = Default.deprecatedEnumCases,
Expand All @@ -1513,6 +1528,7 @@ extension ApolloCodegenConfiguration.OutputOptions {
pruneGeneratedFiles: Bool = Default.pruneGeneratedFiles,
markOperationDefinitionsAsFinal: Bool = Default.markOperationDefinitionsAsFinal
) {
self.additionalCapitalizationRules = additionalCapitalizationRules
self.additionalInflectionRules = additionalInflectionRules
self.deprecatedEnumCases = deprecatedEnumCases
self.schemaDocumentation = schemaDocumentation
Expand All @@ -1529,6 +1545,7 @@ extension ApolloCodegenConfiguration.OutputOptions {
/// Deprecated initializer.
///
/// - Parameters:
/// - additionalCapitalizationRules: Any non-default rules for capitalization you wish to include.
/// - additionalInflectionRules: Any non-default rules for pluralization or singularization
/// you wish to include.
/// - queryStringLiteralFormat: Formatting of the GraphQL query string literal that is
Expand All @@ -1548,9 +1565,10 @@ extension ApolloCodegenConfiguration.OutputOptions {
/// - pruneGeneratedFiles: Whether unused generated files will be automatically deleted.
/// - markOperationDefinitionsAsFinal: Whether generated GraphQL operation and local cache mutation class types will be marked as `final`.
@available(*, deprecated,
renamed: "init(additionalInflectionRules:deprecatedEnumCases:schemaDocumentation:selectionSetInitializers:operationDocumentFormat:cocoapodsCompatibleImportStatements:warningsOnDeprecatedUsage:conversionStrategies:pruneGeneratedFiles:markOperationDefinitionsAsFinal:)"
renamed: "init(additionalCapitalizationRules:additionalInflectionRules:deprecatedEnumCases:schemaDocumentation:selectionSetInitializers:operationDocumentFormat:cocoapodsCompatibleImportStatements:warningsOnDeprecatedUsage:conversionStrategies:pruneGeneratedFiles:markOperationDefinitionsAsFinal:)"
)
public init(
additionalCapitalizationRules: [CapitalizationRule] = Default.additionalCapitalizationRules,
additionalInflectionRules: [InflectionRule] = Default.additionalInflectionRules,
queryStringLiteralFormat: QueryStringLiteralFormat,
deprecatedEnumCases: ApolloCodegenConfiguration.Composition = Default.deprecatedEnumCases,
Expand All @@ -1563,6 +1581,7 @@ extension ApolloCodegenConfiguration.OutputOptions {
pruneGeneratedFiles: Bool = Default.pruneGeneratedFiles,
markOperationDefinitionsAsFinal: Bool = Default.markOperationDefinitionsAsFinal
) {
self.additionalCapitalizationRules = additionalCapitalizationRules
self.additionalInflectionRules = additionalInflectionRules
self.deprecatedEnumCases = deprecatedEnumCases
self.schemaDocumentation = schemaDocumentation
Expand Down
9 changes: 9 additions & 0 deletions apollo-ios-codegen/Sources/ApolloCodegenLib/Capitalizer.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import Foundation

public enum CapitalizationRule: Codable, Equatable {
case uppercase(regex: String)
case lowercase(regex: String)
case titlecase(regex: String)
case camelcase(regex: String)
case pascalcase(regex: String)
}

0 comments on commit 675ba12

Please sign in to comment.