IDE: Stop requiring availability platforms to be classified as keywords.

This commit is contained in:
Allan Shortlidge
2025-02-26 17:18:36 -08:00
parent 38069136d7
commit 332d770a5c
6 changed files with 11 additions and 16 deletions

View File

@@ -1170,8 +1170,6 @@ bool ModelASTWalker::handleSpecialDeclAttribute(const DeclAttribute *D,
assert(Next.Range.getStart() == D->getRange().Start &&
"Attribute's TokenNodes already consumed?");
}
} else {
assert(0 && "No TokenNodes?");
}
if (!passTokenNodesUntil(D->getRange().End,
IncludeNodeAtLocation).shouldContinue)

View File

@@ -3782,9 +3782,6 @@ ParserResult<AvailabilitySpec> Parser::parsePlatformVersionConstraintSpec() {
Context, PlatformIdentifier, PlatformLoc, Version, VersionRange));
}
// Register the platform name as a keyword token.
TokReceiver->registerTokenKindChange(PlatformLoc, tok::contextual_keyword);
return makeParserResult(AvailabilitySpec::createForDomain(
Context, AvailabilityDomain::forPlatform(Platform.value()), PlatformLoc,
Version, VersionRange));

View File

@@ -510,13 +510,13 @@ func typeAttr3(a: @ escaping () -> Int) {}
// CHECK: <kw>func</kw> typeAttr2(a: @ <comment-block>/*this is fine...*/</comment-block> escaping () -> <type>Int</type>, b: <attr-builtin>@ escaping</attr-builtin> () -> <type>Int</type>) {}
func typeAttr2(a: @ /*this is fine...*/ escaping () -> Int, b: @ escaping () -> Int) {}
// CHECK: <attr-builtin>@available</attr-builtin>(<kw>iOS</kw> <int>99</int>, *)
// CHECK: <attr-builtin>@available</attr-builtin>(iOS <int>99</int>, *)
// CHECK: <kw>var</kw> iHave = <int>10</int>, multipleVars = <int>20</int>
@available(iOS 99, *)
var iHave = 10, multipleVars = 20
enum MultipleCaseElements {
// CHECK: <attr-builtin>@available</attr-builtin>(<kw>iOS</kw> <int>99</int>, *)
// CHECK: <attr-builtin>@available</attr-builtin>(iOS <int>99</int>, *)
// CHECK: <kw>case</kw> foo, bar
@available(iOS 99, *)
case foo, bar
@@ -524,7 +524,7 @@ enum MultipleCaseElements {
protocol P {}
enum E {
// CHECK: <attr-builtin>@available</attr-builtin>(<kw>iOS</kw> <int>99</int>, *)
// CHECK: <attr-builtin>@available</attr-builtin>(iOS <int>99</int>, *)
// CHECK: <kw>case</kw> a(<type>P</type>)
@available(iOS 99, *)
case a(P)
@@ -533,7 +533,7 @@ enum E {
// Ideally this would be attr-builtin, but we don't actually have the attribute
// in the AST at all.
//
// CHECK: <attr-id>@available</attr-id>(<kw>iOS</kw> <int>99</int>, *)
// CHECK: <attr-id>@available</attr-id>(iOS <int>99</int>, *)
// CHECK: <kw>var</kw> <kw>_</kw> = <int>10</int>
@available(iOS 99, *)
var _ = 10
@@ -558,6 +558,6 @@ struct FreeWhere<T> {
}
// Renamed attribute ('fixed' to @available by the parser after emitting an error, so not treated as a custom attribute)
// CHECK: @availability(<kw>macOS</kw> <float>10.11</float>, *)
// CHECK: @availability(macOS <float>10.11</float>, *)
@availability(macOS 10.11, *)
class HasMisspelledAttr {}

View File

@@ -331,14 +331,14 @@ class NestedPoundIf {
#line 17 "abc.swift"
@available(iOS 8.0, OSX 10.10, *)
// CHECK: <attr-builtin>@available</attr-builtin>(<kw>iOS</kw> <float>8.0</float>, <kw>OSX</kw> <float>10.10</float>, *)
// CHECK: <attr-builtin>@available</attr-builtin>(iOS <float>8.0</float>, OSX <float>10.10</float>, *)
func foo() {
// CHECK: <kw>if</kw> <kw>#available</kw> (<kw>OSX</kw> <float>10.10</float>, <kw>iOS</kw> <float>8.01</float>, *) {<kw>let</kw> <kw>_</kw> = <str>"iOS"</str>}
// CHECK: <kw>if</kw> <kw>#available</kw> (OSX <float>10.10</float>, iOS <float>8.01</float>, *) {<kw>let</kw> <kw>_</kw> = <str>"iOS"</str>}
if #available (OSX 10.10, iOS 8.01, *) {let _ = "iOS"}
}
class AvailableWithOverride {
// CHECK: <attr-builtin>@available</attr-builtin>(<kw>iOS</kw> <float>8.01</float>, <kw>OSX</kw> <float>10.10</float>, *)
// CHECK: <attr-builtin>@available</attr-builtin>(iOS <float>8.01</float>, OSX <float>10.10</float>, *)
@available(iOS 8.01, OSX 10.10, *)
// CHECK: <attr-builtin>public</attr-builtin> <attr-builtin>override</attr-builtin> <kw>var</kw> multiple: <type>Int</type> { <kw>return</kw> <int>24</int> }
public override var multiple: Int { return 24 }
@@ -346,7 +346,7 @@ class AvailableWithOverride {
// CHECK: <kw>func</kw> test4(<kw>inout</kw> a: <type>Int</type>) {{{$}}
func test4(inout a: Int) {
// CHECK-OLD: <kw>if</kw> <kw>#available</kw> (<kw>OSX</kw> >= <float>10.10</float>, <kw>iOS</kw> >= <float>8.01</float>) {<kw>let</kw> OSX = <str>"iOS"</str>}}{{$}}
// CHECK-OLD: <kw>if</kw> <kw>#available</kw> (OSX >= <float>10.10</float>, iOS >= <float>8.01</float>) {<kw>let</kw> OSX = <str>"iOS"</str>}}{{$}}
// CHECK-NEW: <kw>if</kw> <kw>#available</kw> (OSX >= <float>10.10</float>, iOS >= <float>8.01</float>) {<kw>let</kw> OSX = <str>"iOS"</str>}}{{$}}
if #available (OSX >= 10.10, iOS >= 8.01) {let OSX = "iOS"}}

View File

@@ -3291,7 +3291,7 @@ public class FooOverlayClassDerived : Foo.FooOverlayClassBase {
key.length: 10
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 6018,
key.length: 5
},

View File

@@ -84,7 +84,7 @@
key.length: 10
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 191,
key.length: 3
},