1- //! <https://docs.swift.org/swift-book/ReferenceManual/Attributes.html#ID583>
21use std:: fmt;
32
43use clang:: { Entity , PlatformAvailability , Version } ;
@@ -8,27 +7,24 @@ use crate::context::Context;
87#[ derive( Debug , Clone , PartialEq , Default ) ]
98struct Unavailable {
109 ios : bool ,
11- ios_app_extension : bool ,
1210 macos : bool ,
13- macos_app_extension : bool ,
1411 maccatalyst : bool ,
1512 watchos : bool ,
1613 tvos : bool ,
1714 visionos : bool ,
1815}
1916
2017#[ derive( Debug , Clone , PartialEq , Default ) ]
21- struct Versions {
22- ios : Option < Version > ,
23- ios_app_extension : Option < Version > ,
24- macos : Option < Version > ,
25- macos_app_extension : Option < Version > ,
26- maccatalyst : Option < Version > ,
27- watchos : Option < Version > ,
28- tvos : Option < Version > ,
29- visionos : Option < Version > ,
18+ pub struct Versions {
19+ pub ( crate ) macos : Option < Version > ,
20+ pub ( crate ) maccatalyst : Option < Version > ,
21+ pub ( crate ) ios : Option < Version > ,
22+ pub ( crate ) tvos : Option < Version > ,
23+ pub ( crate ) watchos : Option < Version > ,
24+ pub ( crate ) visionos : Option < Version > ,
3025}
3126
27+ /// <https://docs.swift.org/swift-book/ReferenceManual/Attributes.html#ID583>
3228#[ derive( Debug , Clone , PartialEq ) ]
3329pub struct Availability {
3430 unavailable : Unavailable ,
@@ -76,48 +72,36 @@ impl Availability {
7672
7773 // TODO: Ensure that a specific platform only appears once
7874 match & * availability. platform {
79- "ios" => set (
80- availability,
81- & mut unavailable. ios ,
82- & mut introduced. ios ,
83- & mut deprecated. ios ,
84- ) ,
85- "ios_app_extension" => set (
86- availability,
87- & mut unavailable. ios_app_extension ,
88- & mut introduced. ios_app_extension ,
89- & mut deprecated. ios_app_extension ,
90- ) ,
9175 "macos" => set (
9276 availability,
9377 & mut unavailable. macos ,
9478 & mut introduced. macos ,
9579 & mut deprecated. macos ,
9680 ) ,
97- "macos_app_extension" => set (
98- availability,
99- & mut unavailable. macos_app_extension ,
100- & mut introduced. macos_app_extension ,
101- & mut deprecated. macos_app_extension ,
102- ) ,
10381 "maccatalyst" => set (
10482 availability,
10583 & mut unavailable. maccatalyst ,
10684 & mut introduced. maccatalyst ,
10785 & mut deprecated. maccatalyst ,
10886 ) ,
109- "watchos " => set (
87+ "ios " => set (
11088 availability,
111- & mut unavailable. watchos ,
112- & mut introduced. watchos ,
113- & mut deprecated. watchos ,
89+ & mut unavailable. ios ,
90+ & mut introduced. ios ,
91+ & mut deprecated. ios ,
11492 ) ,
11593 "tvos" => set (
11694 availability,
11795 & mut unavailable. tvos ,
11896 & mut introduced. tvos ,
11997 & mut deprecated. tvos ,
12098 ) ,
99+ "watchos" => set (
100+ availability,
101+ & mut unavailable. watchos ,
102+ & mut introduced. watchos ,
103+ & mut deprecated. watchos ,
104+ ) ,
121105 "xros" => set (
122106 availability,
123107 & mut unavailable. visionos ,
@@ -127,6 +111,9 @@ impl Availability {
127111 "swift" => {
128112 _swift = Some ( availability) ;
129113 }
114+ platform if platform. ends_with ( "_app_extension" ) => {
115+ // Ignore availability attributes for app extensions
116+ }
130117 platform => error ! ( ?platform, "unknown availability platform" ) ,
131118 }
132119 }
@@ -145,9 +132,7 @@ impl Availability {
145132 self . deprecated,
146133 Versions {
147134 ios: None ,
148- ios_app_extension: None ,
149135 macos: None ,
150- macos_app_extension: None ,
151136 maccatalyst: None ,
152137 watchos: None ,
153138 tvos: None ,
0 commit comments