Skip to content

Commit 4d9783d

Browse files
add a non-throwing initializer that takes only version core identifiers
This initializer should be much more ergonomic to use in the common cases, and it's safe because it's guaranteed not to encounter any error.
1 parent 1790ae6 commit 4d9783d

File tree

3 files changed

+36
-4
lines changed

3 files changed

+36
-4
lines changed

Sources/SymbolKit/SymbolGraph/SemanticVersion/SemanticVersion.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,13 @@ extension SymbolGraph {
5858
self.buildMetadataIdentifiers = buildMetadataIdentifiers
5959
}
6060

61+
/// Creates a semantic version with the provided components of a semantic version.
62+
/// - Parameters:
63+
/// - major: The major version number.
64+
/// - minor: The minor version number.
65+
/// - patch: The patch version number.
66+
/// - prerelease: The pre-release information.
67+
/// - buildMetadata: The build metadata.
6168
@available(*, deprecated, renamed: "init(_:_:_:prerelease:buildMetadata:)")
6269
@_disfavoredOverload
6370
public init(
@@ -75,6 +82,15 @@ extension SymbolGraph {
7582
buildMetadata: buildMetadata
7683
)
7784
}
85+
86+
/// Creates a semantic version with the provided components of a semantic version.
87+
/// - Parameters:
88+
/// - major: The major version number.
89+
/// - minor: The minor version number.
90+
/// - patch: The patch version number.
91+
public init(_ major: UInt, _ minor: UInt, _ patch: UInt) {
92+
try! self.init(major: major, minor: minor, patch: patch)
93+
}
7894
}
7995
}
8096

Tests/SymbolKitTests/SymbolGraph/SemanticVersion/MainInitializerTests.swift renamed to Tests/SymbolKitTests/SymbolGraph/SemanticVersion/DirectInitializationTests.swift

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
import XCTest
1212
@testable import SymbolKit
1313

14-
final class MainInitializationTests: XCTestCase {
15-
func testInitializationFromComponents() throws {
14+
final class DirectInitializationTests: XCTestCase {
15+
func testInitializationFromAllComponents() throws {
1616

1717
// MARK: primary public properties
1818

@@ -114,4 +114,20 @@ final class MainInitializationTests: XCTestCase {
114114
XCTAssertThrowsError(try SymbolGraph.SemanticVersion(major: 5, minor: 6, patch: 7, buildMetadata: ".c.")) { XCTAssertTrue($0 is SymbolGraph.SemanticVersionError) }
115115
XCTAssertThrowsError(try SymbolGraph.SemanticVersion(major: 8, minor: 9, patch: 0, buildMetadata: "🙃")) { XCTAssertTrue($0 is SymbolGraph.SemanticVersionError) }
116116
}
117+
118+
func testInitializationFromOnlyVersionCoreComponents() {
119+
let version1 = SymbolGraph.SemanticVersion(0, 0, 0)
120+
XCTAssertEqual(version1.major, 0)
121+
XCTAssertEqual(version1.minor, 0)
122+
XCTAssertEqual(version1.patch, 0)
123+
XCTAssertEqual(version1.prereleaseIdentifiers, [])
124+
XCTAssertEqual(version1.buildMetadataIdentifiers, [])
125+
126+
let version2 = SymbolGraph.SemanticVersion(3, 2, 1)
127+
XCTAssertEqual(version2.major, 3)
128+
XCTAssertEqual(version2.minor, 2)
129+
XCTAssertEqual(version2.patch, 1)
130+
XCTAssertEqual(version2.prereleaseIdentifiers, [])
131+
XCTAssertEqual(version2.buildMetadataIdentifiers, [])
132+
}
117133
}

Tests/SymbolKitTests/SymbolGraph/SymbolGraphCreationTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class SymbolGraphCreationTests: XCTestCase {
2020
func testCreateAndEncodeSymbolGraph() throws {
2121
let symbolGraph = SymbolGraph(
2222
metadata: .init(
23-
formatVersion: try .init(major: 0, minor: 5, patch: 0),
23+
formatVersion: .init(0, 5, 0),
2424
generator: "org.swift.SymbolKitTests"
2525
),
2626
module: .init(
@@ -30,7 +30,7 @@ class SymbolGraphCreationTests: XCTestCase {
3030
vendor: nil,
3131
operatingSystem: .init(
3232
name: "MyOS",
33-
minimumVersion: try .init(major: 1, minor: 2, patch: 3)
33+
minimumVersion: .init(1, 2, 3)
3434
),
3535
environment: nil
3636
)

0 commit comments

Comments
 (0)