Skip to content

Commit cbe32ef

Browse files
authored
Improve CodeFormatter efficiency (#272)
* remove unnecessary successResponse * avoid calling getResponseContext unnecessarily * update changelog * avoid calling getSchemaContext unnecessarily * allow onlySuccessResponses to be true when there are multiple success responses * restore previous behaviour * remove no longer true changelog
1 parent 8be3479 commit cbe32ef

File tree

2 files changed

+17
-11
lines changed

2 files changed

+17
-11
lines changed

‎CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
## Next Version
44

5+
### Changed
6+
- Improved `CodeFormatter` efficiency #272 @zntfdr
7+
58
## 4.5.0
69

710
### Changed

‎Sources/SwagGenKit/CodeFormatter.swift

+14-11
Original file line numberDiff line numberDiff line change
@@ -165,17 +165,21 @@ public class CodeFormatter {
165165
context["isFile"] = schema.isFile
166166

167167
if modelInheritance {
168-
context["requiredProperties"] = schema.requiredProperties.map(getPropertyContext)
169-
context["optionalProperties"] = schema.optionalProperties.map(getPropertyContext)
170-
context["properties"] = schema.properties.map(getPropertyContext)
168+
let requiredPropertiesContext = schema.requiredProperties.map(getPropertyContext)
169+
let optionalPropertiesContext = schema.optionalProperties.map(getPropertyContext)
170+
context["requiredProperties"] = requiredPropertiesContext
171+
context["optionalProperties"] = optionalPropertiesContext
172+
context["properties"] = requiredPropertiesContext + optionalPropertiesContext
171173
context["enums"] = schema.enums.map(getEnumContext)
172174
context["schemas"] = schema.properties.compactMap { property in
173175
getInlineSchemaContext(property.schema, name: property.name)
174176
}
175177
} else {
176-
context["requiredProperties"] = schema.inheritedRequiredProperties.map(getPropertyContext)
177-
context["optionalProperties"] = schema.inheritedOptionalProperties.map(getPropertyContext)
178-
context["properties"] = schema.inheritedProperties.map(getPropertyContext)
178+
let inheritedRequiredPropertiesContext = schema.inheritedRequiredProperties.map(getPropertyContext)
179+
let inheritedOptionalPropertiesContext = schema.inheritedOptionalProperties.map(getPropertyContext)
180+
context["requiredProperties"] = inheritedRequiredPropertiesContext
181+
context["optionalProperties"] = inheritedOptionalPropertiesContext
182+
context["properties"] = inheritedRequiredPropertiesContext + inheritedOptionalPropertiesContext
179183
context["enums"] = schema.inheritedEnums.map(getEnumContext)
180184
context["schemas"] = schema.inheritedProperties.compactMap { property in
181185
getInlineSchemaContext(property.schema, name: property.name)
@@ -310,15 +314,14 @@ public class CodeFormatter {
310314
// Responses
311315

312316
let responses = operation.responses
313-
let successResponse = responses.first { $0.successful }
314317
let successResponses = responses.filter { $0.successful }.map(getResponseContext)
315318
let failureResponses = responses.filter { !$0.successful }.map(getResponseContext)
316319

317-
context["responses"] = responses.map(getResponseContext)
320+
context["responses"] = successResponses + failureResponses
318321
context["successResponse"] = successResponses.first
319-
context["successType"] = successResponse.flatMap(getResponseContext)?["type"]
320-
context["defaultResponse"] = responses.first { $0.statusCode == nil }.flatMap(getResponseContext)
321-
context["onlySuccessResponses"] = successResponse != nil && responses.count == 1
322+
context["successType"] = successResponses.first?["type"]
323+
context["defaultResponse"] = failureResponses.first { $0["statusCode"] == nil }
324+
context["onlySuccessResponses"] = !successResponses.isEmpty && responses.count == 1
322325
context["alwaysHasResponseType"] = responses.filter { $0.response.value.schema != nil }.count == responses.count
323326

324327
let successTypes = successResponses.compactMap { $0["type"] as? String }

0 commit comments

Comments
 (0)