Skip to content

Commit bef6599

Browse files
review: rename MetadataAvailability to Metadata.Availability
1 parent 0d533aa commit bef6599

File tree

5 files changed

+69
-67
lines changed

5 files changed

+69
-67
lines changed

Sources/SwiftDocC/Model/Rendering/Symbol/AvailabilityRenderMetadataItem.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ public struct AvailabilityRenderItem: Codable, Hashable, Equatable {
140140
}
141141
}
142142

143-
init?(_ availability: MetadataAvailability, current: PlatformVersion?) {
143+
init?(_ availability: Metadata.Availability, current: PlatformVersion?) {
144144
if availability.introduced == nil {
145145
// FIXME: Deprecated/Beta markings need platform versions to display properly in Swift-DocC-Render (rdar://56897597)
146146
// Fill in the appropriate values here when that's fixed (https://github.com/apple/swift-docc/issues/441)

Sources/SwiftDocC/Semantics/Metadata/Availability.swift

Lines changed: 54 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -11,68 +11,70 @@
1111
import Foundation
1212
import Markdown
1313

14-
/// A directive that sets the platform availability information for a documentation page.
15-
///
16-
/// `@Available` is analagous to the `@available` attribute in Swift: It allows you to specify a
17-
/// platform version that the page relates to. To specify a platform and version, list the platform
18-
/// name and use the `introduced` argument:
19-
///
20-
/// ```markdown
21-
/// @Available(macOS, introduced: "12.0")
22-
/// ```
23-
///
24-
/// The available platforms are `macOS`, `iOS`, `watchOS`, and `tvOS`.
25-
///
26-
/// This directive is available on both articles and documentation extension files. In extension
27-
/// files, the information overrides any information from the symbol itself.
28-
///
29-
/// This directive is only valid within a ``Metadata`` directive:
30-
///
31-
/// ```markdown
32-
/// @Metadata {
33-
/// @Available(macOS, introduced: "12.0")
34-
/// @Available(iOS, introduced: "15.0")
35-
/// }
36-
/// ```
37-
public final class MetadataAvailability: Semantic, AutomaticDirectiveConvertible {
38-
static public let directiveName: String = "Available"
14+
extension Metadata {
15+
/// A directive that sets the platform availability information for a documentation page.
16+
///
17+
/// `@Available` is analagous to the `@available` attribute in Swift: It allows you to specify a
18+
/// platform version that the page relates to. To specify a platform and version, list the platform
19+
/// name and use the `introduced` argument:
20+
///
21+
/// ```markdown
22+
/// @Available(macOS, introduced: "12.0")
23+
/// ```
24+
///
25+
/// The available platforms are `macOS`, `iOS`, `watchOS`, and `tvOS`.
26+
///
27+
/// This directive is available on both articles and documentation extension files. In extension
28+
/// files, the information overrides any information from the symbol itself.
29+
///
30+
/// This directive is only valid within a ``Metadata`` directive:
31+
///
32+
/// ```markdown
33+
/// @Metadata {
34+
/// @Available(macOS, introduced: "12.0")
35+
/// @Available(iOS, introduced: "15.0")
36+
/// }
37+
/// ```
38+
public final class Availability: Semantic, AutomaticDirectiveConvertible {
39+
static public let directiveName: String = "Available"
3940

40-
public enum Platform: String, RawRepresentable, CaseIterable, DirectiveArgumentValueConvertible {
41-
// FIXME: re-add `case any = "*"` when `isBeta` and `isDeprecated` are implemented
42-
// cf. https://github.com/apple/swift-docc/issues/441
43-
case macOS, iOS, watchOS, tvOS
41+
public enum Platform: String, RawRepresentable, CaseIterable, DirectiveArgumentValueConvertible {
42+
// FIXME: re-add `case any = "*"` when `isBeta` and `isDeprecated` are implemented
43+
// cf. https://github.com/apple/swift-docc/issues/441
44+
case macOS, iOS, watchOS, tvOS
4445

45-
public init?(rawValue: String) {
46-
for platform in Self.allCases {
47-
if platform.rawValue.lowercased() == rawValue.lowercased() {
48-
self = platform
49-
return
46+
public init?(rawValue: String) {
47+
for platform in Self.allCases {
48+
if platform.rawValue.lowercased() == rawValue.lowercased() {
49+
self = platform
50+
return
51+
}
5052
}
53+
return nil
5154
}
52-
return nil
5355
}
54-
}
5556

56-
/// The platform that this argument's information applies to.
57-
@DirectiveArgumentWrapped(name: .unnamed)
58-
public var platform: Platform
57+
/// The platform that this argument's information applies to.
58+
@DirectiveArgumentWrapped(name: .unnamed)
59+
public var platform: Platform
5960

60-
/// The platform version that this page applies to.
61-
@DirectiveArgumentWrapped
62-
public var introduced: String
61+
/// The platform version that this page applies to.
62+
@DirectiveArgumentWrapped
63+
public var introduced: String
6364

64-
// FIXME: `isBeta` and `isDeprecated` properties/arguments
65-
// cf. https://github.com/apple/swift-docc/issues/441
65+
// FIXME: `isBeta` and `isDeprecated` properties/arguments
66+
// cf. https://github.com/apple/swift-docc/issues/441
6667

67-
static var keyPaths: [String : AnyKeyPath] = [
68-
"platform" : \MetadataAvailability._platform,
69-
"introduced" : \MetadataAvailability._introduced,
70-
]
68+
static var keyPaths: [String : AnyKeyPath] = [
69+
"platform" : \Availability._platform,
70+
"introduced" : \Availability._introduced,
71+
]
7172

72-
public let originalMarkup: Markdown.BlockDirective
73+
public let originalMarkup: Markdown.BlockDirective
7374

74-
@available(*, deprecated, message: "Do not call directly. Required for 'AutomaticDirectiveConvertible'.")
75-
init(originalMarkup: Markdown.BlockDirective) {
76-
self.originalMarkup = originalMarkup
75+
@available(*, deprecated, message: "Do not call directly. Required for 'AutomaticDirectiveConvertible'.")
76+
init(originalMarkup: Markdown.BlockDirective) {
77+
self.originalMarkup = originalMarkup
78+
}
7779
}
7880
}

Sources/SwiftDocC/Semantics/Metadata/Metadata.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import Markdown
2424
/// - ``DisplayName``
2525
/// - ``PageImage``
2626
/// - ``CallToAction``
27-
/// - ``MetadataAvailability``
27+
/// - ``Availability``
2828
public final class Metadata: Semantic, AutomaticDirectiveConvertible {
2929
public let originalMarkup: BlockDirective
3030

@@ -51,7 +51,7 @@ public final class Metadata: Semantic, AutomaticDirectiveConvertible {
5151
var callToAction: CallToAction? = nil
5252

5353
@ChildDirective(requirements: .zeroOrMore)
54-
var availability: [MetadataAvailability]
54+
var availability: [Availability]
5555

5656
static var keyPaths: [String : AnyKeyPath] = [
5757
"documentationOptions" : \Metadata._documentationOptions,
@@ -152,8 +152,8 @@ public final class Metadata: Semantic, AutomaticDirectiveConvertible {
152152
source: avail.originalMarkup.nameLocation?.source,
153153
severity: .warning,
154154
range: avail.originalMarkup.range,
155-
identifier: "org.swift.docc.\(MetadataAvailability.self).DuplicateIntroduced",
156-
summary: "Duplicate \(MetadataAvailability.directiveName.singleQuoted) directive with 'introduced' argument",
155+
identifier: "org.swift.docc.\(Metadata.Availability.self).DuplicateIntroduced",
156+
summary: "Duplicate \(Metadata.Availability.directiveName.singleQuoted) directive with 'introduced' argument",
157157
explanation: """
158158
A documentation page can only contain a single 'introduced' version for each platform.
159159
"""
@@ -165,7 +165,7 @@ public final class Metadata: Semantic, AutomaticDirectiveConvertible {
165165
}
166166

167167
let solution = Solution(
168-
summary: "Remove extraneous \(MetadataAvailability.directiveName.singleQuoted) directive",
168+
summary: "Remove extraneous \(Metadata.Availability.directiveName.singleQuoted) directive",
169169
replacements: [
170170
Replacement(range: range, replacement: "")
171171
]

Sources/SwiftDocC/Semantics/Symbol/PlatformName.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,10 @@ public struct PlatformName: Codable, Hashable, Equatable {
104104

105105
/// Creates a new platform name from the given metadata availability attribute platform.
106106
///
107-
/// Returns `nil` if the given platform was ``MetadataAvailability/Platform-swift.enum/any``.
108-
init?(metadataPlatform platform: MetadataAvailability.Platform) {
107+
/// Returns `nil` if the given platform was ``Metadata/Availability/Platform-swift.enum/any``.
108+
init?(metadataPlatform platform: Metadata.Availability.Platform) {
109109
// Note: This is still an optional initializer to prevent source breakage when
110-
// `MetadataAvailability.Platform` re-introduces the `.any` case
110+
// `Availability.Platform` re-introduces the `.any` case
111111
// cf. https://github.com/apple/swift-docc/issues/441
112112
self = .init(operatingSystemName: platform.rawValue)
113113
}

Tests/SwiftDocCTests/Semantics/MetadataAvailabilityTests.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ class MetadataAvailabilityTests: XCTestCase {
2525

2626
directive.map { directive in
2727
var problems = [Problem]()
28-
XCTAssertEqual(MetadataAvailability.directiveName, directive.name)
29-
let availability = MetadataAvailability(from: directive, source: nil, for: bundle, in: context, problems: &problems)
28+
XCTAssertEqual(Metadata.Availability.directiveName, directive.name)
29+
let availability = Metadata.Availability(from: directive, source: nil, for: bundle, in: context, problems: &problems)
3030
XCTAssertNil(availability)
3131
}
3232
}
@@ -45,11 +45,11 @@ class MetadataAvailabilityTests: XCTestCase {
4545
let _ = Metadata(from: directive, source: nil, for: bundle, in: context, problems: &problems)
4646
XCTAssertEqual(2, problems.count)
4747
let diagnosticIdentifiers = Set(problems.map { $0.diagnostic.identifier })
48-
XCTAssertEqual(diagnosticIdentifiers, ["org.swift.docc.\(MetadataAvailability.self).DuplicateIntroduced"])
48+
XCTAssertEqual(diagnosticIdentifiers, ["org.swift.docc.\(Metadata.Availability.self).DuplicateIntroduced"])
4949
}
5050
}
5151

52-
for platform in MetadataAvailability.Platform.allCases {
52+
for platform in Metadata.Availability.Platform.allCases {
5353
let source = """
5454
@Metadata {
5555
@Available(\(platform.rawValue), introduced: \"1.0\")
@@ -74,7 +74,7 @@ class MetadataAvailabilityTests: XCTestCase {
7474
validArgumentsWithVersion.append("introduced: \"1.0\", \(arg)")
7575
}
7676

77-
for platform in MetadataAvailability.Platform.allCases {
77+
for platform in Metadata.Availability.Platform.allCases {
7878
// FIXME: Test validArguments with the `*` platform once that's introduced
7979
// cf. https://github.com/apple/swift-docc/issues/441
8080
for args in validArgumentsWithVersion {
@@ -115,7 +115,7 @@ class MetadataAvailabilityTests: XCTestCase {
115115
}
116116

117117
func assertValidAvailability(source: String) throws {
118-
try assertValidDirective(MetadataAvailability.self, source: source)
118+
try assertValidDirective(Metadata.Availability.self, source: source)
119119
}
120120

121121
func assertValidMetadata(source: String) throws {

0 commit comments

Comments
 (0)