Skip to content

Commit f7c7ed7

Browse files
committed
Replace lenient version parsing implementation with the one in TSC
1 parent 2c6ef7f commit f7c7ed7

File tree

4 files changed

+9
-48
lines changed

4 files changed

+9
-48
lines changed

Package.resolved

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Sources/SwiftDriver/Driver/Driver.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2155,7 +2155,7 @@ extension Driver {
21552155
diagnosticsEngine.emit(.warning_no_sdksettings_json(sdkPath.pathString))
21562156
return false
21572157
}
2158-
guard let sdkVersion = Version(potentiallyIncompleteVersionString: sdkInfo.versionString) else {
2158+
guard let sdkVersion = try? Version(versionString: sdkInfo.versionString, usesLenientParsing: true) else {
21592159
diagnosticsEngine.emit(.warning_fail_parse_sdk_ver(sdkInfo.versionString, sdkPath.pathString))
21602160
return false
21612161
}

Sources/SwiftDriver/Toolchains/DarwinToolchain.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -254,12 +254,12 @@ public final class DarwinToolchain: Toolchain {
254254
let mappingDict = try keyedContainer.decode([String: String].self, forKey: .macOSToCatalystMapping)
255255
self.macOSToCatalystMapping = [:]
256256
try mappingDict.forEach { key, value in
257-
guard let newKey = Version(potentiallyIncompleteVersionString: key) else {
257+
guard let newKey = try? Version(versionString: key, usesLenientParsing: true) else {
258258
throw DecodingError.dataCorruptedError(forKey: .macOSToCatalystMapping,
259259
in: keyedContainer,
260260
debugDescription: "Malformed version string")
261261
}
262-
guard let newValue = Version(potentiallyIncompleteVersionString: value) else {
262+
guard let newValue = try? Version(versionString: value, usesLenientParsing: true) else {
263263
throw DecodingError.dataCorruptedError(forKey: .macOSToCatalystMapping,
264264
in: keyedContainer,
265265
debugDescription: "Malformed version string")
@@ -277,7 +277,7 @@ public final class DarwinToolchain: Toolchain {
277277

278278
self.versionString = try keyedContainer.decode(String.self, forKey: .version)
279279
self.canonicalName = try keyedContainer.decode(String.self, forKey: .canonicalName)
280-
guard let version = Version(potentiallyIncompleteVersionString: versionString) else {
280+
guard let version = try? Version(versionString: versionString, usesLenientParsing: true) else {
281281
throw DecodingError.dataCorruptedError(forKey: .version,
282282
in: keyedContainer,
283283
debugDescription: "Malformed version string")

Sources/SwiftDriver/Utilities/VersionExtensions.swift

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -14,45 +14,6 @@ import TSCUtility
1414

1515
// TODO: maybe move this to TSC.
1616
extension Version {
17-
/// Create a version from a string, replacing unknown trailing components with '0'.
18-
init?(potentiallyIncompleteVersionString string: String) {
19-
// This is a copied version of TSC's version parsing, modified to fill
20-
// in missing components if needed.
21-
let prereleaseStartIndex = string.firstIndex(of: "-")
22-
let metadataStartIndex = string.firstIndex(of: "+")
23-
24-
let requiredEndIndex = prereleaseStartIndex ?? metadataStartIndex ?? string.endIndex
25-
let requiredCharacters = string.prefix(upTo: requiredEndIndex)
26-
var requiredComponents = requiredCharacters
27-
.split(separator: ".", maxSplits: 2, omittingEmptySubsequences: false)
28-
.map(String.init).compactMap({ Int($0) }).filter({ $0 >= 0 })
29-
30-
requiredComponents.append(contentsOf:
31-
Array(repeating: 0,
32-
count: max(0, 3 - requiredComponents.count)))
33-
34-
let major = requiredComponents[0]
35-
let minor = requiredComponents[1]
36-
let patch = requiredComponents[2]
37-
38-
func identifiers(start: String.Index?, end: String.Index) -> [String] {
39-
guard let start = start else { return [] }
40-
let identifiers = string[string.index(after: start)..<end]
41-
return identifiers.split(separator: ".").map(String.init)
42-
}
43-
44-
let prereleaseIdentifiers = identifiers(
45-
start: prereleaseStartIndex,
46-
end: metadataStartIndex ?? string.endIndex)
47-
let buildMetadataIdentifiers = identifiers(
48-
start: metadataStartIndex,
49-
end: string.endIndex)
50-
51-
self.init(major, minor, patch,
52-
prereleaseIdentifiers: prereleaseIdentifiers,
53-
buildMetadataIdentifiers: buildMetadataIdentifiers)
54-
}
55-
5617
/// Returns the version with out any build/release metadata numbers.
5718
var withoutBuildNumbers: Version {
5819
return Version(self.major, self.minor, self.patch)

0 commit comments

Comments
 (0)