Skip to content

Commit 08800c5

Browse files
authored
Merge pull request #255 from WowbaggersLiquidLunch/i-like-types-and-i-cannot-lie
[NFC] Replace type-erased pattern matching with typed if-else blocks
2 parents 5d33a3f + 72d1280 commit 08800c5

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

Sources/TSCUtility/Version.swift

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -186,22 +186,24 @@ extension Version: Comparable, Hashable {
186186
return true // Prerelease lhs < non-prerelease rhs
187187
}
188188

189-
let zippedIdentifiers = zip(lhs.prereleaseIdentifiers, rhs.prereleaseIdentifiers)
190-
for (lhsPrereleaseIdentifier, rhsPrereleaseIdentifier) in zippedIdentifiers {
189+
for (lhsPrereleaseIdentifier, rhsPrereleaseIdentifier) in zip(lhs.prereleaseIdentifiers, rhs.prereleaseIdentifiers) {
191190
if lhsPrereleaseIdentifier == rhsPrereleaseIdentifier {
192191
continue
193192
}
194-
195-
let typedLhsIdentifier: Any = Int(lhsPrereleaseIdentifier) ?? lhsPrereleaseIdentifier
196-
let typedRhsIdentifier: Any = Int(rhsPrereleaseIdentifier) ?? rhsPrereleaseIdentifier
197-
198-
switch (typedLhsIdentifier, typedRhsIdentifier) {
199-
case let (int1 as Int, int2 as Int): return int1 < int2
200-
case let (string1 as String, string2 as String): return string1 < string2
201-
case (is Int, is String): return true // Int prereleases < String prereleases
202-
case (is String, is Int): return false
203-
default:
204-
return false
193+
194+
// Check if either of the 2 pre-release identifiers is numeric.
195+
let lhsNumericPrereleaseIdentifier = Int(lhsPrereleaseIdentifier)
196+
let rhsNumericPrereleaseIdentifier = Int(rhsPrereleaseIdentifier)
197+
198+
if let lhsNumericPrereleaseIdentifier = lhsNumericPrereleaseIdentifier,
199+
let rhsNumericPrereleaseIdentifier = rhsNumericPrereleaseIdentifier {
200+
return lhsNumericPrereleaseIdentifier < rhsNumericPrereleaseIdentifier
201+
} else if lhsNumericPrereleaseIdentifier != nil {
202+
return true // numeric pre-release < non-numeric pre-release
203+
} else if rhsNumericPrereleaseIdentifier != nil {
204+
return false // non-numeric pre-release > numeric pre-release
205+
} else {
206+
return lhsPrereleaseIdentifier < rhsPrereleaseIdentifier
205207
}
206208
}
207209

0 commit comments

Comments
 (0)