diff --git a/.agents/interfaces/ios/XCStringsCatalog.swiftinterface b/.agents/interfaces/ios/XCStringsCatalog.swiftinterface new file mode 100644 index 0000000..455e175 --- /dev/null +++ b/.agents/interfaces/ios/XCStringsCatalog.swiftinterface @@ -0,0 +1,9 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-ios16.0-simulator -enable-objc-interop -swift-version 6 -O -module-name XCStringsCatalog -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import Swift +@_exported import XCStringsCatalogCore +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims diff --git a/.agents/interfaces/ios/XCStringsCatalogCore.swiftinterface b/.agents/interfaces/ios/XCStringsCatalogCore.swiftinterface new file mode 100644 index 0000000..7d12dff --- /dev/null +++ b/.agents/interfaces/ios/XCStringsCatalogCore.swiftinterface @@ -0,0 +1,173 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-ios16.0-simulator -enable-objc-interop -swift-version 6 -O -module-name XCStringsCatalogCore -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import Foundation +import Swift +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims +public struct XCStringEntry : Swift.Codable, Swift.Hashable, Swift.Sendable { + public typealias Localizations = [XCStringsCatalogCore.XCStringLanguage : XCStringsCatalogCore.XCStringLocalization] + @_hasInitialValue public var comment: Swift.String? + @_hasInitialValue public var extractionState: XCStringsCatalogCore.XCStringExtractionState? + @_hasInitialValue public var localizations: XCStringsCatalogCore.XCStringEntry.Localizations? + public init(comment: Swift.String? = nil, extractionState: XCStringsCatalogCore.XCStringExtractionState? = nil, localizations: XCStringsCatalogCore.XCStringEntry.Localizations? = nil) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringEntry, _ b: XCStringsCatalogCore.XCStringEntry) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + public init(from decoder: any Swift.Decoder) throws +} +public struct XCStringExtractionState : Swift.RawRepresentable, Swift.CodingKeyRepresentable, Swift.Codable, Swift.Hashable, Swift.Sendable { + public let rawValue: Swift.String + public init(rawValue: Swift.String) + @_hasInitialValue public static let manual: XCStringsCatalogCore.XCStringExtractionState + @_hasInitialValue public static let automatic: XCStringsCatalogCore.XCStringExtractionState + @_hasInitialValue public static let migrated: XCStringsCatalogCore.XCStringExtractionState + public typealias RawValue = Swift.String +} +extension XCStringsCatalogCore.XCStringExtractionState : Swift.ExpressibleByStringLiteral { + public init(stringLiteral value: Swift.StringLiteralType) + public typealias ExtendedGraphemeClusterLiteralType = Swift.StringLiteralType + public typealias StringLiteralType = Swift.StringLiteralType + public typealias UnicodeScalarLiteralType = Swift.StringLiteralType +} +public struct XCStringLanguage : Swift.RawRepresentable, Swift.CodingKeyRepresentable, Swift.Codable, Swift.Hashable, Swift.Sendable { + public let rawValue: Swift.String + public init(rawValue: Swift.String) + @_hasInitialValue public static let english: XCStringsCatalogCore.XCStringLanguage + public typealias RawValue = Swift.String +} +extension XCStringsCatalogCore.XCStringLanguage : Swift.ExpressibleByStringLiteral { + public init(stringLiteral value: Swift.StringLiteralType) + public typealias ExtendedGraphemeClusterLiteralType = Swift.StringLiteralType + public typealias StringLiteralType = Swift.StringLiteralType + public typealias UnicodeScalarLiteralType = Swift.StringLiteralType +} +public struct XCStringLocalization : Swift.Codable, Swift.Hashable, Swift.Sendable { + @_hasInitialValue public var stringUnit: XCStringsCatalogCore.XCStringUnit? + @_hasInitialValue public var substitutions: [Swift.String : XCStringsCatalogCore.XCStringSubstitution]? + @_hasInitialValue public var variations: XCStringsCatalogCore.XCStringVariations? + public init(stringUnit: XCStringsCatalogCore.XCStringUnit? = nil, substitutions: [Swift.String : XCStringsCatalogCore.XCStringSubstitution]? = nil, variations: XCStringsCatalogCore.XCStringVariations? = nil) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringLocalization, _ b: XCStringsCatalogCore.XCStringLocalization) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + public init(from decoder: any Swift.Decoder) throws +} +public struct XCStringSubstitution : Swift.Codable, Swift.Hashable, Swift.Sendable { + public let argNum: Swift.Int + public let formatSpecifier: Swift.String + public let variations: XCStringsCatalogCore.XCStringVariations? + public init(argNum: Swift.Int, formatSpecifier: Swift.String, variations: XCStringsCatalogCore.XCStringVariations?) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringSubstitution, _ b: XCStringsCatalogCore.XCStringSubstitution) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + public init(from decoder: any Swift.Decoder) throws +} +public struct XCStringUnit : Swift.Codable, Swift.Hashable, Swift.Sendable { + public var state: XCStringsCatalogCore.XCStringUnitState + public var value: Swift.String + public init(state: XCStringsCatalogCore.XCStringUnitState, value: Swift.String) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringUnit, _ b: XCStringsCatalogCore.XCStringUnit) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + public init(from decoder: any Swift.Decoder) throws +} +public struct XCStringUnitState : Swift.RawRepresentable, Swift.Codable, Swift.Hashable, Swift.Sendable { + public let rawValue: Swift.String + public init(rawValue: Swift.String) + @_hasInitialValue public static let translated: XCStringsCatalogCore.XCStringUnitState + @_hasInitialValue public static let needsReview: XCStringsCatalogCore.XCStringUnitState + public typealias RawValue = Swift.String +} +extension XCStringsCatalogCore.XCStringUnitState : Swift.ExpressibleByStringLiteral { + public init(stringLiteral value: Swift.StringLiteralType) + public typealias ExtendedGraphemeClusterLiteralType = Swift.StringLiteralType + public typealias StringLiteralType = Swift.StringLiteralType + public typealias UnicodeScalarLiteralType = Swift.StringLiteralType +} +public struct XCStringVariation : Swift.Codable, Swift.Hashable, Swift.Sendable { + public var stringUnit: XCStringsCatalogCore.XCStringUnit + public init(stringUnit: XCStringsCatalogCore.XCStringUnit) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringVariation, _ b: XCStringsCatalogCore.XCStringVariation) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + public init(from decoder: any Swift.Decoder) throws +} +public struct XCStringVariations : Swift.Codable, Swift.Hashable, Swift.Sendable { + public let device: [XCStringsCatalogCore.XCStringVariations.DeviceKey : XCStringsCatalogCore.XCStringVariation]? + public let plural: [XCStringsCatalogCore.XCStringVariations.PluralKey : XCStringsCatalogCore.XCStringVariation]? + public init(device: [XCStringsCatalogCore.XCStringVariations.DeviceKey : XCStringsCatalogCore.XCStringVariation]?, plural: [XCStringsCatalogCore.XCStringVariations.PluralKey : XCStringsCatalogCore.XCStringVariation]?) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringVariations, _ b: XCStringsCatalogCore.XCStringVariations) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + public init(from decoder: any Swift.Decoder) throws +} +extension XCStringsCatalogCore.XCStringVariations { + public struct DeviceKey : Swift.RawRepresentable, Swift.CodingKeyRepresentable, Swift.Codable, Swift.Hashable, Swift.Sendable, Swift.ExpressibleByStringLiteral { + public let rawValue: Swift.String + public init(rawValue: Swift.String) + public init(stringLiteral value: Swift.StringLiteralType) + @_hasInitialValue public static let iPhone: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let iPod: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let iPad: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let appleWatch: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let appleTV: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let appleVision: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let mac: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let other: XCStringsCatalogCore.XCStringVariations.DeviceKey + public typealias ExtendedGraphemeClusterLiteralType = Swift.StringLiteralType + public typealias RawValue = Swift.String + public typealias StringLiteralType = Swift.StringLiteralType + public typealias UnicodeScalarLiteralType = Swift.StringLiteralType + } + public struct PluralKey : Swift.RawRepresentable, Swift.ExpressibleByStringLiteral, Swift.Codable, Swift.Hashable, Swift.Sendable, Swift.CodingKeyRepresentable { + public let rawValue: Swift.String + public init(rawValue: Swift.String) + public init(stringLiteral value: Swift.StringLiteralType) + @_hasInitialValue public static let zero: XCStringsCatalogCore.XCStringVariations.PluralKey + @_hasInitialValue public static let one: XCStringsCatalogCore.XCStringVariations.PluralKey + @_hasInitialValue public static let two: XCStringsCatalogCore.XCStringVariations.PluralKey + @_hasInitialValue public static let few: XCStringsCatalogCore.XCStringVariations.PluralKey + @_hasInitialValue public static let many: XCStringsCatalogCore.XCStringVariations.PluralKey + @_hasInitialValue public static let other: XCStringsCatalogCore.XCStringVariations.PluralKey + public typealias ExtendedGraphemeClusterLiteralType = Swift.StringLiteralType + public typealias RawValue = Swift.String + public typealias StringLiteralType = Swift.StringLiteralType + public typealias UnicodeScalarLiteralType = Swift.StringLiteralType + } +} +public struct XCStringsCatalog : Swift.Codable, Swift.Hashable, Swift.Sendable { + public var sourceLanguage: XCStringsCatalogCore.XCStringLanguage + public var strings: [Swift.String : XCStringsCatalogCore.XCStringEntry] + public var version: Swift.String + public init(sourceLanguage: XCStringsCatalogCore.XCStringLanguage, strings: [Swift.String : XCStringsCatalogCore.XCStringEntry], version: Swift.String) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringsCatalog, _ b: XCStringsCatalogCore.XCStringsCatalog) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + public init(from decoder: any Swift.Decoder) throws +} +extension XCStringsCatalogCore.XCStringsCatalog { + public init(contentsOf fileURL: Foundation.URL) throws +} diff --git a/.agents/interfaces/ios/XCStringsCatalogParser.swiftinterface b/.agents/interfaces/ios/XCStringsCatalogParser.swiftinterface new file mode 100644 index 0000000..b5e83f2 --- /dev/null +++ b/.agents/interfaces/ios/XCStringsCatalogParser.swiftinterface @@ -0,0 +1,82 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-ios16.0-simulator -enable-objc-interop -swift-version 6 -O -module-name XCStringsCatalogParser -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import Dependencies +import Foundation +import RegexBuilder +import Swift +import XCStringsCatalogCore +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims +@_exported import _XCStringResource +@_exported import _XCStringsSource +public enum ExtractionError : Swift.Sendable, Swift.Error { + public struct Context : Swift.Sendable { + public let key: Swift.String + public let debugDescription: Swift.String + } + case localizationCorrupt(XCStringsCatalogParser.ExtractionError.Context) + case unsupported(XCStringsCatalogParser.ExtractionError.Context) +} +extension XCStringsCatalogParser.ExtractionError : Foundation.LocalizedError { + public var errorDescription: Swift.String? { + get + } +} +public struct ExtractionIssue : Swift.Equatable, Swift.Sendable { + public enum Reason : Swift.Equatable, Swift.Sendable { + case wrongExtractionState(XCStringsCatalogCore.XCStringExtractionState?) + case missingSourceLocalization(XCStringsCatalogCore.XCStringLanguage) + @_semantics("derived_enum_equals") @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_enum_equals(_ a: XCStringsCatalogParser.ExtractionIssue.Reason, _ b: XCStringsCatalogParser.ExtractionIssue.Reason) -> Swift.Bool + } + public let key: Swift.String + public let reason: XCStringsCatalogParser.ExtractionIssue.Reason + public var description: Swift.String { + get + } + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogParser.ExtractionIssue, _ b: XCStringsCatalogParser.ExtractionIssue) -> Swift.Bool +} +extension XCStringsCatalogParser.DefaultXCStringsCatalogParser { + @usableFromInline + internal func extractResources(from legacyFormat: _XCStringsSource.XCStringsSource.LegacyFormat) throws -> XCStringsCatalogParser.DefaultXCStringsCatalogParser.Output +} +extension XCStringsCatalogParser.DefaultXCStringsCatalogParser { + @usableFromInline + internal func collect(collector: (inout [_XCStringResource.XCStringResource], inout [XCStringsCatalogParser.ExtractionIssue]) throws -> Swift.Void) rethrows -> XCStringsCatalogParser.DefaultXCStringsCatalogParser.Output +} +extension XCStringsCatalogParser.DefaultXCStringsCatalogParser { + @usableFromInline + internal func extractResources(from catalog: XCStringsCatalogCore.XCStringsCatalog) throws -> XCStringsCatalogParser.DefaultXCStringsCatalogParser.Output +} +public struct XCStringsCatalogParserOutput : Swift.Equatable, Swift.Sendable { + public let resources: [_XCStringResource.XCStringResource] + public let issues: [XCStringsCatalogParser.ExtractionIssue] + public init(resources: [_XCStringResource.XCStringResource], issues: [XCStringsCatalogParser.ExtractionIssue]) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogParser.XCStringsCatalogParserOutput, _ b: XCStringsCatalogParser.XCStringsCatalogParserOutput) -> Swift.Bool +} +public protocol XCStringsCatalogParser : Swift.Sendable { + func parse(from source: _XCStringsSource.XCStringsSource) throws -> XCStringsCatalogParser.XCStringsCatalogParserOutput +} +extension Dependencies.DependencyValues { + public var xcStringsCatalogParser: any XCStringsCatalogParser.XCStringsCatalogParser { + get + set + } +} +public struct DefaultXCStringsCatalogParser : XCStringsCatalogParser.XCStringsCatalogParser { + public typealias Output = XCStringsCatalogParser.XCStringsCatalogParserOutput + public init() + @inlinable public func parse(from source: _XCStringsSource.XCStringsSource) throws -> XCStringsCatalogParser.XCStringsCatalogParserOutput { + switch source { + case let .catalog(stringCatalog): + try extractResources(from: stringCatalog) + case let .legacy(legacyFormat): + try extractResources(from: legacyFormat) + } + } +} +extension XCStringsCatalogCore.XCStringsCatalog { + public func parse() throws -> XCStringsCatalogParser.XCStringsCatalogParserOutput +} diff --git a/.agents/interfaces/ios/XCStringsCatalogValidator.swiftinterface b/.agents/interfaces/ios/XCStringsCatalogValidator.swiftinterface new file mode 100644 index 0000000..481e402 --- /dev/null +++ b/.agents/interfaces/ios/XCStringsCatalogValidator.swiftinterface @@ -0,0 +1,219 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-ios16.0-simulator -enable-objc-interop -swift-version 6 -O -module-name XCStringsCatalogValidator -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import Dependencies +import Foundation +import Swift +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims +@_exported import _XCStringResource +extension Dependencies.DependencyValues { + public var defaultXCStringResourceValidator: any XCStringsCatalogValidator.XCStringResourceValidator { + get + set + } +} +extension Dependencies.DependencyValues { + public var defaultXCStringResourcesValidator: any XCStringsCatalogValidator.XCStringResourcesValidator { + get + set + } +} +public struct DefaultXCStringResourcesValidator : XCStringsCatalogValidator.XCStringResourcesValidator { + @_hasInitialValue private var _defaultXCStringResourceValidator: Dependencies.Dependency + public init() + public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] +} +public struct XCStringResourceIssue : Swift.Equatable, Swift.Sendable { + public let resources: [_XCStringResource.XCStringResource] + public let description: Swift.String + public init(resources: [_XCStringResource.XCStringResource], description: Swift.String) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogValidator.XCStringResourceIssue, _ b: XCStringsCatalogValidator.XCStringResourceIssue) -> Swift.Bool +} +public protocol XCStringResourceValidator : Swift.Sendable { + func validateResource(_ resource: _XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] +} +public enum XCStringResourceValidators { +} +extension XCStringsCatalogValidator.XCStringResourceValidators { + public struct AnyValidator : XCStringsCatalogValidator.XCStringResourceValidator { + @usableFromInline + internal let underlying: any XCStringsCatalogValidator.XCStringResourceValidator + public init(_ underlying: any XCStringsCatalogValidator.XCStringResourceValidator) + @inlinable public init(_ validate: @escaping @Sendable (_XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue]) { + self.init(.inline(validate)) + } + @inlinable public func validateResource(_ resource: _XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + underlying.validateResource(resource) + } + } +} +extension XCStringsCatalogValidator.XCStringResourceValidators { + public struct Empty : XCStringsCatalogValidator.XCStringResourceValidator { + public func validateResource(_ resource: _XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] + } +} +extension XCStringsCatalogValidator.XCStringResourceValidator where Self == XCStringsCatalogValidator.XCStringResourceValidators.Empty { + public static var empty: XCStringsCatalogValidator.XCStringResourceValidators.Empty { + get + } +} +extension XCStringsCatalogValidator.XCStringResourceValidators { + public struct Inline : XCStringsCatalogValidator.XCStringResourceValidator { + @usableFromInline + internal let validate: @Sendable (_XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] + public init(_ validate: @escaping @Sendable (_XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue]) + @inlinable public func validateResource(_ resource: _XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + validate(resource) + } + } +} +extension XCStringsCatalogValidator.XCStringResourceValidator where Self == XCStringsCatalogValidator.XCStringResourceValidators.Inline { + @inlinable public static func inline(_ validate: @escaping @Sendable (_XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue]) -> Self { + return .init(validate) + } +} +extension XCStringsCatalogValidator.XCStringResourceValidators { + public struct Concat : XCStringsCatalogValidator.XCStringResourceValidator { + @usableFromInline + internal let validators: [any XCStringsCatalogValidator.XCStringResourceValidator] + public init(_ validators: [any XCStringsCatalogValidator.XCStringResourceValidator]) + @inlinable public func validateResource(_ resource: _XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + validators.flatMap { $0.validateResource(resource) } + } + } +} +extension XCStringsCatalogValidator.XCStringResourceValidator where Self == XCStringsCatalogValidator.XCStringResourceValidators.Concat { + @inlinable public static func concatenate(_ validators: any XCStringsCatalogValidator.XCStringResourceValidator...) -> Self { + return .init(validators) + } + @inlinable public static func concatenate(_ validators: [any XCStringsCatalogValidator.XCStringResourceValidator]) -> Self { + return .init(validators) + } +} +extension XCStringsCatalogValidator.XCStringResourceValidator { + @inlinable public func appending(_ validators: any XCStringsCatalogValidator.XCStringResourceValidator...) -> some XCStringsCatalogValidator.XCStringResourceValidator { + return .concatenate([self] + validators) + } + +} +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct ConflictingIdentifiers : XCStringsCatalogValidator.XCStringResourcesValidator { + @usableFromInline + internal let identifier: @Sendable (_XCStringResource.XCStringResource) -> Swift.String + public init(_ identifier: @escaping @Sendable (_XCStringResource.XCStringResource) -> Swift.String) + @inlinable public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + Dictionary(grouping: resources, by: identifier) + .filter { $0.value.count > 1 } + .mapValues { resources in + ( + resources: resources, + keys: resources + .map { "‘\($0.key)‘" } + .formatted(.list(type: .and)) + ) + } + .map { id, collection in + XCStringResourceIssue( + resources: collection.resources, + description: "The keys \(collection.keys) produce the same identifier ‘\(id)‘." + ) + } + } + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.ConflictingIdentifiers { + public static func conflictingIdentifiers(by identifier: @escaping @Sendable (_XCStringResource.XCStringResource) -> Swift.String) -> Self +} +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct UnsupportedIdentifiers : XCStringsCatalogValidator.XCStringResourcesValidator { + @usableFromInline + internal let identifier: @Sendable (_XCStringResource.XCStringResource) -> Swift.String + public init(_ identifier: @escaping @Sendable (_XCStringResource.XCStringResource) -> Swift.String) + @inlinable public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + resources + .filter { identifier($0).trimmingCharacters(in: .whitespacesAndNewlines).isEmpty } + .map { resource in + XCStringResourceIssue( + resources: [resource], + description: "The key ‘\(resource.key)‘ is not convertible to Swift identifier." + ) + } + } + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.UnsupportedIdentifiers { + public static func unsupportedIdentifiers(by identifier: @escaping @Sendable (_XCStringResource.XCStringResource) -> Swift.String) -> Self +} +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.Concat { + public static func defaultIdentifiersValidator(for identifier: @escaping @Sendable (_XCStringResource.XCStringResource) -> Swift.String) -> Self +} +public protocol XCStringResourcesValidator : Swift.Sendable { + func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] +} +public enum XCStringResourcesValidators { +} +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct AnyValidator : XCStringsCatalogValidator.XCStringResourcesValidator { + @usableFromInline + internal let underlying: any XCStringsCatalogValidator.XCStringResourcesValidator + public init(_ underlying: any XCStringsCatalogValidator.XCStringResourcesValidator) + @inlinable public init(_ validate: @escaping @Sendable ([_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue]) { + self.init(.inline(validate)) + } + @inlinable public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + underlying.validateResources(resources) + } + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct Empty : XCStringsCatalogValidator.XCStringResourcesValidator { + public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.Empty { + public static var empty: XCStringsCatalogValidator.XCStringResourcesValidators.Empty { + get + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct Inline : XCStringsCatalogValidator.XCStringResourcesValidator { + @usableFromInline + internal let validate: @Sendable ([_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] + public init(_ validate: @escaping @Sendable ([_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue]) + @inlinable public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + validate(resources) + } + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.Inline { + @inlinable public static func inline(_ validate: @escaping @Sendable ([_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue]) -> Self { + return .init(validate) + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct Concat : XCStringsCatalogValidator.XCStringResourcesValidator { + @usableFromInline + internal let validators: [any XCStringsCatalogValidator.XCStringResourcesValidator] + public init(_ validators: [any XCStringsCatalogValidator.XCStringResourcesValidator]) + @inlinable public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + validators.flatMap { $0.validateResources(resources) } + } + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.Concat { + @inlinable public static func concatenate(_ validators: any XCStringsCatalogValidator.XCStringResourcesValidator...) -> Self { + return .init(validators) + } + @inlinable public static func concatenate(_ validators: [any XCStringsCatalogValidator.XCStringResourcesValidator]) -> Self { + return .init(validators) + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidator { + @inlinable public func appending(_ validators: any XCStringsCatalogValidator.XCStringResourcesValidator...) -> some XCStringsCatalogValidator.XCStringResourcesValidator { + return .concatenate([self] + validators) + } + +} diff --git a/.agents/interfaces/ios/_XCStringResource.swiftinterface b/.agents/interfaces/ios/_XCStringResource.swiftinterface new file mode 100644 index 0000000..faf6163 --- /dev/null +++ b/.agents/interfaces/ios/_XCStringResource.swiftinterface @@ -0,0 +1,64 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-ios16.0-simulator -enable-objc-interop -swift-version 6 -O -module-name _XCStringResource -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import Foundation +import Swift +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims +extension _XCStringResource.XCStringResource { + public struct Argument : Swift.Hashable, Swift.Sendable { + public let label: Swift.String? + public let name: Swift.String + public let placeholderType: _XCStringResource.XCStringResource.PlaceholderType + public init(label: Swift.String?, name: Swift.String, placeholderType: _XCStringResource.XCStringResource.PlaceholderType) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: _XCStringResource.XCStringResource.Argument, _ b: _XCStringResource.XCStringResource.Argument) -> Swift.Bool + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + } +} +extension _XCStringResource.XCStringResource { + public enum PlaceholderType : Swift.String, Swift.CaseIterable, Swift.Sendable { + case int + case uint + case float + case double + case object + @inlinable public init?(rawValue: Swift.String) + public typealias AllCases = [_XCStringResource.XCStringResource.PlaceholderType] + public typealias RawValue = Swift.String + nonisolated public static var allCases: [_XCStringResource.XCStringResource.PlaceholderType] { + get + } + public var rawValue: Swift.String { + @inlinable get + } + } +} +public struct XCStringResource : Swift.Hashable, Swift.Sendable, Swift.Comparable { + public static func < (lhs: _XCStringResource.XCStringResource, rhs: _XCStringResource.XCStringResource) -> Swift.Bool + public let key: Swift.String + public let comment: Swift.String? + public let arguments: [_XCStringResource.XCStringResource.Argument] + public let sourceLocalization: Swift.String + public init(key: Swift.String, comment: Swift.String?, arguments: [_XCStringResource.XCStringResource.Argument], sourceLocalization: Swift.String) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: _XCStringResource.XCStringResource, _ b: _XCStringResource.XCStringResource) -> Swift.Bool + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } +} +public enum XCStringSegment : Swift.Equatable { + case string(Swift.String) + case interpolation(Swift.String) + public var content: Swift.String { + get + } + @_semantics("derived_enum_equals") @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_enum_equals(_ a: _XCStringResource.XCStringSegment, _ b: _XCStringResource.XCStringSegment) -> Swift.Bool +} +extension _XCStringResource.XCStringResource.PlaceholderType : Swift.Equatable {} +extension _XCStringResource.XCStringResource.PlaceholderType : Swift.Hashable {} +extension _XCStringResource.XCStringResource.PlaceholderType : Swift.RawRepresentable {} diff --git a/.agents/interfaces/ios/_XCStringsSource.swiftinterface b/.agents/interfaces/ios/_XCStringsSource.swiftinterface new file mode 100644 index 0000000..b57a049 --- /dev/null +++ b/.agents/interfaces/ios/_XCStringsSource.swiftinterface @@ -0,0 +1,28 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-ios16.0-simulator -enable-objc-interop -swift-version 6 -O -module-name _XCStringsSource -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import Foundation +import Swift +import XCStringsCatalogCore +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims +public enum XCStringsSource { + case catalog(_XCStringsSource.XCStringsSource.Catalog) + case legacy(_XCStringsSource.XCStringsSource.LegacyFormat) +} +extension _XCStringsSource.XCStringsSource { + public typealias Catalog = XCStringsCatalogCore.XCStringsCatalog + public typealias LegacyFormat = [Swift.String : Any] +} +extension _XCStringsSource.XCStringsSource { + public init(contentsOf fileURL: Foundation.URL) throws +} +public enum XCStringsSourceError : Foundation.LocalizedError { + case invalidFileFormat(Swift.String) + case invalidPropertyListContents + public var errorDescription: Swift.String? { + get + } +} diff --git a/.agents/interfaces/macos/XCStringsCatalog.swiftinterface b/.agents/interfaces/macos/XCStringsCatalog.swiftinterface index 85e7182..da65405 100644 --- a/.agents/interfaces/macos/XCStringsCatalog.swiftinterface +++ b/.agents/interfaces/macos/XCStringsCatalog.swiftinterface @@ -1,7 +1,7 @@ // swift-interface-format-version: 1.0 -// swift-compiler-version: Apple Swift version 6.4 (swiftlang-6.4.0.25.4 clang-2100.3.25.1) -// swift-module-flags: -target arm64-apple-macos13.0 -enable-objc-interop -language-mode 6 -O -enable-experimental-feature DebugDescriptionMacro -module-name XCStringsCatalog -package-name swift_xcstrings_catalog -// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.4 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-macosx13.0 -enable-objc-interop -swift-version 6 -O -module-name XCStringsCatalog -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 import Swift @_exported import XCStringsCatalogCore import _Concurrency diff --git a/.agents/interfaces/macos/XCStringsCatalogCore.swiftinterface b/.agents/interfaces/macos/XCStringsCatalogCore.swiftinterface index e8e0e7c..26d22a7 100644 --- a/.agents/interfaces/macos/XCStringsCatalogCore.swiftinterface +++ b/.agents/interfaces/macos/XCStringsCatalogCore.swiftinterface @@ -1,173 +1,173 @@ // swift-interface-format-version: 1.0 -// swift-compiler-version: Apple Swift version 6.4 (swiftlang-6.4.0.25.4 clang-2100.3.25.1) -// swift-module-flags: -target arm64-apple-macos13.0 -enable-objc-interop -language-mode 6 -O -enable-experimental-feature DebugDescriptionMacro -module-name XCStringsCatalogCore -package-name swift_xcstrings_catalog -// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.4 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-macosx13.0 -enable-objc-interop -swift-version 6 -O -module-name XCStringsCatalogCore -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 import Foundation import Swift import _Concurrency import _StringProcessing import _SwiftConcurrencyShims -public struct XCStringEntry : Swift::Codable, Swift::Hashable, Swift::Sendable { - public typealias Localizations = [XCStringsCatalogCore::XCStringLanguage : XCStringsCatalogCore::XCStringLocalization] - @_hasInitialValue public var comment: Swift::String? - @_hasInitialValue public var extractionState: XCStringsCatalogCore::XCStringExtractionState? - @_hasInitialValue public var localizations: XCStringsCatalogCore::XCStringEntry.XCStringsCatalogCore::Localizations? - public init(comment: Swift::String? = nil, extractionState: XCStringsCatalogCore::XCStringExtractionState? = nil, localizations: XCStringsCatalogCore::XCStringEntry.XCStringsCatalogCore::Localizations? = nil) - @_implements(Swift::Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore::XCStringEntry, _ b: XCStringsCatalogCore::XCStringEntry) -> Swift::Bool - public func encode(to encoder: any Swift::Encoder) throws - public func hash(into hasher: inout Swift::Hasher) - public var hashValue: Swift::Int { +public struct XCStringEntry : Swift.Codable, Swift.Hashable, Swift.Sendable { + public typealias Localizations = [XCStringsCatalogCore.XCStringLanguage : XCStringsCatalogCore.XCStringLocalization] + @_hasInitialValue public var comment: Swift.String? + @_hasInitialValue public var extractionState: XCStringsCatalogCore.XCStringExtractionState? + @_hasInitialValue public var localizations: XCStringsCatalogCore.XCStringEntry.Localizations? + public init(comment: Swift.String? = nil, extractionState: XCStringsCatalogCore.XCStringExtractionState? = nil, localizations: XCStringsCatalogCore.XCStringEntry.Localizations? = nil) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringEntry, _ b: XCStringsCatalogCore.XCStringEntry) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { get } - public init(from decoder: any Swift::Decoder) throws + public init(from decoder: any Swift.Decoder) throws } -public struct XCStringExtractionState : Swift::RawRepresentable, Swift::CodingKeyRepresentable, Swift::Codable, Swift::Hashable, Swift::Sendable { - public let rawValue: Swift::String - public init(rawValue: Swift::String) - @_hasInitialValue public static let manual: XCStringsCatalogCore::XCStringExtractionState - @_hasInitialValue public static let automatic: XCStringsCatalogCore::XCStringExtractionState - @_hasInitialValue public static let migrated: XCStringsCatalogCore::XCStringExtractionState - public typealias RawValue = Swift::String +public struct XCStringExtractionState : Swift.RawRepresentable, Swift.CodingKeyRepresentable, Swift.Codable, Swift.Hashable, Swift.Sendable { + public let rawValue: Swift.String + public init(rawValue: Swift.String) + @_hasInitialValue public static let manual: XCStringsCatalogCore.XCStringExtractionState + @_hasInitialValue public static let automatic: XCStringsCatalogCore.XCStringExtractionState + @_hasInitialValue public static let migrated: XCStringsCatalogCore.XCStringExtractionState + public typealias RawValue = Swift.String } -extension XCStringsCatalogCore::XCStringExtractionState : Swift::ExpressibleByStringLiteral { - public init(stringLiteral value: Swift::StringLiteralType) - public typealias ExtendedGraphemeClusterLiteralType = Swift::StringLiteralType - public typealias StringLiteralType = Swift::StringLiteralType - public typealias UnicodeScalarLiteralType = Swift::StringLiteralType +extension XCStringsCatalogCore.XCStringExtractionState : Swift.ExpressibleByStringLiteral { + public init(stringLiteral value: Swift.StringLiteralType) + public typealias ExtendedGraphemeClusterLiteralType = Swift.StringLiteralType + public typealias StringLiteralType = Swift.StringLiteralType + public typealias UnicodeScalarLiteralType = Swift.StringLiteralType } -public struct XCStringLanguage : Swift::RawRepresentable, Swift::CodingKeyRepresentable, Swift::Codable, Swift::Hashable, Swift::Sendable { - public let rawValue: Swift::String - public init(rawValue: Swift::String) - @_hasInitialValue public static let english: XCStringsCatalogCore::XCStringLanguage - public typealias RawValue = Swift::String +public struct XCStringLanguage : Swift.RawRepresentable, Swift.CodingKeyRepresentable, Swift.Codable, Swift.Hashable, Swift.Sendable { + public let rawValue: Swift.String + public init(rawValue: Swift.String) + @_hasInitialValue public static let english: XCStringsCatalogCore.XCStringLanguage + public typealias RawValue = Swift.String } -extension XCStringsCatalogCore::XCStringLanguage : Swift::ExpressibleByStringLiteral { - public init(stringLiteral value: Swift::StringLiteralType) - public typealias ExtendedGraphemeClusterLiteralType = Swift::StringLiteralType - public typealias StringLiteralType = Swift::StringLiteralType - public typealias UnicodeScalarLiteralType = Swift::StringLiteralType +extension XCStringsCatalogCore.XCStringLanguage : Swift.ExpressibleByStringLiteral { + public init(stringLiteral value: Swift.StringLiteralType) + public typealias ExtendedGraphemeClusterLiteralType = Swift.StringLiteralType + public typealias StringLiteralType = Swift.StringLiteralType + public typealias UnicodeScalarLiteralType = Swift.StringLiteralType } -public struct XCStringLocalization : Swift::Codable, Swift::Hashable, Swift::Sendable { - @_hasInitialValue public var stringUnit: XCStringsCatalogCore::XCStringUnit? - @_hasInitialValue public var substitutions: [Swift::String : XCStringsCatalogCore::XCStringSubstitution]? - @_hasInitialValue public var variations: XCStringsCatalogCore::XCStringVariations? - public init(stringUnit: XCStringsCatalogCore::XCStringUnit? = nil, substitutions: [Swift::String : XCStringsCatalogCore::XCStringSubstitution]? = nil, variations: XCStringsCatalogCore::XCStringVariations? = nil) - @_implements(Swift::Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore::XCStringLocalization, _ b: XCStringsCatalogCore::XCStringLocalization) -> Swift::Bool - public func encode(to encoder: any Swift::Encoder) throws - public func hash(into hasher: inout Swift::Hasher) - public var hashValue: Swift::Int { +public struct XCStringLocalization : Swift.Codable, Swift.Hashable, Swift.Sendable { + @_hasInitialValue public var stringUnit: XCStringsCatalogCore.XCStringUnit? + @_hasInitialValue public var substitutions: [Swift.String : XCStringsCatalogCore.XCStringSubstitution]? + @_hasInitialValue public var variations: XCStringsCatalogCore.XCStringVariations? + public init(stringUnit: XCStringsCatalogCore.XCStringUnit? = nil, substitutions: [Swift.String : XCStringsCatalogCore.XCStringSubstitution]? = nil, variations: XCStringsCatalogCore.XCStringVariations? = nil) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringLocalization, _ b: XCStringsCatalogCore.XCStringLocalization) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { get } - public init(from decoder: any Swift::Decoder) throws + public init(from decoder: any Swift.Decoder) throws } -public struct XCStringSubstitution : Swift::Codable, Swift::Hashable, Swift::Sendable { - public let argNum: Swift::Int - public let formatSpecifier: Swift::String - public let variations: XCStringsCatalogCore::XCStringVariations? - public init(argNum: Swift::Int, formatSpecifier: Swift::String, variations: XCStringsCatalogCore::XCStringVariations?) - @_implements(Swift::Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore::XCStringSubstitution, _ b: XCStringsCatalogCore::XCStringSubstitution) -> Swift::Bool - public func encode(to encoder: any Swift::Encoder) throws - public func hash(into hasher: inout Swift::Hasher) - public var hashValue: Swift::Int { +public struct XCStringSubstitution : Swift.Codable, Swift.Hashable, Swift.Sendable { + public let argNum: Swift.Int + public let formatSpecifier: Swift.String + public let variations: XCStringsCatalogCore.XCStringVariations? + public init(argNum: Swift.Int, formatSpecifier: Swift.String, variations: XCStringsCatalogCore.XCStringVariations?) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringSubstitution, _ b: XCStringsCatalogCore.XCStringSubstitution) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { get } - public init(from decoder: any Swift::Decoder) throws + public init(from decoder: any Swift.Decoder) throws } -public struct XCStringUnit : Swift::Codable, Swift::Hashable, Swift::Sendable { - public var state: XCStringsCatalogCore::XCStringUnitState - public var value: Swift::String - public init(state: XCStringsCatalogCore::XCStringUnitState, value: Swift::String) - @_implements(Swift::Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore::XCStringUnit, _ b: XCStringsCatalogCore::XCStringUnit) -> Swift::Bool - public func encode(to encoder: any Swift::Encoder) throws - public func hash(into hasher: inout Swift::Hasher) - public var hashValue: Swift::Int { +public struct XCStringUnit : Swift.Codable, Swift.Hashable, Swift.Sendable { + public var state: XCStringsCatalogCore.XCStringUnitState + public var value: Swift.String + public init(state: XCStringsCatalogCore.XCStringUnitState, value: Swift.String) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringUnit, _ b: XCStringsCatalogCore.XCStringUnit) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { get } - public init(from decoder: any Swift::Decoder) throws + public init(from decoder: any Swift.Decoder) throws } -public struct XCStringUnitState : Swift::RawRepresentable, Swift::Codable, Swift::Hashable, Swift::Sendable { - public let rawValue: Swift::String - public init(rawValue: Swift::String) - @_hasInitialValue public static let translated: XCStringsCatalogCore::XCStringUnitState - @_hasInitialValue public static let needsReview: XCStringsCatalogCore::XCStringUnitState - public typealias RawValue = Swift::String +public struct XCStringUnitState : Swift.RawRepresentable, Swift.Codable, Swift.Hashable, Swift.Sendable { + public let rawValue: Swift.String + public init(rawValue: Swift.String) + @_hasInitialValue public static let translated: XCStringsCatalogCore.XCStringUnitState + @_hasInitialValue public static let needsReview: XCStringsCatalogCore.XCStringUnitState + public typealias RawValue = Swift.String } -extension XCStringsCatalogCore::XCStringUnitState : Swift::ExpressibleByStringLiteral { - public init(stringLiteral value: Swift::StringLiteralType) - public typealias ExtendedGraphemeClusterLiteralType = Swift::StringLiteralType - public typealias StringLiteralType = Swift::StringLiteralType - public typealias UnicodeScalarLiteralType = Swift::StringLiteralType +extension XCStringsCatalogCore.XCStringUnitState : Swift.ExpressibleByStringLiteral { + public init(stringLiteral value: Swift.StringLiteralType) + public typealias ExtendedGraphemeClusterLiteralType = Swift.StringLiteralType + public typealias StringLiteralType = Swift.StringLiteralType + public typealias UnicodeScalarLiteralType = Swift.StringLiteralType } -public struct XCStringVariation : Swift::Codable, Swift::Hashable, Swift::Sendable { - public var stringUnit: XCStringsCatalogCore::XCStringUnit - public init(stringUnit: XCStringsCatalogCore::XCStringUnit) - @_implements(Swift::Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore::XCStringVariation, _ b: XCStringsCatalogCore::XCStringVariation) -> Swift::Bool - public func encode(to encoder: any Swift::Encoder) throws - public func hash(into hasher: inout Swift::Hasher) - public var hashValue: Swift::Int { +public struct XCStringVariation : Swift.Codable, Swift.Hashable, Swift.Sendable { + public var stringUnit: XCStringsCatalogCore.XCStringUnit + public init(stringUnit: XCStringsCatalogCore.XCStringUnit) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringVariation, _ b: XCStringsCatalogCore.XCStringVariation) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { get } - public init(from decoder: any Swift::Decoder) throws + public init(from decoder: any Swift.Decoder) throws } -public struct XCStringVariations : Swift::Codable, Swift::Hashable, Swift::Sendable { - public let device: [XCStringsCatalogCore::XCStringVariations.XCStringsCatalogCore::DeviceKey : XCStringsCatalogCore::XCStringVariation]? - public let plural: [XCStringsCatalogCore::XCStringVariations.XCStringsCatalogCore::PluralKey : XCStringsCatalogCore::XCStringVariation]? - public init(device: [XCStringsCatalogCore::XCStringVariations.XCStringsCatalogCore::DeviceKey : XCStringsCatalogCore::XCStringVariation]?, plural: [XCStringsCatalogCore::XCStringVariations.XCStringsCatalogCore::PluralKey : XCStringsCatalogCore::XCStringVariation]?) - @_implements(Swift::Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore::XCStringVariations, _ b: XCStringsCatalogCore::XCStringVariations) -> Swift::Bool - public func encode(to encoder: any Swift::Encoder) throws - public func hash(into hasher: inout Swift::Hasher) - public var hashValue: Swift::Int { +public struct XCStringVariations : Swift.Codable, Swift.Hashable, Swift.Sendable { + public let device: [XCStringsCatalogCore.XCStringVariations.DeviceKey : XCStringsCatalogCore.XCStringVariation]? + public let plural: [XCStringsCatalogCore.XCStringVariations.PluralKey : XCStringsCatalogCore.XCStringVariation]? + public init(device: [XCStringsCatalogCore.XCStringVariations.DeviceKey : XCStringsCatalogCore.XCStringVariation]?, plural: [XCStringsCatalogCore.XCStringVariations.PluralKey : XCStringsCatalogCore.XCStringVariation]?) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringVariations, _ b: XCStringsCatalogCore.XCStringVariations) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { get } - public init(from decoder: any Swift::Decoder) throws + public init(from decoder: any Swift.Decoder) throws } -extension XCStringsCatalogCore::XCStringVariations { - public struct DeviceKey : Swift::RawRepresentable, Swift::CodingKeyRepresentable, Swift::Codable, Swift::Hashable, Swift::Sendable, Swift::ExpressibleByStringLiteral { - public let rawValue: Swift::String - public init(rawValue: Swift::String) - public init(stringLiteral value: Swift::StringLiteralType) - @_hasInitialValue public static let iPhone: XCStringsCatalogCore::XCStringVariations.XCStringsCatalogCore::DeviceKey - @_hasInitialValue public static let iPod: XCStringsCatalogCore::XCStringVariations.XCStringsCatalogCore::DeviceKey - @_hasInitialValue public static let iPad: XCStringsCatalogCore::XCStringVariations.XCStringsCatalogCore::DeviceKey - @_hasInitialValue public static let appleWatch: XCStringsCatalogCore::XCStringVariations.XCStringsCatalogCore::DeviceKey - @_hasInitialValue public static let appleTV: XCStringsCatalogCore::XCStringVariations.XCStringsCatalogCore::DeviceKey - @_hasInitialValue public static let appleVision: XCStringsCatalogCore::XCStringVariations.XCStringsCatalogCore::DeviceKey - @_hasInitialValue public static let mac: XCStringsCatalogCore::XCStringVariations.XCStringsCatalogCore::DeviceKey - @_hasInitialValue public static let other: XCStringsCatalogCore::XCStringVariations.XCStringsCatalogCore::DeviceKey - public typealias ExtendedGraphemeClusterLiteralType = Swift::StringLiteralType - public typealias RawValue = Swift::String - public typealias StringLiteralType = Swift::StringLiteralType - public typealias UnicodeScalarLiteralType = Swift::StringLiteralType +extension XCStringsCatalogCore.XCStringVariations { + public struct DeviceKey : Swift.RawRepresentable, Swift.CodingKeyRepresentable, Swift.Codable, Swift.Hashable, Swift.Sendable, Swift.ExpressibleByStringLiteral { + public let rawValue: Swift.String + public init(rawValue: Swift.String) + public init(stringLiteral value: Swift.StringLiteralType) + @_hasInitialValue public static let iPhone: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let iPod: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let iPad: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let appleWatch: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let appleTV: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let appleVision: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let mac: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let other: XCStringsCatalogCore.XCStringVariations.DeviceKey + public typealias ExtendedGraphemeClusterLiteralType = Swift.StringLiteralType + public typealias RawValue = Swift.String + public typealias StringLiteralType = Swift.StringLiteralType + public typealias UnicodeScalarLiteralType = Swift.StringLiteralType } - public struct PluralKey : Swift::RawRepresentable, Swift::ExpressibleByStringLiteral, Swift::Codable, Swift::Hashable, Swift::Sendable, Swift::CodingKeyRepresentable { - public let rawValue: Swift::String - public init(rawValue: Swift::String) - public init(stringLiteral value: Swift::StringLiteralType) - @_hasInitialValue public static let zero: XCStringsCatalogCore::XCStringVariations.XCStringsCatalogCore::PluralKey - @_hasInitialValue public static let one: XCStringsCatalogCore::XCStringVariations.XCStringsCatalogCore::PluralKey - @_hasInitialValue public static let two: XCStringsCatalogCore::XCStringVariations.XCStringsCatalogCore::PluralKey - @_hasInitialValue public static let few: XCStringsCatalogCore::XCStringVariations.XCStringsCatalogCore::PluralKey - @_hasInitialValue public static let many: XCStringsCatalogCore::XCStringVariations.XCStringsCatalogCore::PluralKey - @_hasInitialValue public static let other: XCStringsCatalogCore::XCStringVariations.XCStringsCatalogCore::PluralKey - public typealias ExtendedGraphemeClusterLiteralType = Swift::StringLiteralType - public typealias RawValue = Swift::String - public typealias StringLiteralType = Swift::StringLiteralType - public typealias UnicodeScalarLiteralType = Swift::StringLiteralType + public struct PluralKey : Swift.RawRepresentable, Swift.ExpressibleByStringLiteral, Swift.Codable, Swift.Hashable, Swift.Sendable, Swift.CodingKeyRepresentable { + public let rawValue: Swift.String + public init(rawValue: Swift.String) + public init(stringLiteral value: Swift.StringLiteralType) + @_hasInitialValue public static let zero: XCStringsCatalogCore.XCStringVariations.PluralKey + @_hasInitialValue public static let one: XCStringsCatalogCore.XCStringVariations.PluralKey + @_hasInitialValue public static let two: XCStringsCatalogCore.XCStringVariations.PluralKey + @_hasInitialValue public static let few: XCStringsCatalogCore.XCStringVariations.PluralKey + @_hasInitialValue public static let many: XCStringsCatalogCore.XCStringVariations.PluralKey + @_hasInitialValue public static let other: XCStringsCatalogCore.XCStringVariations.PluralKey + public typealias ExtendedGraphemeClusterLiteralType = Swift.StringLiteralType + public typealias RawValue = Swift.String + public typealias StringLiteralType = Swift.StringLiteralType + public typealias UnicodeScalarLiteralType = Swift.StringLiteralType } } -public struct XCStringsCatalog : Swift::Codable, Swift::Hashable, Swift::Sendable { - public var sourceLanguage: XCStringsCatalogCore::XCStringLanguage - public var strings: [Swift::String : XCStringsCatalogCore::XCStringEntry] - public var version: Swift::String - public init(sourceLanguage: XCStringsCatalogCore::XCStringLanguage, strings: [Swift::String : XCStringsCatalogCore::XCStringEntry], version: Swift::String) - @_implements(Swift::Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore::XCStringsCatalog, _ b: XCStringsCatalogCore::XCStringsCatalog) -> Swift::Bool - public func encode(to encoder: any Swift::Encoder) throws - public func hash(into hasher: inout Swift::Hasher) - public var hashValue: Swift::Int { +public struct XCStringsCatalog : Swift.Codable, Swift.Hashable, Swift.Sendable { + public var sourceLanguage: XCStringsCatalogCore.XCStringLanguage + public var strings: [Swift.String : XCStringsCatalogCore.XCStringEntry] + public var version: Swift.String + public init(sourceLanguage: XCStringsCatalogCore.XCStringLanguage, strings: [Swift.String : XCStringsCatalogCore.XCStringEntry], version: Swift.String) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringsCatalog, _ b: XCStringsCatalogCore.XCStringsCatalog) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { get } - public init(from decoder: any Swift::Decoder) throws + public init(from decoder: any Swift.Decoder) throws } -extension XCStringsCatalogCore::XCStringsCatalog { - public init(contentsOf fileURL: Foundation::URL) throws +extension XCStringsCatalogCore.XCStringsCatalog { + public init(contentsOf fileURL: Foundation.URL) throws } diff --git a/.agents/interfaces/macos/XCStringsCatalogParser.swiftinterface b/.agents/interfaces/macos/XCStringsCatalogParser.swiftinterface index 1729f17..70962b0 100644 --- a/.agents/interfaces/macos/XCStringsCatalogParser.swiftinterface +++ b/.agents/interfaces/macos/XCStringsCatalogParser.swiftinterface @@ -1,7 +1,7 @@ // swift-interface-format-version: 1.0 -// swift-compiler-version: Apple Swift version 6.4 (swiftlang-6.4.0.25.4 clang-2100.3.25.1) -// swift-module-flags: -target arm64-apple-macos13.0 -enable-objc-interop -language-mode 6 -O -enable-experimental-feature DebugDescriptionMacro -module-name XCStringsCatalogParser -package-name swift_xcstrings_catalog -// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.4 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-macosx13.0 -enable-objc-interop -swift-version 6 -O -module-name XCStringsCatalogParser -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 import Dependencies import Foundation import RegexBuilder @@ -12,63 +12,63 @@ import _StringProcessing import _SwiftConcurrencyShims @_exported import _XCStringResource @_exported import _XCStringsSource -public enum ExtractionError : Swift::Sendable, Swift::Error { - public struct Context : Swift::Sendable { - public let key: Swift::String - public let debugDescription: Swift::String +public enum ExtractionError : Swift.Sendable, Swift.Error { + public struct Context : Swift.Sendable { + public let key: Swift.String + public let debugDescription: Swift.String } - case localizationCorrupt(XCStringsCatalogParser::ExtractionError.XCStringsCatalogParser::Context) - case unsupported(XCStringsCatalogParser::ExtractionError.XCStringsCatalogParser::Context) + case localizationCorrupt(XCStringsCatalogParser.ExtractionError.Context) + case unsupported(XCStringsCatalogParser.ExtractionError.Context) } -extension XCStringsCatalogParser::ExtractionError : Foundation::LocalizedError { - public var errorDescription: Swift::String? { +extension XCStringsCatalogParser.ExtractionError : Foundation.LocalizedError { + public var errorDescription: Swift.String? { get } } -public struct ExtractionIssue : Swift::Equatable, Swift::Sendable { - public enum Reason : Swift::Equatable, Swift::Sendable { - case wrongExtractionState(XCStringsCatalogCore::XCStringExtractionState?) - case missingSourceLocalization(XCStringsCatalogCore::XCStringLanguage) - @_semantics("derived_enum_equals") @_implements(Swift::Equatable, ==(_:_:)) public static func __derived_enum_equals(_ a: XCStringsCatalogParser::ExtractionIssue.XCStringsCatalogParser::Reason, _ b: XCStringsCatalogParser::ExtractionIssue.XCStringsCatalogParser::Reason) -> Swift::Bool +public struct ExtractionIssue : Swift.Equatable, Swift.Sendable { + public enum Reason : Swift.Equatable, Swift.Sendable { + case wrongExtractionState(XCStringsCatalogCore.XCStringExtractionState?) + case missingSourceLocalization(XCStringsCatalogCore.XCStringLanguage) + @_semantics("derived_enum_equals") @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_enum_equals(_ a: XCStringsCatalogParser.ExtractionIssue.Reason, _ b: XCStringsCatalogParser.ExtractionIssue.Reason) -> Swift.Bool } - public let key: Swift::String - public let reason: XCStringsCatalogParser::ExtractionIssue.XCStringsCatalogParser::Reason - public var description: Swift::String { + public let key: Swift.String + public let reason: XCStringsCatalogParser.ExtractionIssue.Reason + public var description: Swift.String { get } - @_implements(Swift::Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogParser::ExtractionIssue, _ b: XCStringsCatalogParser::ExtractionIssue) -> Swift::Bool + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogParser.ExtractionIssue, _ b: XCStringsCatalogParser.ExtractionIssue) -> Swift.Bool } -extension XCStringsCatalogParser::DefaultXCStringsCatalogParser { +extension XCStringsCatalogParser.DefaultXCStringsCatalogParser { @usableFromInline - internal func extractResources(from legacyFormat: _XCStringsSource::XCStringsSource._XCStringsSource::LegacyFormat) throws -> XCStringsCatalogParser::DefaultXCStringsCatalogParser.XCStringsCatalogParser::Output + internal func extractResources(from legacyFormat: _XCStringsSource.XCStringsSource.LegacyFormat) throws -> XCStringsCatalogParser.DefaultXCStringsCatalogParser.Output } -extension XCStringsCatalogParser::DefaultXCStringsCatalogParser { +extension XCStringsCatalogParser.DefaultXCStringsCatalogParser { @usableFromInline - internal func collect(collector: (inout [_XCStringResource::XCStringResource], inout [XCStringsCatalogParser::ExtractionIssue]) throws -> Swift::Void) rethrows -> XCStringsCatalogParser::DefaultXCStringsCatalogParser.XCStringsCatalogParser::Output + internal func collect(collector: (inout [_XCStringResource.XCStringResource], inout [XCStringsCatalogParser.ExtractionIssue]) throws -> Swift.Void) rethrows -> XCStringsCatalogParser.DefaultXCStringsCatalogParser.Output } -extension XCStringsCatalogParser::DefaultXCStringsCatalogParser { +extension XCStringsCatalogParser.DefaultXCStringsCatalogParser { @usableFromInline - internal func extractResources(from catalog: XCStringsCatalogCore::XCStringsCatalog) throws -> XCStringsCatalogParser::DefaultXCStringsCatalogParser.XCStringsCatalogParser::Output + internal func extractResources(from catalog: XCStringsCatalogCore.XCStringsCatalog) throws -> XCStringsCatalogParser.DefaultXCStringsCatalogParser.Output } -public struct XCStringsCatalogParserOutput : Swift::Equatable, Swift::Sendable { - public let resources: [_XCStringResource::XCStringResource] - public let issues: [XCStringsCatalogParser::ExtractionIssue] - public init(resources: [_XCStringResource::XCStringResource], issues: [XCStringsCatalogParser::ExtractionIssue]) - @_implements(Swift::Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogParser::XCStringsCatalogParserOutput, _ b: XCStringsCatalogParser::XCStringsCatalogParserOutput) -> Swift::Bool +public struct XCStringsCatalogParserOutput : Swift.Equatable, Swift.Sendable { + public let resources: [_XCStringResource.XCStringResource] + public let issues: [XCStringsCatalogParser.ExtractionIssue] + public init(resources: [_XCStringResource.XCStringResource], issues: [XCStringsCatalogParser.ExtractionIssue]) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogParser.XCStringsCatalogParserOutput, _ b: XCStringsCatalogParser.XCStringsCatalogParserOutput) -> Swift.Bool } -public protocol XCStringsCatalogParser : Swift::Sendable { - func parse(from source: _XCStringsSource::XCStringsSource) throws -> XCStringsCatalogParser::XCStringsCatalogParserOutput +public protocol XCStringsCatalogParser : Swift.Sendable { + func parse(from source: _XCStringsSource.XCStringsSource) throws -> XCStringsCatalogParser.XCStringsCatalogParserOutput } -extension Dependencies::DependencyValues { - public var xcStringsCatalogParser: any XCStringsCatalogParser::XCStringsCatalogParser { +extension Dependencies.DependencyValues { + public var xcStringsCatalogParser: any XCStringsCatalogParser.XCStringsCatalogParser { get set } } -public struct DefaultXCStringsCatalogParser : XCStringsCatalogParser::XCStringsCatalogParser { - public typealias Output = XCStringsCatalogParser::XCStringsCatalogParserOutput +public struct DefaultXCStringsCatalogParser : XCStringsCatalogParser.XCStringsCatalogParser { + public typealias Output = XCStringsCatalogParser.XCStringsCatalogParserOutput public init() - @inlinable public func parse(from source: _XCStringsSource::XCStringsSource) throws -> XCStringsCatalogParser::XCStringsCatalogParserOutput { + @inlinable public func parse(from source: _XCStringsSource.XCStringsSource) throws -> XCStringsCatalogParser.XCStringsCatalogParserOutput { switch source { case let .catalog(stringCatalog): try extractResources(from: stringCatalog) @@ -77,6 +77,6 @@ public struct DefaultXCStringsCatalogParser : XCStringsCatalogParser::XCStringsC } } } -extension XCStringsCatalogCore::XCStringsCatalog { - public func parse() throws -> XCStringsCatalogParser::XCStringsCatalogParserOutput +extension XCStringsCatalogCore.XCStringsCatalog { + public func parse() throws -> XCStringsCatalogParser.XCStringsCatalogParserOutput } diff --git a/.agents/interfaces/macos/XCStringsCatalogValidator.swiftinterface b/.agents/interfaces/macos/XCStringsCatalogValidator.swiftinterface index 2b88190..8e04bdf 100644 --- a/.agents/interfaces/macos/XCStringsCatalogValidator.swiftinterface +++ b/.agents/interfaces/macos/XCStringsCatalogValidator.swiftinterface @@ -1,7 +1,7 @@ // swift-interface-format-version: 1.0 -// swift-compiler-version: Apple Swift version 6.4 (swiftlang-6.4.0.25.4 clang-2100.3.25.1) -// swift-module-flags: -target arm64-apple-macos13.0 -enable-objc-interop -language-mode 6 -O -enable-experimental-feature DebugDescriptionMacro -module-name XCStringsCatalogValidator -package-name swift_xcstrings_catalog -// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.4 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-macosx13.0 -enable-objc-interop -swift-version 6 -O -module-name XCStringsCatalogValidator -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 import Dependencies import Foundation import Swift @@ -9,102 +9,102 @@ import _Concurrency import _StringProcessing import _SwiftConcurrencyShims @_exported import _XCStringResource -extension Dependencies::DependencyValues { - public var defaultXCStringResourceValidator: any XCStringsCatalogValidator::XCStringResourceValidator { +extension Dependencies.DependencyValues { + public var defaultXCStringResourceValidator: any XCStringsCatalogValidator.XCStringResourceValidator { get set } } -extension Dependencies::DependencyValues { - public var defaultXCStringResourcesValidator: any XCStringsCatalogValidator::XCStringResourcesValidator { +extension Dependencies.DependencyValues { + public var defaultXCStringResourcesValidator: any XCStringsCatalogValidator.XCStringResourcesValidator { get set } } -public struct DefaultXCStringResourcesValidator : XCStringsCatalogValidator::XCStringResourcesValidator { - @_hasInitialValue private var _defaultXCStringResourceValidator: Dependencies::Dependency +public struct DefaultXCStringResourcesValidator : XCStringsCatalogValidator.XCStringResourcesValidator { + @_hasInitialValue private var _defaultXCStringResourceValidator: Dependencies.Dependency public init() - public func validateResources(_ resources: [_XCStringResource::XCStringResource]) -> [XCStringsCatalogValidator::XCStringResourceIssue] + public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] } -public struct XCStringResourceIssue : Swift::Equatable, Swift::Sendable { - public let resources: [_XCStringResource::XCStringResource] - public let description: Swift::String - public init(resources: [_XCStringResource::XCStringResource], description: Swift::String) - @_implements(Swift::Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogValidator::XCStringResourceIssue, _ b: XCStringsCatalogValidator::XCStringResourceIssue) -> Swift::Bool +public struct XCStringResourceIssue : Swift.Equatable, Swift.Sendable { + public let resources: [_XCStringResource.XCStringResource] + public let description: Swift.String + public init(resources: [_XCStringResource.XCStringResource], description: Swift.String) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogValidator.XCStringResourceIssue, _ b: XCStringsCatalogValidator.XCStringResourceIssue) -> Swift.Bool } -public protocol XCStringResourceValidator : Swift::Sendable { - func validateResource(_ resource: _XCStringResource::XCStringResource) -> [XCStringsCatalogValidator::XCStringResourceIssue] +public protocol XCStringResourceValidator : Swift.Sendable { + func validateResource(_ resource: _XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] } public enum XCStringResourceValidators { } -extension XCStringsCatalogValidator::XCStringResourceValidators { - public struct AnyValidator : XCStringsCatalogValidator::XCStringResourceValidator { +extension XCStringsCatalogValidator.XCStringResourceValidators { + public struct AnyValidator : XCStringsCatalogValidator.XCStringResourceValidator { @usableFromInline - internal let underlying: any XCStringsCatalogValidator::XCStringResourceValidator - public init(_ underlying: any XCStringsCatalogValidator::XCStringResourceValidator) - @inlinable public init(_ validate: @escaping @Sendable (_XCStringResource::XCStringResource) -> [XCStringsCatalogValidator::XCStringResourceIssue]) { + internal let underlying: any XCStringsCatalogValidator.XCStringResourceValidator + public init(_ underlying: any XCStringsCatalogValidator.XCStringResourceValidator) + @inlinable public init(_ validate: @escaping @Sendable (_XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue]) { self.init(.inline(validate)) } - @inlinable public func validateResource(_ resource: _XCStringResource::XCStringResource) -> [XCStringsCatalogValidator::XCStringResourceIssue] { + @inlinable public func validateResource(_ resource: _XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] { underlying.validateResource(resource) } } } -extension XCStringsCatalogValidator::XCStringResourceValidators { - public struct Empty : XCStringsCatalogValidator::XCStringResourceValidator { - public func validateResource(_ resource: _XCStringResource::XCStringResource) -> [XCStringsCatalogValidator::XCStringResourceIssue] +extension XCStringsCatalogValidator.XCStringResourceValidators { + public struct Empty : XCStringsCatalogValidator.XCStringResourceValidator { + public func validateResource(_ resource: _XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] } } -extension XCStringsCatalogValidator::XCStringResourceValidator where Self == XCStringsCatalogValidator::XCStringResourceValidators.XCStringsCatalogValidator::Empty { - public static var empty: XCStringsCatalogValidator::XCStringResourceValidators.XCStringsCatalogValidator::Empty { +extension XCStringsCatalogValidator.XCStringResourceValidator where Self == XCStringsCatalogValidator.XCStringResourceValidators.Empty { + public static var empty: XCStringsCatalogValidator.XCStringResourceValidators.Empty { get } } -extension XCStringsCatalogValidator::XCStringResourceValidators { - public struct Inline : XCStringsCatalogValidator::XCStringResourceValidator { +extension XCStringsCatalogValidator.XCStringResourceValidators { + public struct Inline : XCStringsCatalogValidator.XCStringResourceValidator { @usableFromInline - internal let validate: @Sendable (_XCStringResource::XCStringResource) -> [XCStringsCatalogValidator::XCStringResourceIssue] - public init(_ validate: @escaping @Sendable (_XCStringResource::XCStringResource) -> [XCStringsCatalogValidator::XCStringResourceIssue]) - @inlinable public func validateResource(_ resource: _XCStringResource::XCStringResource) -> [XCStringsCatalogValidator::XCStringResourceIssue] { + internal let validate: @Sendable (_XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] + public init(_ validate: @escaping @Sendable (_XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue]) + @inlinable public func validateResource(_ resource: _XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] { validate(resource) } } } -extension XCStringsCatalogValidator::XCStringResourceValidator where Self == XCStringsCatalogValidator::XCStringResourceValidators.XCStringsCatalogValidator::Inline { - @inlinable public static func inline(_ validate: @escaping @Sendable (_XCStringResource::XCStringResource) -> [XCStringsCatalogValidator::XCStringResourceIssue]) -> Self { +extension XCStringsCatalogValidator.XCStringResourceValidator where Self == XCStringsCatalogValidator.XCStringResourceValidators.Inline { + @inlinable public static func inline(_ validate: @escaping @Sendable (_XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue]) -> Self { return .init(validate) } } -extension XCStringsCatalogValidator::XCStringResourceValidators { - public struct Concat : XCStringsCatalogValidator::XCStringResourceValidator { +extension XCStringsCatalogValidator.XCStringResourceValidators { + public struct Concat : XCStringsCatalogValidator.XCStringResourceValidator { @usableFromInline - internal let validators: [any XCStringsCatalogValidator::XCStringResourceValidator] - public init(_ validators: [any XCStringsCatalogValidator::XCStringResourceValidator]) - @inlinable public func validateResource(_ resource: _XCStringResource::XCStringResource) -> [XCStringsCatalogValidator::XCStringResourceIssue] { + internal let validators: [any XCStringsCatalogValidator.XCStringResourceValidator] + public init(_ validators: [any XCStringsCatalogValidator.XCStringResourceValidator]) + @inlinable public func validateResource(_ resource: _XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] { validators.flatMap { $0.validateResource(resource) } } } } -extension XCStringsCatalogValidator::XCStringResourceValidator where Self == XCStringsCatalogValidator::XCStringResourceValidators.XCStringsCatalogValidator::Concat { - @inlinable public static func concatenate(_ validators: any XCStringsCatalogValidator::XCStringResourceValidator...) -> Self { +extension XCStringsCatalogValidator.XCStringResourceValidator where Self == XCStringsCatalogValidator.XCStringResourceValidators.Concat { + @inlinable public static func concatenate(_ validators: any XCStringsCatalogValidator.XCStringResourceValidator...) -> Self { return .init(validators) } - @inlinable public static func concatenate(_ validators: [any XCStringsCatalogValidator::XCStringResourceValidator]) -> Self { + @inlinable public static func concatenate(_ validators: [any XCStringsCatalogValidator.XCStringResourceValidator]) -> Self { return .init(validators) } } -extension XCStringsCatalogValidator::XCStringResourceValidator { - @inlinable public func appending(_ validators: any XCStringsCatalogValidator::XCStringResourceValidator...) -> some XCStringsCatalogValidator::XCStringResourceValidator { +extension XCStringsCatalogValidator.XCStringResourceValidator { + @inlinable public func appending(_ validators: any XCStringsCatalogValidator.XCStringResourceValidator...) -> some XCStringsCatalogValidator.XCStringResourceValidator { return .concatenate([self] + validators) } } -extension XCStringsCatalogValidator::XCStringResourcesValidators { - public struct ConflictingIdentifiers : XCStringsCatalogValidator::XCStringResourcesValidator { +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct ConflictingIdentifiers : XCStringsCatalogValidator.XCStringResourcesValidator { @usableFromInline - internal let identifier: @Sendable (_XCStringResource::XCStringResource) -> Swift::String - public init(_ identifier: @escaping @Sendable (_XCStringResource::XCStringResource) -> Swift::String) - @inlinable public func validateResources(_ resources: [_XCStringResource::XCStringResource]) -> [XCStringsCatalogValidator::XCStringResourceIssue] { + internal let identifier: @Sendable (_XCStringResource.XCStringResource) -> Swift.String + public init(_ identifier: @escaping @Sendable (_XCStringResource.XCStringResource) -> Swift.String) + @inlinable public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] { Dictionary(grouping: resources, by: identifier) .filter { $0.value.count > 1 } .mapValues { resources in @@ -124,15 +124,15 @@ extension XCStringsCatalogValidator::XCStringResourcesValidators { } } } -extension XCStringsCatalogValidator::XCStringResourcesValidator where Self == XCStringsCatalogValidator::XCStringResourcesValidators.XCStringsCatalogValidator::ConflictingIdentifiers { - public static func conflictingIdentifiers(by identifier: @escaping @Sendable (_XCStringResource::XCStringResource) -> Swift::String) -> Self +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.ConflictingIdentifiers { + public static func conflictingIdentifiers(by identifier: @escaping @Sendable (_XCStringResource.XCStringResource) -> Swift.String) -> Self } -extension XCStringsCatalogValidator::XCStringResourcesValidators { - public struct UnsupportedIdentifiers : XCStringsCatalogValidator::XCStringResourcesValidator { +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct UnsupportedIdentifiers : XCStringsCatalogValidator.XCStringResourcesValidator { @usableFromInline - internal let identifier: @Sendable (_XCStringResource::XCStringResource) -> Swift::String - public init(_ identifier: @escaping @Sendable (_XCStringResource::XCStringResource) -> Swift::String) - @inlinable public func validateResources(_ resources: [_XCStringResource::XCStringResource]) -> [XCStringsCatalogValidator::XCStringResourceIssue] { + internal let identifier: @Sendable (_XCStringResource.XCStringResource) -> Swift.String + public init(_ identifier: @escaping @Sendable (_XCStringResource.XCStringResource) -> Swift.String) + @inlinable public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] { resources .filter { identifier($0).trimmingCharacters(in: .whitespacesAndNewlines).isEmpty } .map { resource in @@ -144,75 +144,75 @@ extension XCStringsCatalogValidator::XCStringResourcesValidators { } } } -extension XCStringsCatalogValidator::XCStringResourcesValidator where Self == XCStringsCatalogValidator::XCStringResourcesValidators.XCStringsCatalogValidator::UnsupportedIdentifiers { - public static func unsupportedIdentifiers(by identifier: @escaping @Sendable (_XCStringResource::XCStringResource) -> Swift::String) -> Self +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.UnsupportedIdentifiers { + public static func unsupportedIdentifiers(by identifier: @escaping @Sendable (_XCStringResource.XCStringResource) -> Swift.String) -> Self } -extension XCStringsCatalogValidator::XCStringResourcesValidator where Self == XCStringsCatalogValidator::XCStringResourcesValidators.XCStringsCatalogValidator::Concat { - public static func defaultIdentifiersValidator(for identifier: @escaping @Sendable (_XCStringResource::XCStringResource) -> Swift::String) -> Self +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.Concat { + public static func defaultIdentifiersValidator(for identifier: @escaping @Sendable (_XCStringResource.XCStringResource) -> Swift.String) -> Self } -public protocol XCStringResourcesValidator : Swift::Sendable { - func validateResources(_ resources: [_XCStringResource::XCStringResource]) -> [XCStringsCatalogValidator::XCStringResourceIssue] +public protocol XCStringResourcesValidator : Swift.Sendable { + func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] } public enum XCStringResourcesValidators { } -extension XCStringsCatalogValidator::XCStringResourcesValidators { - public struct AnyValidator : XCStringsCatalogValidator::XCStringResourcesValidator { +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct AnyValidator : XCStringsCatalogValidator.XCStringResourcesValidator { @usableFromInline - internal let underlying: any XCStringsCatalogValidator::XCStringResourcesValidator - public init(_ underlying: any XCStringsCatalogValidator::XCStringResourcesValidator) - @inlinable public init(_ validate: @escaping @Sendable ([_XCStringResource::XCStringResource]) -> [XCStringsCatalogValidator::XCStringResourceIssue]) { + internal let underlying: any XCStringsCatalogValidator.XCStringResourcesValidator + public init(_ underlying: any XCStringsCatalogValidator.XCStringResourcesValidator) + @inlinable public init(_ validate: @escaping @Sendable ([_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue]) { self.init(.inline(validate)) } - @inlinable public func validateResources(_ resources: [_XCStringResource::XCStringResource]) -> [XCStringsCatalogValidator::XCStringResourceIssue] { + @inlinable public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] { underlying.validateResources(resources) } } } -extension XCStringsCatalogValidator::XCStringResourcesValidators { - public struct Empty : XCStringsCatalogValidator::XCStringResourcesValidator { - public func validateResources(_ resources: [_XCStringResource::XCStringResource]) -> [XCStringsCatalogValidator::XCStringResourceIssue] +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct Empty : XCStringsCatalogValidator.XCStringResourcesValidator { + public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] } } -extension XCStringsCatalogValidator::XCStringResourcesValidator where Self == XCStringsCatalogValidator::XCStringResourcesValidators.XCStringsCatalogValidator::Empty { - public static var empty: XCStringsCatalogValidator::XCStringResourcesValidators.XCStringsCatalogValidator::Empty { +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.Empty { + public static var empty: XCStringsCatalogValidator.XCStringResourcesValidators.Empty { get } } -extension XCStringsCatalogValidator::XCStringResourcesValidators { - public struct Inline : XCStringsCatalogValidator::XCStringResourcesValidator { +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct Inline : XCStringsCatalogValidator.XCStringResourcesValidator { @usableFromInline - internal let validate: @Sendable ([_XCStringResource::XCStringResource]) -> [XCStringsCatalogValidator::XCStringResourceIssue] - public init(_ validate: @escaping @Sendable ([_XCStringResource::XCStringResource]) -> [XCStringsCatalogValidator::XCStringResourceIssue]) - @inlinable public func validateResources(_ resources: [_XCStringResource::XCStringResource]) -> [XCStringsCatalogValidator::XCStringResourceIssue] { + internal let validate: @Sendable ([_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] + public init(_ validate: @escaping @Sendable ([_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue]) + @inlinable public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] { validate(resources) } } } -extension XCStringsCatalogValidator::XCStringResourcesValidator where Self == XCStringsCatalogValidator::XCStringResourcesValidators.XCStringsCatalogValidator::Inline { - @inlinable public static func inline(_ validate: @escaping @Sendable ([_XCStringResource::XCStringResource]) -> [XCStringsCatalogValidator::XCStringResourceIssue]) -> Self { +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.Inline { + @inlinable public static func inline(_ validate: @escaping @Sendable ([_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue]) -> Self { return .init(validate) } } -extension XCStringsCatalogValidator::XCStringResourcesValidators { - public struct Concat : XCStringsCatalogValidator::XCStringResourcesValidator { +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct Concat : XCStringsCatalogValidator.XCStringResourcesValidator { @usableFromInline - internal let validators: [any XCStringsCatalogValidator::XCStringResourcesValidator] - public init(_ validators: [any XCStringsCatalogValidator::XCStringResourcesValidator]) - @inlinable public func validateResources(_ resources: [_XCStringResource::XCStringResource]) -> [XCStringsCatalogValidator::XCStringResourceIssue] { + internal let validators: [any XCStringsCatalogValidator.XCStringResourcesValidator] + public init(_ validators: [any XCStringsCatalogValidator.XCStringResourcesValidator]) + @inlinable public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] { validators.flatMap { $0.validateResources(resources) } } } } -extension XCStringsCatalogValidator::XCStringResourcesValidator where Self == XCStringsCatalogValidator::XCStringResourcesValidators.XCStringsCatalogValidator::Concat { - @inlinable public static func concatenate(_ validators: any XCStringsCatalogValidator::XCStringResourcesValidator...) -> Self { +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.Concat { + @inlinable public static func concatenate(_ validators: any XCStringsCatalogValidator.XCStringResourcesValidator...) -> Self { return .init(validators) } - @inlinable public static func concatenate(_ validators: [any XCStringsCatalogValidator::XCStringResourcesValidator]) -> Self { + @inlinable public static func concatenate(_ validators: [any XCStringsCatalogValidator.XCStringResourcesValidator]) -> Self { return .init(validators) } } -extension XCStringsCatalogValidator::XCStringResourcesValidator { - @inlinable public func appending(_ validators: any XCStringsCatalogValidator::XCStringResourcesValidator...) -> some XCStringsCatalogValidator::XCStringResourcesValidator { +extension XCStringsCatalogValidator.XCStringResourcesValidator { + @inlinable public func appending(_ validators: any XCStringsCatalogValidator.XCStringResourcesValidator...) -> some XCStringsCatalogValidator.XCStringResourcesValidator { return .concatenate([self] + validators) } diff --git a/.agents/interfaces/macos/_XCStringResource.swiftinterface b/.agents/interfaces/macos/_XCStringResource.swiftinterface index 7f0537a..9003c19 100644 --- a/.agents/interfaces/macos/_XCStringResource.swiftinterface +++ b/.agents/interfaces/macos/_XCStringResource.swiftinterface @@ -1,64 +1,64 @@ // swift-interface-format-version: 1.0 -// swift-compiler-version: Apple Swift version 6.4 (swiftlang-6.4.0.25.4 clang-2100.3.25.1) -// swift-module-flags: -target arm64-apple-macos13.0 -enable-objc-interop -language-mode 6 -O -enable-experimental-feature DebugDescriptionMacro -module-name _XCStringResource -package-name swift_xcstrings_catalog -// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.4 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-macosx13.0 -enable-objc-interop -swift-version 6 -O -module-name _XCStringResource -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 import Foundation import Swift import _Concurrency import _StringProcessing import _SwiftConcurrencyShims -extension _XCStringResource::XCStringResource { - public struct Argument : Swift::Hashable, Swift::Sendable { - public let label: Swift::String? - public let name: Swift::String - public let placeholderType: _XCStringResource::XCStringResource._XCStringResource::PlaceholderType - public init(label: Swift::String?, name: Swift::String, placeholderType: _XCStringResource::XCStringResource._XCStringResource::PlaceholderType) - @_implements(Swift::Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: _XCStringResource::XCStringResource._XCStringResource::Argument, _ b: _XCStringResource::XCStringResource._XCStringResource::Argument) -> Swift::Bool - public func hash(into hasher: inout Swift::Hasher) - public var hashValue: Swift::Int { +extension _XCStringResource.XCStringResource { + public struct Argument : Swift.Hashable, Swift.Sendable { + public let label: Swift.String? + public let name: Swift.String + public let placeholderType: _XCStringResource.XCStringResource.PlaceholderType + public init(label: Swift.String?, name: Swift.String, placeholderType: _XCStringResource.XCStringResource.PlaceholderType) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: _XCStringResource.XCStringResource.Argument, _ b: _XCStringResource.XCStringResource.Argument) -> Swift.Bool + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { get } } } -extension _XCStringResource::XCStringResource { - public enum PlaceholderType : Swift::String, Swift::CaseIterable, Swift::Sendable { +extension _XCStringResource.XCStringResource { + public enum PlaceholderType : Swift.String, Swift.CaseIterable, Swift.Sendable { case int case uint case float case double case object - @inlinable public init?(rawValue: Swift::String) - public typealias AllCases = [_XCStringResource::XCStringResource._XCStringResource::PlaceholderType] - public typealias RawValue = Swift::String - nonisolated public static var allCases: [_XCStringResource::XCStringResource._XCStringResource::PlaceholderType] { + @inlinable public init?(rawValue: Swift.String) + public typealias AllCases = [_XCStringResource.XCStringResource.PlaceholderType] + public typealias RawValue = Swift.String + nonisolated public static var allCases: [_XCStringResource.XCStringResource.PlaceholderType] { get } - public var rawValue: Swift::String { + public var rawValue: Swift.String { @inlinable get } } } -public struct XCStringResource : Swift::Hashable, Swift::Sendable, Swift::Comparable { - public static func < (lhs: _XCStringResource::XCStringResource, rhs: _XCStringResource::XCStringResource) -> Swift::Bool - public let key: Swift::String - public let comment: Swift::String? - public let arguments: [_XCStringResource::XCStringResource._XCStringResource::Argument] - public let sourceLocalization: Swift::String - public init(key: Swift::String, comment: Swift::String?, arguments: [_XCStringResource::XCStringResource._XCStringResource::Argument], sourceLocalization: Swift::String) - @_implements(Swift::Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: _XCStringResource::XCStringResource, _ b: _XCStringResource::XCStringResource) -> Swift::Bool - public func hash(into hasher: inout Swift::Hasher) - public var hashValue: Swift::Int { +public struct XCStringResource : Swift.Hashable, Swift.Sendable, Swift.Comparable { + public static func < (lhs: _XCStringResource.XCStringResource, rhs: _XCStringResource.XCStringResource) -> Swift.Bool + public let key: Swift.String + public let comment: Swift.String? + public let arguments: [_XCStringResource.XCStringResource.Argument] + public let sourceLocalization: Swift.String + public init(key: Swift.String, comment: Swift.String?, arguments: [_XCStringResource.XCStringResource.Argument], sourceLocalization: Swift.String) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: _XCStringResource.XCStringResource, _ b: _XCStringResource.XCStringResource) -> Swift.Bool + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { get } } -public enum XCStringSegment : Swift::Equatable { - case string(Swift::String) - case interpolation(Swift::String) - public var content: Swift::String { +public enum XCStringSegment : Swift.Equatable { + case string(Swift.String) + case interpolation(Swift.String) + public var content: Swift.String { get } - @_semantics("derived_enum_equals") @_implements(Swift::Equatable, ==(_:_:)) public static func __derived_enum_equals(_ a: _XCStringResource::XCStringSegment, _ b: _XCStringResource::XCStringSegment) -> Swift::Bool + @_semantics("derived_enum_equals") @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_enum_equals(_ a: _XCStringResource.XCStringSegment, _ b: _XCStringResource.XCStringSegment) -> Swift.Bool } -extension _XCStringResource::XCStringResource._XCStringResource::PlaceholderType : Swift::Equatable {} -extension _XCStringResource::XCStringResource._XCStringResource::PlaceholderType : Swift::Hashable {} -extension _XCStringResource::XCStringResource._XCStringResource::PlaceholderType : Swift::RawRepresentable {} +extension _XCStringResource.XCStringResource.PlaceholderType : Swift.Equatable {} +extension _XCStringResource.XCStringResource.PlaceholderType : Swift.Hashable {} +extension _XCStringResource.XCStringResource.PlaceholderType : Swift.RawRepresentable {} diff --git a/.agents/interfaces/macos/_XCStringsSource.swiftinterface b/.agents/interfaces/macos/_XCStringsSource.swiftinterface index 1a1bf9c..bea8550 100644 --- a/.agents/interfaces/macos/_XCStringsSource.swiftinterface +++ b/.agents/interfaces/macos/_XCStringsSource.swiftinterface @@ -1,7 +1,7 @@ // swift-interface-format-version: 1.0 -// swift-compiler-version: Apple Swift version 6.4 (swiftlang-6.4.0.25.4 clang-2100.3.25.1) -// swift-module-flags: -target arm64-apple-macos13.0 -enable-objc-interop -language-mode 6 -O -enable-experimental-feature DebugDescriptionMacro -module-name _XCStringsSource -package-name swift_xcstrings_catalog -// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.4 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-macosx13.0 -enable-objc-interop -swift-version 6 -O -module-name _XCStringsSource -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 import Foundation import Swift import XCStringsCatalogCore @@ -9,20 +9,20 @@ import _Concurrency import _StringProcessing import _SwiftConcurrencyShims public enum XCStringsSource { - case catalog(_XCStringsSource::XCStringsSource._XCStringsSource::Catalog) - case legacy(_XCStringsSource::XCStringsSource._XCStringsSource::LegacyFormat) + case catalog(_XCStringsSource.XCStringsSource.Catalog) + case legacy(_XCStringsSource.XCStringsSource.LegacyFormat) } -extension _XCStringsSource::XCStringsSource { - public typealias Catalog = XCStringsCatalogCore::XCStringsCatalog - public typealias LegacyFormat = [Swift::String : Any] +extension _XCStringsSource.XCStringsSource { + public typealias Catalog = XCStringsCatalogCore.XCStringsCatalog + public typealias LegacyFormat = [Swift.String : Any] } -extension _XCStringsSource::XCStringsSource { - public init(contentsOf fileURL: Foundation::URL) throws +extension _XCStringsSource.XCStringsSource { + public init(contentsOf fileURL: Foundation.URL) throws } -public enum XCStringsSourceError : Foundation::LocalizedError { - case invalidFileFormat(Swift::String) +public enum XCStringsSourceError : Foundation.LocalizedError { + case invalidFileFormat(Swift.String) case invalidPropertyListContents - public var errorDescription: Swift::String? { + public var errorDescription: Swift.String? { get } } diff --git a/.agents/interfaces/tvos/XCStringsCatalog.swiftinterface b/.agents/interfaces/tvos/XCStringsCatalog.swiftinterface new file mode 100644 index 0000000..9bc878e --- /dev/null +++ b/.agents/interfaces/tvos/XCStringsCatalog.swiftinterface @@ -0,0 +1,9 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-tvos16.0-simulator -enable-objc-interop -swift-version 6 -O -module-name XCStringsCatalog -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import Swift +@_exported import XCStringsCatalogCore +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims diff --git a/.agents/interfaces/tvos/XCStringsCatalogCore.swiftinterface b/.agents/interfaces/tvos/XCStringsCatalogCore.swiftinterface new file mode 100644 index 0000000..f3e6f24 --- /dev/null +++ b/.agents/interfaces/tvos/XCStringsCatalogCore.swiftinterface @@ -0,0 +1,173 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-tvos16.0-simulator -enable-objc-interop -swift-version 6 -O -module-name XCStringsCatalogCore -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import Foundation +import Swift +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims +public struct XCStringEntry : Swift.Codable, Swift.Hashable, Swift.Sendable { + public typealias Localizations = [XCStringsCatalogCore.XCStringLanguage : XCStringsCatalogCore.XCStringLocalization] + @_hasInitialValue public var comment: Swift.String? + @_hasInitialValue public var extractionState: XCStringsCatalogCore.XCStringExtractionState? + @_hasInitialValue public var localizations: XCStringsCatalogCore.XCStringEntry.Localizations? + public init(comment: Swift.String? = nil, extractionState: XCStringsCatalogCore.XCStringExtractionState? = nil, localizations: XCStringsCatalogCore.XCStringEntry.Localizations? = nil) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringEntry, _ b: XCStringsCatalogCore.XCStringEntry) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + public init(from decoder: any Swift.Decoder) throws +} +public struct XCStringExtractionState : Swift.RawRepresentable, Swift.CodingKeyRepresentable, Swift.Codable, Swift.Hashable, Swift.Sendable { + public let rawValue: Swift.String + public init(rawValue: Swift.String) + @_hasInitialValue public static let manual: XCStringsCatalogCore.XCStringExtractionState + @_hasInitialValue public static let automatic: XCStringsCatalogCore.XCStringExtractionState + @_hasInitialValue public static let migrated: XCStringsCatalogCore.XCStringExtractionState + public typealias RawValue = Swift.String +} +extension XCStringsCatalogCore.XCStringExtractionState : Swift.ExpressibleByStringLiteral { + public init(stringLiteral value: Swift.StringLiteralType) + public typealias ExtendedGraphemeClusterLiteralType = Swift.StringLiteralType + public typealias StringLiteralType = Swift.StringLiteralType + public typealias UnicodeScalarLiteralType = Swift.StringLiteralType +} +public struct XCStringLanguage : Swift.RawRepresentable, Swift.CodingKeyRepresentable, Swift.Codable, Swift.Hashable, Swift.Sendable { + public let rawValue: Swift.String + public init(rawValue: Swift.String) + @_hasInitialValue public static let english: XCStringsCatalogCore.XCStringLanguage + public typealias RawValue = Swift.String +} +extension XCStringsCatalogCore.XCStringLanguage : Swift.ExpressibleByStringLiteral { + public init(stringLiteral value: Swift.StringLiteralType) + public typealias ExtendedGraphemeClusterLiteralType = Swift.StringLiteralType + public typealias StringLiteralType = Swift.StringLiteralType + public typealias UnicodeScalarLiteralType = Swift.StringLiteralType +} +public struct XCStringLocalization : Swift.Codable, Swift.Hashable, Swift.Sendable { + @_hasInitialValue public var stringUnit: XCStringsCatalogCore.XCStringUnit? + @_hasInitialValue public var substitutions: [Swift.String : XCStringsCatalogCore.XCStringSubstitution]? + @_hasInitialValue public var variations: XCStringsCatalogCore.XCStringVariations? + public init(stringUnit: XCStringsCatalogCore.XCStringUnit? = nil, substitutions: [Swift.String : XCStringsCatalogCore.XCStringSubstitution]? = nil, variations: XCStringsCatalogCore.XCStringVariations? = nil) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringLocalization, _ b: XCStringsCatalogCore.XCStringLocalization) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + public init(from decoder: any Swift.Decoder) throws +} +public struct XCStringSubstitution : Swift.Codable, Swift.Hashable, Swift.Sendable { + public let argNum: Swift.Int + public let formatSpecifier: Swift.String + public let variations: XCStringsCatalogCore.XCStringVariations? + public init(argNum: Swift.Int, formatSpecifier: Swift.String, variations: XCStringsCatalogCore.XCStringVariations?) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringSubstitution, _ b: XCStringsCatalogCore.XCStringSubstitution) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + public init(from decoder: any Swift.Decoder) throws +} +public struct XCStringUnit : Swift.Codable, Swift.Hashable, Swift.Sendable { + public var state: XCStringsCatalogCore.XCStringUnitState + public var value: Swift.String + public init(state: XCStringsCatalogCore.XCStringUnitState, value: Swift.String) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringUnit, _ b: XCStringsCatalogCore.XCStringUnit) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + public init(from decoder: any Swift.Decoder) throws +} +public struct XCStringUnitState : Swift.RawRepresentable, Swift.Codable, Swift.Hashable, Swift.Sendable { + public let rawValue: Swift.String + public init(rawValue: Swift.String) + @_hasInitialValue public static let translated: XCStringsCatalogCore.XCStringUnitState + @_hasInitialValue public static let needsReview: XCStringsCatalogCore.XCStringUnitState + public typealias RawValue = Swift.String +} +extension XCStringsCatalogCore.XCStringUnitState : Swift.ExpressibleByStringLiteral { + public init(stringLiteral value: Swift.StringLiteralType) + public typealias ExtendedGraphemeClusterLiteralType = Swift.StringLiteralType + public typealias StringLiteralType = Swift.StringLiteralType + public typealias UnicodeScalarLiteralType = Swift.StringLiteralType +} +public struct XCStringVariation : Swift.Codable, Swift.Hashable, Swift.Sendable { + public var stringUnit: XCStringsCatalogCore.XCStringUnit + public init(stringUnit: XCStringsCatalogCore.XCStringUnit) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringVariation, _ b: XCStringsCatalogCore.XCStringVariation) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + public init(from decoder: any Swift.Decoder) throws +} +public struct XCStringVariations : Swift.Codable, Swift.Hashable, Swift.Sendable { + public let device: [XCStringsCatalogCore.XCStringVariations.DeviceKey : XCStringsCatalogCore.XCStringVariation]? + public let plural: [XCStringsCatalogCore.XCStringVariations.PluralKey : XCStringsCatalogCore.XCStringVariation]? + public init(device: [XCStringsCatalogCore.XCStringVariations.DeviceKey : XCStringsCatalogCore.XCStringVariation]?, plural: [XCStringsCatalogCore.XCStringVariations.PluralKey : XCStringsCatalogCore.XCStringVariation]?) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringVariations, _ b: XCStringsCatalogCore.XCStringVariations) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + public init(from decoder: any Swift.Decoder) throws +} +extension XCStringsCatalogCore.XCStringVariations { + public struct DeviceKey : Swift.RawRepresentable, Swift.CodingKeyRepresentable, Swift.Codable, Swift.Hashable, Swift.Sendable, Swift.ExpressibleByStringLiteral { + public let rawValue: Swift.String + public init(rawValue: Swift.String) + public init(stringLiteral value: Swift.StringLiteralType) + @_hasInitialValue public static let iPhone: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let iPod: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let iPad: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let appleWatch: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let appleTV: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let appleVision: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let mac: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let other: XCStringsCatalogCore.XCStringVariations.DeviceKey + public typealias ExtendedGraphemeClusterLiteralType = Swift.StringLiteralType + public typealias RawValue = Swift.String + public typealias StringLiteralType = Swift.StringLiteralType + public typealias UnicodeScalarLiteralType = Swift.StringLiteralType + } + public struct PluralKey : Swift.RawRepresentable, Swift.ExpressibleByStringLiteral, Swift.Codable, Swift.Hashable, Swift.Sendable, Swift.CodingKeyRepresentable { + public let rawValue: Swift.String + public init(rawValue: Swift.String) + public init(stringLiteral value: Swift.StringLiteralType) + @_hasInitialValue public static let zero: XCStringsCatalogCore.XCStringVariations.PluralKey + @_hasInitialValue public static let one: XCStringsCatalogCore.XCStringVariations.PluralKey + @_hasInitialValue public static let two: XCStringsCatalogCore.XCStringVariations.PluralKey + @_hasInitialValue public static let few: XCStringsCatalogCore.XCStringVariations.PluralKey + @_hasInitialValue public static let many: XCStringsCatalogCore.XCStringVariations.PluralKey + @_hasInitialValue public static let other: XCStringsCatalogCore.XCStringVariations.PluralKey + public typealias ExtendedGraphemeClusterLiteralType = Swift.StringLiteralType + public typealias RawValue = Swift.String + public typealias StringLiteralType = Swift.StringLiteralType + public typealias UnicodeScalarLiteralType = Swift.StringLiteralType + } +} +public struct XCStringsCatalog : Swift.Codable, Swift.Hashable, Swift.Sendable { + public var sourceLanguage: XCStringsCatalogCore.XCStringLanguage + public var strings: [Swift.String : XCStringsCatalogCore.XCStringEntry] + public var version: Swift.String + public init(sourceLanguage: XCStringsCatalogCore.XCStringLanguage, strings: [Swift.String : XCStringsCatalogCore.XCStringEntry], version: Swift.String) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringsCatalog, _ b: XCStringsCatalogCore.XCStringsCatalog) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + public init(from decoder: any Swift.Decoder) throws +} +extension XCStringsCatalogCore.XCStringsCatalog { + public init(contentsOf fileURL: Foundation.URL) throws +} diff --git a/.agents/interfaces/tvos/XCStringsCatalogParser.swiftinterface b/.agents/interfaces/tvos/XCStringsCatalogParser.swiftinterface new file mode 100644 index 0000000..2806b64 --- /dev/null +++ b/.agents/interfaces/tvos/XCStringsCatalogParser.swiftinterface @@ -0,0 +1,82 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-tvos16.0-simulator -enable-objc-interop -swift-version 6 -O -module-name XCStringsCatalogParser -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import Dependencies +import Foundation +import RegexBuilder +import Swift +import XCStringsCatalogCore +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims +@_exported import _XCStringResource +@_exported import _XCStringsSource +public enum ExtractionError : Swift.Sendable, Swift.Error { + public struct Context : Swift.Sendable { + public let key: Swift.String + public let debugDescription: Swift.String + } + case localizationCorrupt(XCStringsCatalogParser.ExtractionError.Context) + case unsupported(XCStringsCatalogParser.ExtractionError.Context) +} +extension XCStringsCatalogParser.ExtractionError : Foundation.LocalizedError { + public var errorDescription: Swift.String? { + get + } +} +public struct ExtractionIssue : Swift.Equatable, Swift.Sendable { + public enum Reason : Swift.Equatable, Swift.Sendable { + case wrongExtractionState(XCStringsCatalogCore.XCStringExtractionState?) + case missingSourceLocalization(XCStringsCatalogCore.XCStringLanguage) + @_semantics("derived_enum_equals") @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_enum_equals(_ a: XCStringsCatalogParser.ExtractionIssue.Reason, _ b: XCStringsCatalogParser.ExtractionIssue.Reason) -> Swift.Bool + } + public let key: Swift.String + public let reason: XCStringsCatalogParser.ExtractionIssue.Reason + public var description: Swift.String { + get + } + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogParser.ExtractionIssue, _ b: XCStringsCatalogParser.ExtractionIssue) -> Swift.Bool +} +extension XCStringsCatalogParser.DefaultXCStringsCatalogParser { + @usableFromInline + internal func extractResources(from legacyFormat: _XCStringsSource.XCStringsSource.LegacyFormat) throws -> XCStringsCatalogParser.DefaultXCStringsCatalogParser.Output +} +extension XCStringsCatalogParser.DefaultXCStringsCatalogParser { + @usableFromInline + internal func collect(collector: (inout [_XCStringResource.XCStringResource], inout [XCStringsCatalogParser.ExtractionIssue]) throws -> Swift.Void) rethrows -> XCStringsCatalogParser.DefaultXCStringsCatalogParser.Output +} +extension XCStringsCatalogParser.DefaultXCStringsCatalogParser { + @usableFromInline + internal func extractResources(from catalog: XCStringsCatalogCore.XCStringsCatalog) throws -> XCStringsCatalogParser.DefaultXCStringsCatalogParser.Output +} +public struct XCStringsCatalogParserOutput : Swift.Equatable, Swift.Sendable { + public let resources: [_XCStringResource.XCStringResource] + public let issues: [XCStringsCatalogParser.ExtractionIssue] + public init(resources: [_XCStringResource.XCStringResource], issues: [XCStringsCatalogParser.ExtractionIssue]) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogParser.XCStringsCatalogParserOutput, _ b: XCStringsCatalogParser.XCStringsCatalogParserOutput) -> Swift.Bool +} +public protocol XCStringsCatalogParser : Swift.Sendable { + func parse(from source: _XCStringsSource.XCStringsSource) throws -> XCStringsCatalogParser.XCStringsCatalogParserOutput +} +extension Dependencies.DependencyValues { + public var xcStringsCatalogParser: any XCStringsCatalogParser.XCStringsCatalogParser { + get + set + } +} +public struct DefaultXCStringsCatalogParser : XCStringsCatalogParser.XCStringsCatalogParser { + public typealias Output = XCStringsCatalogParser.XCStringsCatalogParserOutput + public init() + @inlinable public func parse(from source: _XCStringsSource.XCStringsSource) throws -> XCStringsCatalogParser.XCStringsCatalogParserOutput { + switch source { + case let .catalog(stringCatalog): + try extractResources(from: stringCatalog) + case let .legacy(legacyFormat): + try extractResources(from: legacyFormat) + } + } +} +extension XCStringsCatalogCore.XCStringsCatalog { + public func parse() throws -> XCStringsCatalogParser.XCStringsCatalogParserOutput +} diff --git a/.agents/interfaces/tvos/XCStringsCatalogValidator.swiftinterface b/.agents/interfaces/tvos/XCStringsCatalogValidator.swiftinterface new file mode 100644 index 0000000..7beaa6f --- /dev/null +++ b/.agents/interfaces/tvos/XCStringsCatalogValidator.swiftinterface @@ -0,0 +1,219 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-tvos16.0-simulator -enable-objc-interop -swift-version 6 -O -module-name XCStringsCatalogValidator -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import Dependencies +import Foundation +import Swift +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims +@_exported import _XCStringResource +extension Dependencies.DependencyValues { + public var defaultXCStringResourceValidator: any XCStringsCatalogValidator.XCStringResourceValidator { + get + set + } +} +extension Dependencies.DependencyValues { + public var defaultXCStringResourcesValidator: any XCStringsCatalogValidator.XCStringResourcesValidator { + get + set + } +} +public struct DefaultXCStringResourcesValidator : XCStringsCatalogValidator.XCStringResourcesValidator { + @_hasInitialValue private var _defaultXCStringResourceValidator: Dependencies.Dependency + public init() + public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] +} +public struct XCStringResourceIssue : Swift.Equatable, Swift.Sendable { + public let resources: [_XCStringResource.XCStringResource] + public let description: Swift.String + public init(resources: [_XCStringResource.XCStringResource], description: Swift.String) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogValidator.XCStringResourceIssue, _ b: XCStringsCatalogValidator.XCStringResourceIssue) -> Swift.Bool +} +public protocol XCStringResourceValidator : Swift.Sendable { + func validateResource(_ resource: _XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] +} +public enum XCStringResourceValidators { +} +extension XCStringsCatalogValidator.XCStringResourceValidators { + public struct AnyValidator : XCStringsCatalogValidator.XCStringResourceValidator { + @usableFromInline + internal let underlying: any XCStringsCatalogValidator.XCStringResourceValidator + public init(_ underlying: any XCStringsCatalogValidator.XCStringResourceValidator) + @inlinable public init(_ validate: @escaping @Sendable (_XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue]) { + self.init(.inline(validate)) + } + @inlinable public func validateResource(_ resource: _XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + underlying.validateResource(resource) + } + } +} +extension XCStringsCatalogValidator.XCStringResourceValidators { + public struct Empty : XCStringsCatalogValidator.XCStringResourceValidator { + public func validateResource(_ resource: _XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] + } +} +extension XCStringsCatalogValidator.XCStringResourceValidator where Self == XCStringsCatalogValidator.XCStringResourceValidators.Empty { + public static var empty: XCStringsCatalogValidator.XCStringResourceValidators.Empty { + get + } +} +extension XCStringsCatalogValidator.XCStringResourceValidators { + public struct Inline : XCStringsCatalogValidator.XCStringResourceValidator { + @usableFromInline + internal let validate: @Sendable (_XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] + public init(_ validate: @escaping @Sendable (_XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue]) + @inlinable public func validateResource(_ resource: _XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + validate(resource) + } + } +} +extension XCStringsCatalogValidator.XCStringResourceValidator where Self == XCStringsCatalogValidator.XCStringResourceValidators.Inline { + @inlinable public static func inline(_ validate: @escaping @Sendable (_XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue]) -> Self { + return .init(validate) + } +} +extension XCStringsCatalogValidator.XCStringResourceValidators { + public struct Concat : XCStringsCatalogValidator.XCStringResourceValidator { + @usableFromInline + internal let validators: [any XCStringsCatalogValidator.XCStringResourceValidator] + public init(_ validators: [any XCStringsCatalogValidator.XCStringResourceValidator]) + @inlinable public func validateResource(_ resource: _XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + validators.flatMap { $0.validateResource(resource) } + } + } +} +extension XCStringsCatalogValidator.XCStringResourceValidator where Self == XCStringsCatalogValidator.XCStringResourceValidators.Concat { + @inlinable public static func concatenate(_ validators: any XCStringsCatalogValidator.XCStringResourceValidator...) -> Self { + return .init(validators) + } + @inlinable public static func concatenate(_ validators: [any XCStringsCatalogValidator.XCStringResourceValidator]) -> Self { + return .init(validators) + } +} +extension XCStringsCatalogValidator.XCStringResourceValidator { + @inlinable public func appending(_ validators: any XCStringsCatalogValidator.XCStringResourceValidator...) -> some XCStringsCatalogValidator.XCStringResourceValidator { + return .concatenate([self] + validators) + } + +} +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct ConflictingIdentifiers : XCStringsCatalogValidator.XCStringResourcesValidator { + @usableFromInline + internal let identifier: @Sendable (_XCStringResource.XCStringResource) -> Swift.String + public init(_ identifier: @escaping @Sendable (_XCStringResource.XCStringResource) -> Swift.String) + @inlinable public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + Dictionary(grouping: resources, by: identifier) + .filter { $0.value.count > 1 } + .mapValues { resources in + ( + resources: resources, + keys: resources + .map { "‘\($0.key)‘" } + .formatted(.list(type: .and)) + ) + } + .map { id, collection in + XCStringResourceIssue( + resources: collection.resources, + description: "The keys \(collection.keys) produce the same identifier ‘\(id)‘." + ) + } + } + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.ConflictingIdentifiers { + public static func conflictingIdentifiers(by identifier: @escaping @Sendable (_XCStringResource.XCStringResource) -> Swift.String) -> Self +} +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct UnsupportedIdentifiers : XCStringsCatalogValidator.XCStringResourcesValidator { + @usableFromInline + internal let identifier: @Sendable (_XCStringResource.XCStringResource) -> Swift.String + public init(_ identifier: @escaping @Sendable (_XCStringResource.XCStringResource) -> Swift.String) + @inlinable public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + resources + .filter { identifier($0).trimmingCharacters(in: .whitespacesAndNewlines).isEmpty } + .map { resource in + XCStringResourceIssue( + resources: [resource], + description: "The key ‘\(resource.key)‘ is not convertible to Swift identifier." + ) + } + } + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.UnsupportedIdentifiers { + public static func unsupportedIdentifiers(by identifier: @escaping @Sendable (_XCStringResource.XCStringResource) -> Swift.String) -> Self +} +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.Concat { + public static func defaultIdentifiersValidator(for identifier: @escaping @Sendable (_XCStringResource.XCStringResource) -> Swift.String) -> Self +} +public protocol XCStringResourcesValidator : Swift.Sendable { + func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] +} +public enum XCStringResourcesValidators { +} +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct AnyValidator : XCStringsCatalogValidator.XCStringResourcesValidator { + @usableFromInline + internal let underlying: any XCStringsCatalogValidator.XCStringResourcesValidator + public init(_ underlying: any XCStringsCatalogValidator.XCStringResourcesValidator) + @inlinable public init(_ validate: @escaping @Sendable ([_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue]) { + self.init(.inline(validate)) + } + @inlinable public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + underlying.validateResources(resources) + } + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct Empty : XCStringsCatalogValidator.XCStringResourcesValidator { + public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.Empty { + public static var empty: XCStringsCatalogValidator.XCStringResourcesValidators.Empty { + get + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct Inline : XCStringsCatalogValidator.XCStringResourcesValidator { + @usableFromInline + internal let validate: @Sendable ([_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] + public init(_ validate: @escaping @Sendable ([_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue]) + @inlinable public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + validate(resources) + } + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.Inline { + @inlinable public static func inline(_ validate: @escaping @Sendable ([_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue]) -> Self { + return .init(validate) + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct Concat : XCStringsCatalogValidator.XCStringResourcesValidator { + @usableFromInline + internal let validators: [any XCStringsCatalogValidator.XCStringResourcesValidator] + public init(_ validators: [any XCStringsCatalogValidator.XCStringResourcesValidator]) + @inlinable public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + validators.flatMap { $0.validateResources(resources) } + } + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.Concat { + @inlinable public static func concatenate(_ validators: any XCStringsCatalogValidator.XCStringResourcesValidator...) -> Self { + return .init(validators) + } + @inlinable public static func concatenate(_ validators: [any XCStringsCatalogValidator.XCStringResourcesValidator]) -> Self { + return .init(validators) + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidator { + @inlinable public func appending(_ validators: any XCStringsCatalogValidator.XCStringResourcesValidator...) -> some XCStringsCatalogValidator.XCStringResourcesValidator { + return .concatenate([self] + validators) + } + +} diff --git a/.agents/interfaces/tvos/_XCStringResource.swiftinterface b/.agents/interfaces/tvos/_XCStringResource.swiftinterface new file mode 100644 index 0000000..5b45717 --- /dev/null +++ b/.agents/interfaces/tvos/_XCStringResource.swiftinterface @@ -0,0 +1,64 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-tvos16.0-simulator -enable-objc-interop -swift-version 6 -O -module-name _XCStringResource -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import Foundation +import Swift +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims +extension _XCStringResource.XCStringResource { + public struct Argument : Swift.Hashable, Swift.Sendable { + public let label: Swift.String? + public let name: Swift.String + public let placeholderType: _XCStringResource.XCStringResource.PlaceholderType + public init(label: Swift.String?, name: Swift.String, placeholderType: _XCStringResource.XCStringResource.PlaceholderType) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: _XCStringResource.XCStringResource.Argument, _ b: _XCStringResource.XCStringResource.Argument) -> Swift.Bool + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + } +} +extension _XCStringResource.XCStringResource { + public enum PlaceholderType : Swift.String, Swift.CaseIterable, Swift.Sendable { + case int + case uint + case float + case double + case object + @inlinable public init?(rawValue: Swift.String) + public typealias AllCases = [_XCStringResource.XCStringResource.PlaceholderType] + public typealias RawValue = Swift.String + nonisolated public static var allCases: [_XCStringResource.XCStringResource.PlaceholderType] { + get + } + public var rawValue: Swift.String { + @inlinable get + } + } +} +public struct XCStringResource : Swift.Hashable, Swift.Sendable, Swift.Comparable { + public static func < (lhs: _XCStringResource.XCStringResource, rhs: _XCStringResource.XCStringResource) -> Swift.Bool + public let key: Swift.String + public let comment: Swift.String? + public let arguments: [_XCStringResource.XCStringResource.Argument] + public let sourceLocalization: Swift.String + public init(key: Swift.String, comment: Swift.String?, arguments: [_XCStringResource.XCStringResource.Argument], sourceLocalization: Swift.String) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: _XCStringResource.XCStringResource, _ b: _XCStringResource.XCStringResource) -> Swift.Bool + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } +} +public enum XCStringSegment : Swift.Equatable { + case string(Swift.String) + case interpolation(Swift.String) + public var content: Swift.String { + get + } + @_semantics("derived_enum_equals") @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_enum_equals(_ a: _XCStringResource.XCStringSegment, _ b: _XCStringResource.XCStringSegment) -> Swift.Bool +} +extension _XCStringResource.XCStringResource.PlaceholderType : Swift.Equatable {} +extension _XCStringResource.XCStringResource.PlaceholderType : Swift.Hashable {} +extension _XCStringResource.XCStringResource.PlaceholderType : Swift.RawRepresentable {} diff --git a/.agents/interfaces/tvos/_XCStringsSource.swiftinterface b/.agents/interfaces/tvos/_XCStringsSource.swiftinterface new file mode 100644 index 0000000..f32bade --- /dev/null +++ b/.agents/interfaces/tvos/_XCStringsSource.swiftinterface @@ -0,0 +1,28 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-tvos16.0-simulator -enable-objc-interop -swift-version 6 -O -module-name _XCStringsSource -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import Foundation +import Swift +import XCStringsCatalogCore +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims +public enum XCStringsSource { + case catalog(_XCStringsSource.XCStringsSource.Catalog) + case legacy(_XCStringsSource.XCStringsSource.LegacyFormat) +} +extension _XCStringsSource.XCStringsSource { + public typealias Catalog = XCStringsCatalogCore.XCStringsCatalog + public typealias LegacyFormat = [Swift.String : Any] +} +extension _XCStringsSource.XCStringsSource { + public init(contentsOf fileURL: Foundation.URL) throws +} +public enum XCStringsSourceError : Foundation.LocalizedError { + case invalidFileFormat(Swift.String) + case invalidPropertyListContents + public var errorDescription: Swift.String? { + get + } +} diff --git a/.agents/interfaces/watchos/XCStringsCatalog.swiftinterface b/.agents/interfaces/watchos/XCStringsCatalog.swiftinterface new file mode 100644 index 0000000..3677707 --- /dev/null +++ b/.agents/interfaces/watchos/XCStringsCatalog.swiftinterface @@ -0,0 +1,9 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-watchos9.0-simulator -enable-objc-interop -swift-version 6 -O -module-name XCStringsCatalog -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import Swift +@_exported import XCStringsCatalogCore +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims diff --git a/.agents/interfaces/watchos/XCStringsCatalogCore.swiftinterface b/.agents/interfaces/watchos/XCStringsCatalogCore.swiftinterface new file mode 100644 index 0000000..c789d25 --- /dev/null +++ b/.agents/interfaces/watchos/XCStringsCatalogCore.swiftinterface @@ -0,0 +1,173 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-watchos9.0-simulator -enable-objc-interop -swift-version 6 -O -module-name XCStringsCatalogCore -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import Foundation +import Swift +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims +public struct XCStringEntry : Swift.Codable, Swift.Hashable, Swift.Sendable { + public typealias Localizations = [XCStringsCatalogCore.XCStringLanguage : XCStringsCatalogCore.XCStringLocalization] + @_hasInitialValue public var comment: Swift.String? + @_hasInitialValue public var extractionState: XCStringsCatalogCore.XCStringExtractionState? + @_hasInitialValue public var localizations: XCStringsCatalogCore.XCStringEntry.Localizations? + public init(comment: Swift.String? = nil, extractionState: XCStringsCatalogCore.XCStringExtractionState? = nil, localizations: XCStringsCatalogCore.XCStringEntry.Localizations? = nil) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringEntry, _ b: XCStringsCatalogCore.XCStringEntry) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + public init(from decoder: any Swift.Decoder) throws +} +public struct XCStringExtractionState : Swift.RawRepresentable, Swift.CodingKeyRepresentable, Swift.Codable, Swift.Hashable, Swift.Sendable { + public let rawValue: Swift.String + public init(rawValue: Swift.String) + @_hasInitialValue public static let manual: XCStringsCatalogCore.XCStringExtractionState + @_hasInitialValue public static let automatic: XCStringsCatalogCore.XCStringExtractionState + @_hasInitialValue public static let migrated: XCStringsCatalogCore.XCStringExtractionState + public typealias RawValue = Swift.String +} +extension XCStringsCatalogCore.XCStringExtractionState : Swift.ExpressibleByStringLiteral { + public init(stringLiteral value: Swift.StringLiteralType) + public typealias ExtendedGraphemeClusterLiteralType = Swift.StringLiteralType + public typealias StringLiteralType = Swift.StringLiteralType + public typealias UnicodeScalarLiteralType = Swift.StringLiteralType +} +public struct XCStringLanguage : Swift.RawRepresentable, Swift.CodingKeyRepresentable, Swift.Codable, Swift.Hashable, Swift.Sendable { + public let rawValue: Swift.String + public init(rawValue: Swift.String) + @_hasInitialValue public static let english: XCStringsCatalogCore.XCStringLanguage + public typealias RawValue = Swift.String +} +extension XCStringsCatalogCore.XCStringLanguage : Swift.ExpressibleByStringLiteral { + public init(stringLiteral value: Swift.StringLiteralType) + public typealias ExtendedGraphemeClusterLiteralType = Swift.StringLiteralType + public typealias StringLiteralType = Swift.StringLiteralType + public typealias UnicodeScalarLiteralType = Swift.StringLiteralType +} +public struct XCStringLocalization : Swift.Codable, Swift.Hashable, Swift.Sendable { + @_hasInitialValue public var stringUnit: XCStringsCatalogCore.XCStringUnit? + @_hasInitialValue public var substitutions: [Swift.String : XCStringsCatalogCore.XCStringSubstitution]? + @_hasInitialValue public var variations: XCStringsCatalogCore.XCStringVariations? + public init(stringUnit: XCStringsCatalogCore.XCStringUnit? = nil, substitutions: [Swift.String : XCStringsCatalogCore.XCStringSubstitution]? = nil, variations: XCStringsCatalogCore.XCStringVariations? = nil) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringLocalization, _ b: XCStringsCatalogCore.XCStringLocalization) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + public init(from decoder: any Swift.Decoder) throws +} +public struct XCStringSubstitution : Swift.Codable, Swift.Hashable, Swift.Sendable { + public let argNum: Swift.Int + public let formatSpecifier: Swift.String + public let variations: XCStringsCatalogCore.XCStringVariations? + public init(argNum: Swift.Int, formatSpecifier: Swift.String, variations: XCStringsCatalogCore.XCStringVariations?) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringSubstitution, _ b: XCStringsCatalogCore.XCStringSubstitution) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + public init(from decoder: any Swift.Decoder) throws +} +public struct XCStringUnit : Swift.Codable, Swift.Hashable, Swift.Sendable { + public var state: XCStringsCatalogCore.XCStringUnitState + public var value: Swift.String + public init(state: XCStringsCatalogCore.XCStringUnitState, value: Swift.String) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringUnit, _ b: XCStringsCatalogCore.XCStringUnit) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + public init(from decoder: any Swift.Decoder) throws +} +public struct XCStringUnitState : Swift.RawRepresentable, Swift.Codable, Swift.Hashable, Swift.Sendable { + public let rawValue: Swift.String + public init(rawValue: Swift.String) + @_hasInitialValue public static let translated: XCStringsCatalogCore.XCStringUnitState + @_hasInitialValue public static let needsReview: XCStringsCatalogCore.XCStringUnitState + public typealias RawValue = Swift.String +} +extension XCStringsCatalogCore.XCStringUnitState : Swift.ExpressibleByStringLiteral { + public init(stringLiteral value: Swift.StringLiteralType) + public typealias ExtendedGraphemeClusterLiteralType = Swift.StringLiteralType + public typealias StringLiteralType = Swift.StringLiteralType + public typealias UnicodeScalarLiteralType = Swift.StringLiteralType +} +public struct XCStringVariation : Swift.Codable, Swift.Hashable, Swift.Sendable { + public var stringUnit: XCStringsCatalogCore.XCStringUnit + public init(stringUnit: XCStringsCatalogCore.XCStringUnit) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringVariation, _ b: XCStringsCatalogCore.XCStringVariation) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + public init(from decoder: any Swift.Decoder) throws +} +public struct XCStringVariations : Swift.Codable, Swift.Hashable, Swift.Sendable { + public let device: [XCStringsCatalogCore.XCStringVariations.DeviceKey : XCStringsCatalogCore.XCStringVariation]? + public let plural: [XCStringsCatalogCore.XCStringVariations.PluralKey : XCStringsCatalogCore.XCStringVariation]? + public init(device: [XCStringsCatalogCore.XCStringVariations.DeviceKey : XCStringsCatalogCore.XCStringVariation]?, plural: [XCStringsCatalogCore.XCStringVariations.PluralKey : XCStringsCatalogCore.XCStringVariation]?) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringVariations, _ b: XCStringsCatalogCore.XCStringVariations) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + public init(from decoder: any Swift.Decoder) throws +} +extension XCStringsCatalogCore.XCStringVariations { + public struct DeviceKey : Swift.RawRepresentable, Swift.CodingKeyRepresentable, Swift.Codable, Swift.Hashable, Swift.Sendable, Swift.ExpressibleByStringLiteral { + public let rawValue: Swift.String + public init(rawValue: Swift.String) + public init(stringLiteral value: Swift.StringLiteralType) + @_hasInitialValue public static let iPhone: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let iPod: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let iPad: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let appleWatch: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let appleTV: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let appleVision: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let mac: XCStringsCatalogCore.XCStringVariations.DeviceKey + @_hasInitialValue public static let other: XCStringsCatalogCore.XCStringVariations.DeviceKey + public typealias ExtendedGraphemeClusterLiteralType = Swift.StringLiteralType + public typealias RawValue = Swift.String + public typealias StringLiteralType = Swift.StringLiteralType + public typealias UnicodeScalarLiteralType = Swift.StringLiteralType + } + public struct PluralKey : Swift.RawRepresentable, Swift.ExpressibleByStringLiteral, Swift.Codable, Swift.Hashable, Swift.Sendable, Swift.CodingKeyRepresentable { + public let rawValue: Swift.String + public init(rawValue: Swift.String) + public init(stringLiteral value: Swift.StringLiteralType) + @_hasInitialValue public static let zero: XCStringsCatalogCore.XCStringVariations.PluralKey + @_hasInitialValue public static let one: XCStringsCatalogCore.XCStringVariations.PluralKey + @_hasInitialValue public static let two: XCStringsCatalogCore.XCStringVariations.PluralKey + @_hasInitialValue public static let few: XCStringsCatalogCore.XCStringVariations.PluralKey + @_hasInitialValue public static let many: XCStringsCatalogCore.XCStringVariations.PluralKey + @_hasInitialValue public static let other: XCStringsCatalogCore.XCStringVariations.PluralKey + public typealias ExtendedGraphemeClusterLiteralType = Swift.StringLiteralType + public typealias RawValue = Swift.String + public typealias StringLiteralType = Swift.StringLiteralType + public typealias UnicodeScalarLiteralType = Swift.StringLiteralType + } +} +public struct XCStringsCatalog : Swift.Codable, Swift.Hashable, Swift.Sendable { + public var sourceLanguage: XCStringsCatalogCore.XCStringLanguage + public var strings: [Swift.String : XCStringsCatalogCore.XCStringEntry] + public var version: Swift.String + public init(sourceLanguage: XCStringsCatalogCore.XCStringLanguage, strings: [Swift.String : XCStringsCatalogCore.XCStringEntry], version: Swift.String) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogCore.XCStringsCatalog, _ b: XCStringsCatalogCore.XCStringsCatalog) -> Swift.Bool + public func encode(to encoder: any Swift.Encoder) throws + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + public init(from decoder: any Swift.Decoder) throws +} +extension XCStringsCatalogCore.XCStringsCatalog { + public init(contentsOf fileURL: Foundation.URL) throws +} diff --git a/.agents/interfaces/watchos/XCStringsCatalogParser.swiftinterface b/.agents/interfaces/watchos/XCStringsCatalogParser.swiftinterface new file mode 100644 index 0000000..d749221 --- /dev/null +++ b/.agents/interfaces/watchos/XCStringsCatalogParser.swiftinterface @@ -0,0 +1,82 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-watchos9.0-simulator -enable-objc-interop -swift-version 6 -O -module-name XCStringsCatalogParser -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import Dependencies +import Foundation +import RegexBuilder +import Swift +import XCStringsCatalogCore +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims +@_exported import _XCStringResource +@_exported import _XCStringsSource +public enum ExtractionError : Swift.Sendable, Swift.Error { + public struct Context : Swift.Sendable { + public let key: Swift.String + public let debugDescription: Swift.String + } + case localizationCorrupt(XCStringsCatalogParser.ExtractionError.Context) + case unsupported(XCStringsCatalogParser.ExtractionError.Context) +} +extension XCStringsCatalogParser.ExtractionError : Foundation.LocalizedError { + public var errorDescription: Swift.String? { + get + } +} +public struct ExtractionIssue : Swift.Equatable, Swift.Sendable { + public enum Reason : Swift.Equatable, Swift.Sendable { + case wrongExtractionState(XCStringsCatalogCore.XCStringExtractionState?) + case missingSourceLocalization(XCStringsCatalogCore.XCStringLanguage) + @_semantics("derived_enum_equals") @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_enum_equals(_ a: XCStringsCatalogParser.ExtractionIssue.Reason, _ b: XCStringsCatalogParser.ExtractionIssue.Reason) -> Swift.Bool + } + public let key: Swift.String + public let reason: XCStringsCatalogParser.ExtractionIssue.Reason + public var description: Swift.String { + get + } + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogParser.ExtractionIssue, _ b: XCStringsCatalogParser.ExtractionIssue) -> Swift.Bool +} +extension XCStringsCatalogParser.DefaultXCStringsCatalogParser { + @usableFromInline + internal func extractResources(from legacyFormat: _XCStringsSource.XCStringsSource.LegacyFormat) throws -> XCStringsCatalogParser.DefaultXCStringsCatalogParser.Output +} +extension XCStringsCatalogParser.DefaultXCStringsCatalogParser { + @usableFromInline + internal func collect(collector: (inout [_XCStringResource.XCStringResource], inout [XCStringsCatalogParser.ExtractionIssue]) throws -> Swift.Void) rethrows -> XCStringsCatalogParser.DefaultXCStringsCatalogParser.Output +} +extension XCStringsCatalogParser.DefaultXCStringsCatalogParser { + @usableFromInline + internal func extractResources(from catalog: XCStringsCatalogCore.XCStringsCatalog) throws -> XCStringsCatalogParser.DefaultXCStringsCatalogParser.Output +} +public struct XCStringsCatalogParserOutput : Swift.Equatable, Swift.Sendable { + public let resources: [_XCStringResource.XCStringResource] + public let issues: [XCStringsCatalogParser.ExtractionIssue] + public init(resources: [_XCStringResource.XCStringResource], issues: [XCStringsCatalogParser.ExtractionIssue]) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogParser.XCStringsCatalogParserOutput, _ b: XCStringsCatalogParser.XCStringsCatalogParserOutput) -> Swift.Bool +} +public protocol XCStringsCatalogParser : Swift.Sendable { + func parse(from source: _XCStringsSource.XCStringsSource) throws -> XCStringsCatalogParser.XCStringsCatalogParserOutput +} +extension Dependencies.DependencyValues { + public var xcStringsCatalogParser: any XCStringsCatalogParser.XCStringsCatalogParser { + get + set + } +} +public struct DefaultXCStringsCatalogParser : XCStringsCatalogParser.XCStringsCatalogParser { + public typealias Output = XCStringsCatalogParser.XCStringsCatalogParserOutput + public init() + @inlinable public func parse(from source: _XCStringsSource.XCStringsSource) throws -> XCStringsCatalogParser.XCStringsCatalogParserOutput { + switch source { + case let .catalog(stringCatalog): + try extractResources(from: stringCatalog) + case let .legacy(legacyFormat): + try extractResources(from: legacyFormat) + } + } +} +extension XCStringsCatalogCore.XCStringsCatalog { + public func parse() throws -> XCStringsCatalogParser.XCStringsCatalogParserOutput +} diff --git a/.agents/interfaces/watchos/XCStringsCatalogValidator.swiftinterface b/.agents/interfaces/watchos/XCStringsCatalogValidator.swiftinterface new file mode 100644 index 0000000..362cb8e --- /dev/null +++ b/.agents/interfaces/watchos/XCStringsCatalogValidator.swiftinterface @@ -0,0 +1,219 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-watchos9.0-simulator -enable-objc-interop -swift-version 6 -O -module-name XCStringsCatalogValidator -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import Dependencies +import Foundation +import Swift +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims +@_exported import _XCStringResource +extension Dependencies.DependencyValues { + public var defaultXCStringResourceValidator: any XCStringsCatalogValidator.XCStringResourceValidator { + get + set + } +} +extension Dependencies.DependencyValues { + public var defaultXCStringResourcesValidator: any XCStringsCatalogValidator.XCStringResourcesValidator { + get + set + } +} +public struct DefaultXCStringResourcesValidator : XCStringsCatalogValidator.XCStringResourcesValidator { + @_hasInitialValue private var _defaultXCStringResourceValidator: Dependencies.Dependency + public init() + public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] +} +public struct XCStringResourceIssue : Swift.Equatable, Swift.Sendable { + public let resources: [_XCStringResource.XCStringResource] + public let description: Swift.String + public init(resources: [_XCStringResource.XCStringResource], description: Swift.String) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: XCStringsCatalogValidator.XCStringResourceIssue, _ b: XCStringsCatalogValidator.XCStringResourceIssue) -> Swift.Bool +} +public protocol XCStringResourceValidator : Swift.Sendable { + func validateResource(_ resource: _XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] +} +public enum XCStringResourceValidators { +} +extension XCStringsCatalogValidator.XCStringResourceValidators { + public struct AnyValidator : XCStringsCatalogValidator.XCStringResourceValidator { + @usableFromInline + internal let underlying: any XCStringsCatalogValidator.XCStringResourceValidator + public init(_ underlying: any XCStringsCatalogValidator.XCStringResourceValidator) + @inlinable public init(_ validate: @escaping @Sendable (_XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue]) { + self.init(.inline(validate)) + } + @inlinable public func validateResource(_ resource: _XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + underlying.validateResource(resource) + } + } +} +extension XCStringsCatalogValidator.XCStringResourceValidators { + public struct Empty : XCStringsCatalogValidator.XCStringResourceValidator { + public func validateResource(_ resource: _XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] + } +} +extension XCStringsCatalogValidator.XCStringResourceValidator where Self == XCStringsCatalogValidator.XCStringResourceValidators.Empty { + public static var empty: XCStringsCatalogValidator.XCStringResourceValidators.Empty { + get + } +} +extension XCStringsCatalogValidator.XCStringResourceValidators { + public struct Inline : XCStringsCatalogValidator.XCStringResourceValidator { + @usableFromInline + internal let validate: @Sendable (_XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] + public init(_ validate: @escaping @Sendable (_XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue]) + @inlinable public func validateResource(_ resource: _XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + validate(resource) + } + } +} +extension XCStringsCatalogValidator.XCStringResourceValidator where Self == XCStringsCatalogValidator.XCStringResourceValidators.Inline { + @inlinable public static func inline(_ validate: @escaping @Sendable (_XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue]) -> Self { + return .init(validate) + } +} +extension XCStringsCatalogValidator.XCStringResourceValidators { + public struct Concat : XCStringsCatalogValidator.XCStringResourceValidator { + @usableFromInline + internal let validators: [any XCStringsCatalogValidator.XCStringResourceValidator] + public init(_ validators: [any XCStringsCatalogValidator.XCStringResourceValidator]) + @inlinable public func validateResource(_ resource: _XCStringResource.XCStringResource) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + validators.flatMap { $0.validateResource(resource) } + } + } +} +extension XCStringsCatalogValidator.XCStringResourceValidator where Self == XCStringsCatalogValidator.XCStringResourceValidators.Concat { + @inlinable public static func concatenate(_ validators: any XCStringsCatalogValidator.XCStringResourceValidator...) -> Self { + return .init(validators) + } + @inlinable public static func concatenate(_ validators: [any XCStringsCatalogValidator.XCStringResourceValidator]) -> Self { + return .init(validators) + } +} +extension XCStringsCatalogValidator.XCStringResourceValidator { + @inlinable public func appending(_ validators: any XCStringsCatalogValidator.XCStringResourceValidator...) -> some XCStringsCatalogValidator.XCStringResourceValidator { + return .concatenate([self] + validators) + } + +} +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct ConflictingIdentifiers : XCStringsCatalogValidator.XCStringResourcesValidator { + @usableFromInline + internal let identifier: @Sendable (_XCStringResource.XCStringResource) -> Swift.String + public init(_ identifier: @escaping @Sendable (_XCStringResource.XCStringResource) -> Swift.String) + @inlinable public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + Dictionary(grouping: resources, by: identifier) + .filter { $0.value.count > 1 } + .mapValues { resources in + ( + resources: resources, + keys: resources + .map { "‘\($0.key)‘" } + .formatted(.list(type: .and)) + ) + } + .map { id, collection in + XCStringResourceIssue( + resources: collection.resources, + description: "The keys \(collection.keys) produce the same identifier ‘\(id)‘." + ) + } + } + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.ConflictingIdentifiers { + public static func conflictingIdentifiers(by identifier: @escaping @Sendable (_XCStringResource.XCStringResource) -> Swift.String) -> Self +} +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct UnsupportedIdentifiers : XCStringsCatalogValidator.XCStringResourcesValidator { + @usableFromInline + internal let identifier: @Sendable (_XCStringResource.XCStringResource) -> Swift.String + public init(_ identifier: @escaping @Sendable (_XCStringResource.XCStringResource) -> Swift.String) + @inlinable public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + resources + .filter { identifier($0).trimmingCharacters(in: .whitespacesAndNewlines).isEmpty } + .map { resource in + XCStringResourceIssue( + resources: [resource], + description: "The key ‘\(resource.key)‘ is not convertible to Swift identifier." + ) + } + } + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.UnsupportedIdentifiers { + public static func unsupportedIdentifiers(by identifier: @escaping @Sendable (_XCStringResource.XCStringResource) -> Swift.String) -> Self +} +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.Concat { + public static func defaultIdentifiersValidator(for identifier: @escaping @Sendable (_XCStringResource.XCStringResource) -> Swift.String) -> Self +} +public protocol XCStringResourcesValidator : Swift.Sendable { + func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] +} +public enum XCStringResourcesValidators { +} +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct AnyValidator : XCStringsCatalogValidator.XCStringResourcesValidator { + @usableFromInline + internal let underlying: any XCStringsCatalogValidator.XCStringResourcesValidator + public init(_ underlying: any XCStringsCatalogValidator.XCStringResourcesValidator) + @inlinable public init(_ validate: @escaping @Sendable ([_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue]) { + self.init(.inline(validate)) + } + @inlinable public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + underlying.validateResources(resources) + } + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct Empty : XCStringsCatalogValidator.XCStringResourcesValidator { + public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.Empty { + public static var empty: XCStringsCatalogValidator.XCStringResourcesValidators.Empty { + get + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct Inline : XCStringsCatalogValidator.XCStringResourcesValidator { + @usableFromInline + internal let validate: @Sendable ([_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] + public init(_ validate: @escaping @Sendable ([_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue]) + @inlinable public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + validate(resources) + } + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.Inline { + @inlinable public static func inline(_ validate: @escaping @Sendable ([_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue]) -> Self { + return .init(validate) + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidators { + public struct Concat : XCStringsCatalogValidator.XCStringResourcesValidator { + @usableFromInline + internal let validators: [any XCStringsCatalogValidator.XCStringResourcesValidator] + public init(_ validators: [any XCStringsCatalogValidator.XCStringResourcesValidator]) + @inlinable public func validateResources(_ resources: [_XCStringResource.XCStringResource]) -> [XCStringsCatalogValidator.XCStringResourceIssue] { + validators.flatMap { $0.validateResources(resources) } + } + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidator where Self == XCStringsCatalogValidator.XCStringResourcesValidators.Concat { + @inlinable public static func concatenate(_ validators: any XCStringsCatalogValidator.XCStringResourcesValidator...) -> Self { + return .init(validators) + } + @inlinable public static func concatenate(_ validators: [any XCStringsCatalogValidator.XCStringResourcesValidator]) -> Self { + return .init(validators) + } +} +extension XCStringsCatalogValidator.XCStringResourcesValidator { + @inlinable public func appending(_ validators: any XCStringsCatalogValidator.XCStringResourcesValidator...) -> some XCStringsCatalogValidator.XCStringResourcesValidator { + return .concatenate([self] + validators) + } + +} diff --git a/.agents/interfaces/watchos/_XCStringResource.swiftinterface b/.agents/interfaces/watchos/_XCStringResource.swiftinterface new file mode 100644 index 0000000..8fde3c0 --- /dev/null +++ b/.agents/interfaces/watchos/_XCStringResource.swiftinterface @@ -0,0 +1,64 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-watchos9.0-simulator -enable-objc-interop -swift-version 6 -O -module-name _XCStringResource -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import Foundation +import Swift +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims +extension _XCStringResource.XCStringResource { + public struct Argument : Swift.Hashable, Swift.Sendable { + public let label: Swift.String? + public let name: Swift.String + public let placeholderType: _XCStringResource.XCStringResource.PlaceholderType + public init(label: Swift.String?, name: Swift.String, placeholderType: _XCStringResource.XCStringResource.PlaceholderType) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: _XCStringResource.XCStringResource.Argument, _ b: _XCStringResource.XCStringResource.Argument) -> Swift.Bool + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } + } +} +extension _XCStringResource.XCStringResource { + public enum PlaceholderType : Swift.String, Swift.CaseIterable, Swift.Sendable { + case int + case uint + case float + case double + case object + @inlinable public init?(rawValue: Swift.String) + public typealias AllCases = [_XCStringResource.XCStringResource.PlaceholderType] + public typealias RawValue = Swift.String + nonisolated public static var allCases: [_XCStringResource.XCStringResource.PlaceholderType] { + get + } + public var rawValue: Swift.String { + @inlinable get + } + } +} +public struct XCStringResource : Swift.Hashable, Swift.Sendable, Swift.Comparable { + public static func < (lhs: _XCStringResource.XCStringResource, rhs: _XCStringResource.XCStringResource) -> Swift.Bool + public let key: Swift.String + public let comment: Swift.String? + public let arguments: [_XCStringResource.XCStringResource.Argument] + public let sourceLocalization: Swift.String + public init(key: Swift.String, comment: Swift.String?, arguments: [_XCStringResource.XCStringResource.Argument], sourceLocalization: Swift.String) + @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_struct_equals(_ a: _XCStringResource.XCStringResource, _ b: _XCStringResource.XCStringResource) -> Swift.Bool + public func hash(into hasher: inout Swift.Hasher) + public var hashValue: Swift.Int { + get + } +} +public enum XCStringSegment : Swift.Equatable { + case string(Swift.String) + case interpolation(Swift.String) + public var content: Swift.String { + get + } + @_semantics("derived_enum_equals") @_implements(Swift.Equatable, ==(_:_:)) public static func __derived_enum_equals(_ a: _XCStringResource.XCStringSegment, _ b: _XCStringResource.XCStringSegment) -> Swift.Bool +} +extension _XCStringResource.XCStringResource.PlaceholderType : Swift.Equatable {} +extension _XCStringResource.XCStringResource.PlaceholderType : Swift.Hashable {} +extension _XCStringResource.XCStringResource.PlaceholderType : Swift.RawRepresentable {} diff --git a/.agents/interfaces/watchos/_XCStringsSource.swiftinterface b/.agents/interfaces/watchos/_XCStringsSource.swiftinterface new file mode 100644 index 0000000..1d71c49 --- /dev/null +++ b/.agents/interfaces/watchos/_XCStringsSource.swiftinterface @@ -0,0 +1,28 @@ +// swift-interface-format-version: 1.0 +// swift-compiler-version: Apple Swift version 6.3.3 (swiftlang-6.3.3.1.3 clang-2100.1.1.101) +// swift-module-flags: -target arm64-apple-watchos9.0-simulator -enable-objc-interop -swift-version 6 -O -module-name _XCStringsSource -package-name swift_xcstrings_catalog +// swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.3.3 +import Foundation +import Swift +import XCStringsCatalogCore +import _Concurrency +import _StringProcessing +import _SwiftConcurrencyShims +public enum XCStringsSource { + case catalog(_XCStringsSource.XCStringsSource.Catalog) + case legacy(_XCStringsSource.XCStringsSource.LegacyFormat) +} +extension _XCStringsSource.XCStringsSource { + public typealias Catalog = XCStringsCatalogCore.XCStringsCatalog + public typealias LegacyFormat = [Swift.String : Any] +} +extension _XCStringsSource.XCStringsSource { + public init(contentsOf fileURL: Foundation.URL) throws +} +public enum XCStringsSourceError : Foundation.LocalizedError { + case invalidFileFormat(Swift.String) + case invalidPropertyListContents + public var errorDescription: Swift.String? { + get + } +}