Skip to content

Commit 8c5258b

Browse files
authored
Full compatibility with the "ExistentialAny" upcoming feature (#99)
1 parent f048771 commit 8c5258b

File tree

22 files changed

+79
-61
lines changed

22 files changed

+79
-61
lines changed

Package.swift

+18-5
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@
1414
//===----------------------------------------------------------------------===//
1515
import PackageDescription
1616

17+
// General Swift-settings for all targets.
18+
let swiftSettings: [SwiftSetting] = [
19+
// https://github.com/apple/swift-evolution/blob/main/proposals/0335-existential-any.md
20+
// Require `any` for existential types.
21+
.enableUpcomingFeature("ExistentialAny")
22+
]
23+
1724
let package = Package(
1825
name: "swift-openapi-generator",
1926
platforms: [
@@ -72,6 +79,7 @@ let package = Package(
7279
.package(url: "https://github.com/apple/swift-docc-plugin", from: "1.0.0"),
7380
],
7481
targets: [
82+
7583
// Generator Core
7684
.target(
7785
name: "_OpenAPIGeneratorCore",
@@ -83,15 +91,17 @@ let package = Package(
8391
.product(name: "SwiftSyntaxBuilder", package: "swift-syntax"),
8492
.product(name: "SwiftFormat", package: "swift-format"),
8593
.product(name: "SwiftFormatConfiguration", package: "swift-format"),
86-
]
94+
],
95+
swiftSettings: swiftSettings
8796
),
8897

8998
// Generator Core Tests
9099
.testTarget(
91100
name: "OpenAPIGeneratorCoreTests",
92101
dependencies: [
93102
"_OpenAPIGeneratorCore"
94-
]
103+
],
104+
swiftSettings: swiftSettings
95105
),
96106

97107
// GeneratorReferenceTests
@@ -104,7 +114,8 @@ let package = Package(
104114
],
105115
resources: [
106116
.copy("Resources")
107-
]
117+
],
118+
swiftSettings: swiftSettings
108119
),
109120

110121
// PetstoreConsumerTests
@@ -114,7 +125,8 @@ let package = Package(
114125
name: "PetstoreConsumerTests",
115126
dependencies: [
116127
.product(name: "OpenAPIRuntime", package: "swift-openapi-runtime")
117-
]
128+
],
129+
swiftSettings: swiftSettings
118130
),
119131

120132
// Generator CLI
@@ -123,7 +135,8 @@ let package = Package(
123135
dependencies: [
124136
"_OpenAPIGeneratorCore",
125137
.product(name: "ArgumentParser", package: "swift-argument-parser"),
126-
]
138+
],
139+
swiftSettings: swiftSettings
127140
),
128141

129142
// Build Plugin

Sources/_OpenAPIGeneratorCore/GeneratorPipeline.swift

+5-5
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ struct GeneratorPipeline {
8989
public func runGenerator(
9090
input: InMemoryInputFile,
9191
config: Config,
92-
diagnostics: DiagnosticCollector
92+
diagnostics: any DiagnosticCollector
9393
) throws -> InMemoryOutputFile {
9494
try makeGeneratorPipeline(config: config, diagnostics: diagnostics).run(input)
9595
}
@@ -105,12 +105,12 @@ public func runGenerator(
105105
/// - Returns: A configured generator pipeline that can be executed with
106106
/// ``GeneratorPipeline/run(_:)``.
107107
func makeGeneratorPipeline(
108-
parser: ParserProtocol = YamsParser(),
109-
translator: TranslatorProtocol = MultiplexTranslator(),
110-
renderer: RendererProtocol = TextBasedRenderer(),
108+
parser: any ParserProtocol = YamsParser(),
109+
translator: any TranslatorProtocol = MultiplexTranslator(),
110+
renderer: any RendererProtocol = TextBasedRenderer(),
111111
formatter: @escaping (InMemoryOutputFile) throws -> InMemoryOutputFile = { try $0.swiftFormatted },
112112
config: Config,
113-
diagnostics: DiagnosticCollector
113+
diagnostics: any DiagnosticCollector
114114
) -> GeneratorPipeline {
115115
return .init(
116116
parseOpenAPIFileStage: .init(

Sources/_OpenAPIGeneratorCore/Parser/ParserProtocol.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,6 @@ protocol ParserProtocol {
2727
func parseOpenAPI(
2828
_ input: InMemoryInputFile,
2929
config: Config,
30-
diagnostics: DiagnosticCollector
30+
diagnostics: any DiagnosticCollector
3131
) throws -> ParsedOpenAPIRepresentation
3232
}

Sources/_OpenAPIGeneratorCore/Parser/YamsParser.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ struct YamsParser: ParserProtocol {
2121
func parseOpenAPI(
2222
_ input: InMemoryInputFile,
2323
config: Config,
24-
diagnostics: DiagnosticCollector
24+
diagnostics: any DiagnosticCollector
2525
) throws -> ParsedOpenAPIRepresentation {
2626
let decoder = YAMLDecoder()
2727
let openapiData = input.contents
@@ -86,7 +86,7 @@ struct YamsParser: ParserProtocol {
8686
location: .init(filePath: input.absolutePath.path, lineNumber: yamlMark.line - 1)
8787
)
8888
}
89-
} else if let openAPIError = context.underlyingError as? OpenAPIError {
89+
} else if let openAPIError = context.underlyingError as? (any OpenAPIError) {
9090
throw Diagnostic.error(
9191
message: openAPIError.localizedDescription,
9292
location: .init(filePath: input.absolutePath.path)

Sources/_OpenAPIGeneratorCore/Renderer/RendererProtocol.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,6 @@ protocol RendererProtocol {
2727
func render(
2828
structured code: StructuredSwiftRepresentation,
2929
config: Config,
30-
diagnostics: DiagnosticCollector
30+
diagnostics: any DiagnosticCollector
3131
) throws -> InMemoryOutputFile
3232
}

Sources/_OpenAPIGeneratorCore/Renderer/TextBasedRenderer.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ struct TextBasedRenderer: RendererProtocol {
2020
func render(
2121
structured: StructuredSwiftRepresentation,
2222
config: Config,
23-
diagnostics: DiagnosticCollector
23+
diagnostics: any DiagnosticCollector
2424
) throws -> InMemoryOutputFile {
2525
let namedFile = structured.file
2626
return InMemoryOutputFile(

Sources/_OpenAPIGeneratorCore/Translator/ClientTranslator/ClientTranslator.swift

+5-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import OpenAPIKit30
2525
struct ClientFileTranslator: FileTranslator {
2626

2727
var config: Config
28-
var diagnostics: DiagnosticCollector
28+
var diagnostics: any DiagnosticCollector
2929
var components: OpenAPI.Components
3030

3131
func translateFile(
@@ -79,7 +79,10 @@ struct ClientFileTranslator: FileTranslator {
7979
type: Constants.Configuration.typeName,
8080
defaultValue: .dot("init").call([])
8181
),
82-
.init(label: "transport", type: Constants.Client.Transport.typeName),
82+
.init(
83+
label: "transport",
84+
type: Constants.Client.Transport.typeName
85+
),
8386
.init(
8487
label: "middlewares",
8588
type: "[\(Constants.Client.Middleware.typeName)]",

Sources/_OpenAPIGeneratorCore/Translator/CommonTranslations/translateCodable.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -593,7 +593,7 @@ fileprivate extension FileTranslator {
593593
accessModifier: config.access,
594594
kind: .function(name: "encode"),
595595
parameters: [
596-
.init(label: "to", name: "encoder", type: "Encoder")
596+
.init(label: "to", name: "encoder", type: "any Encoder")
597597
],
598598
keywords: [
599599
.throws
@@ -610,7 +610,7 @@ fileprivate extension FileTranslator {
610610
accessModifier: config.access,
611611
kind: .initializer,
612612
parameters: [
613-
.init(label: "from", name: "decoder", type: "Decoder")
613+
.init(label: "from", name: "decoder", type: "any Decoder")
614614
],
615615
keywords: [
616616
.throws

Sources/_OpenAPIGeneratorCore/Translator/CommonTypes/Constants.swift

+4-4
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,14 @@ enum Constants {
8080
enum Transport {
8181

8282
/// The name of the client transport type.
83-
static let typeName: String = "ClientTransport"
83+
static let typeName: String = "any ClientTransport"
8484
}
8585

8686
/// Constants related to the client middleware type.
8787
enum Middleware {
8888

8989
/// The name of the client middleware type.
90-
static let typeName: String = "ClientMiddleware"
90+
static let typeName: String = "any ClientMiddleware"
9191
}
9292
}
9393

@@ -110,14 +110,14 @@ enum Constants {
110110
enum Transport {
111111

112112
/// The name of the server transport type.
113-
static let typeName: String = "ServerTransport"
113+
static let typeName: String = "any ServerTransport"
114114
}
115115

116116
/// Constants related to the server middleware type.
117117
enum Middleware {
118118

119119
/// The name of the server middleware type.
120-
static let typeName: String = "ServerMiddleware"
120+
static let typeName: String = "any ServerMiddleware"
121121
}
122122
}
123123

Sources/_OpenAPIGeneratorCore/Translator/FileTranslator.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ protocol FileTranslator {
2929

3030
/// The collector receives diagnostics from the translator, which should
3131
/// be surfaced to the user in some way.
32-
var diagnostics: DiagnosticCollector { get }
32+
var diagnostics: any DiagnosticCollector { get }
3333

3434
/// The components section of the OpenAPI document is required by the
3535
/// translator logic to follow JSON references to schemas, parameters,

Sources/_OpenAPIGeneratorCore/Translator/MultiplexTranslator.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ struct MultiplexTranslator: TranslatorProtocol {
1919
func translate(
2020
parsedOpenAPI: ParsedOpenAPIRepresentation,
2121
config: Config,
22-
diagnostics: DiagnosticCollector
22+
diagnostics: any DiagnosticCollector
2323
) throws -> StructuredSwiftRepresentation {
24-
let translator: FileTranslator
24+
let translator: any FileTranslator
2525
switch config.mode {
2626
case .types:
2727
translator = TypesFileTranslator(

Sources/_OpenAPIGeneratorCore/Translator/ServerTranslator/ServerTranslator.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import OpenAPIKit30
2323
struct ServerFileTranslator: FileTranslator {
2424

2525
var config: Config
26-
var diagnostics: DiagnosticCollector
26+
var diagnostics: any DiagnosticCollector
2727
var components: OpenAPI.Components
2828

2929
func translateFile(

Sources/_OpenAPIGeneratorCore/Translator/TranslatorProtocol.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,6 @@ protocol TranslatorProtocol {
2828
func translate(
2929
parsedOpenAPI: ParsedOpenAPIRepresentation,
3030
config: Config,
31-
diagnostics: DiagnosticCollector
31+
diagnostics: any DiagnosticCollector
3232
) throws -> StructuredSwiftRepresentation
3333
}

Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/TypesFileTranslator.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import OpenAPIKit30
2525
struct TypesFileTranslator: FileTranslator {
2626

2727
var config: Config
28-
var diagnostics: DiagnosticCollector
28+
var diagnostics: any DiagnosticCollector
2929
var components: OpenAPI.Components
3030

3131
func translateFile(

Sources/swift-openapi-generator/GenerateOptions+runGenerator.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ extension _GenerateOptions {
4040
additionalImports: resolvedAdditionalImports
4141
)
4242
}
43-
let diagnostics: DiagnosticCollector
43+
let diagnostics: any DiagnosticCollector
4444
let finalizeDiagnostics: () throws -> Void
4545
if let diagnosticsOutputPath {
4646
let _diagnostics = _YamlFileDiagnosticsCollector(url: diagnosticsOutputPath)

Sources/swift-openapi-generator/runGenerator.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ extension _Tool {
3131
configs: [Config],
3232
isPluginInvocation: Bool,
3333
outputDirectory: URL,
34-
diagnostics: DiagnosticCollector
34+
diagnostics: any DiagnosticCollector
3535
) throws {
3636
let docData: Data
3737
do {
@@ -73,7 +73,7 @@ extension _Tool {
7373
docData: Data,
7474
config: Config,
7575
outputFilePath: URL,
76-
diagnostics: DiagnosticCollector
76+
diagnostics: any DiagnosticCollector
7777
) throws {
7878
let didChange = try replaceFileContents(at: outputFilePath) {
7979
let output = try _OpenAPIGeneratorCore.runGenerator(

Tests/OpenAPIGeneratorCoreTests/TestUtilities.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ class Test_Core: XCTestCase {
2525

2626
func makeTranslator(
2727
components: OpenAPI.Components = .noComponents,
28-
diagnostics: DiagnosticCollector = PrintingDiagnosticCollector()
29-
) -> FileTranslator {
28+
diagnostics: any DiagnosticCollector = PrintingDiagnosticCollector()
29+
) -> any FileTranslator {
3030
makeTypesTranslator(
3131
components: components,
3232
diagnostics: diagnostics
@@ -35,7 +35,7 @@ class Test_Core: XCTestCase {
3535

3636
func makeTypesTranslator(
3737
components: OpenAPI.Components = .noComponents,
38-
diagnostics: DiagnosticCollector = PrintingDiagnosticCollector()
38+
diagnostics: any DiagnosticCollector = PrintingDiagnosticCollector()
3939
) -> TypesFileTranslator {
4040
TypesFileTranslator(
4141
config: .init(mode: .types),

Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_isSchemaSupported.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import OpenAPIKit30
1717

1818
class Test_isSchemaSupported: XCTestCase {
1919

20-
var translator: FileTranslator {
20+
var translator: any FileTranslator {
2121
TypesFileTranslator(
2222
config: .init(mode: .types),
2323
diagnostics: PrintingDiagnosticCollector(),

Tests/OpenAPIGeneratorReferenceTests/ReferenceTest.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ class ReferenceTests: XCTestCase {
8282
)
8383

8484
// Run the requested generator invocation
85-
let diagnostics: DiagnosticCollector = strictDiagnosticsCollector
85+
let diagnostics: any DiagnosticCollector = strictDiagnosticsCollector
8686
let generatorPipeline = self.makeGeneratorPipeline(
8787
config: referenceTest.asConfig,
8888
diagnostics: diagnostics
@@ -160,13 +160,13 @@ struct StrictDiagnosticsCollector: DiagnosticCollector {
160160

161161
extension ReferenceTests {
162162

163-
var strictDiagnosticsCollector: DiagnosticCollector {
163+
var strictDiagnosticsCollector: any DiagnosticCollector {
164164
StrictDiagnosticsCollector(test: self)
165165
}
166166

167167
private func makeGeneratorPipeline(
168168
config: Config,
169-
diagnostics: DiagnosticCollector
169+
diagnostics: any DiagnosticCollector
170170
) -> GeneratorPipeline {
171171

172172
let parser = YamsParser()

Tests/OpenAPIGeneratorReferenceTests/Resources/ReferenceSources/Petstore/Client.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ public struct Client: APIProtocol {
2222
public init(
2323
serverURL: URL,
2424
configuration: Configuration = .init(),
25-
transport: ClientTransport,
26-
middlewares: [ClientMiddleware] = []
25+
transport: any ClientTransport,
26+
middlewares: [any ClientMiddleware] = []
2727
) {
2828
self.client = .init(
2929
serverURL: serverURL,

Tests/OpenAPIGeneratorReferenceTests/Resources/ReferenceSources/Petstore/Server.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ extension APIProtocol {
1414
/// - configuration: A set of configuration values for the server.
1515
/// - middlewares: A list of middlewares to call before the handler.
1616
public func registerHandlers(
17-
on transport: ServerTransport,
17+
on transport: any ServerTransport,
1818
serverURL: URL = .defaultOpenAPIServerURL,
1919
configuration: Configuration = .init(),
20-
middlewares: [ServerMiddleware] = []
20+
middlewares: [any ServerMiddleware] = []
2121
) throws {
2222
let server = UniversalServer(
2323
serverURL: serverURL,

0 commit comments

Comments
 (0)