Skip to content

Commit 862f3fc

Browse files
committed
[Parse] Set missing contextual keyword token kind for async
Resolves rdar://93080331.
1 parent 78f937f commit 862f3fc

File tree

8 files changed

+49
-12
lines changed

8 files changed

+49
-12
lines changed

lib/Parse/ParsePattern.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -978,6 +978,7 @@ ParserStatus Parser::parseEffectsSpecifiers(SourceLoc existingArrowLoc,
978978
.fixItInsert(throwsLoc, isReasync ? "reasync " : "async ");
979979
}
980980
if (asyncLoc.isInvalid()) {
981+
Tok.setKind(tok::contextual_keyword);
981982
if (reasync)
982983
*reasync = isReasync;
983984
asyncLoc = Tok.getLoc();

test/IDE/coloring.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,8 @@ protocol Prot {
174174
var protocolProperty1: Int { get }
175175
// CHECK: <kw>var</kw> protocolProperty2: <type>Int</type> { <kw>get</kw> <kw>set</kw> }
176176
var protocolProperty2: Int { get set }
177+
// CHECK: <kw>var</kw> protoAsyncProp: <type>Int</type> { <kw>get</kw> <kw>async</kw> }
178+
var protoAsyncProp: Int { get async }
177179
}
178180

179181
// CHECK: <attr-builtin>infix</attr-builtin> <kw>operator</kw> *-* : FunnyPrecedence{{$}}

test/SourceKit/SyntaxMapData/Inputs/syntaxmap.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,7 @@ enum A {
6464
case namedArguments(param1: String, param2: Int)
6565
case mutedArguments(String, Int)
6666
}
67+
68+
protocol AsyncPropTest {
69+
var protoAsyncProp: Int { get async }
70+
}

test/SourceKit/SyntaxMapData/syntaxmap.swift.response

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
key.offset: 0,
3-
key.length: 1325,
3+
key.length: 1393,
44
key.diagnostic_stage: source.diagnostic.stage.swift.parse,
55
key.syntaxmap: [
66
{
@@ -707,6 +707,41 @@
707707
key.kind: source.lang.swift.syntaxtype.typeidentifier,
708708
key.offset: 1318,
709709
key.length: 3
710+
},
711+
{
712+
key.kind: source.lang.swift.syntaxtype.keyword,
713+
key.offset: 1326,
714+
key.length: 8
715+
},
716+
{
717+
key.kind: source.lang.swift.syntaxtype.identifier,
718+
key.offset: 1335,
719+
key.length: 13
720+
},
721+
{
722+
key.kind: source.lang.swift.syntaxtype.keyword,
723+
key.offset: 1353,
724+
key.length: 3
725+
},
726+
{
727+
key.kind: source.lang.swift.syntaxtype.identifier,
728+
key.offset: 1357,
729+
key.length: 14
730+
},
731+
{
732+
key.kind: source.lang.swift.syntaxtype.typeidentifier,
733+
key.offset: 1373,
734+
key.length: 3
735+
},
736+
{
737+
key.kind: source.lang.swift.syntaxtype.keyword,
738+
key.offset: 1379,
739+
key.length: 3
740+
},
741+
{
742+
key.kind: source.lang.swift.syntaxtype.keyword,
743+
key.offset: 1383,
744+
key.length: 5
710745
}
711746
]
712747
}

unittests/Syntax/TypeSyntaxTests.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -494,7 +494,7 @@ TEST(TypeSyntaxTests, FunctionTypeMakeAPIs) {
494494
auto RightParen = Factory.makeRightParenToken("", " ");
495495
auto Int = Factory.makeTypeIdentifier("Int", "", "");
496496
auto IntArg = Factory.makeBlankTupleTypeElement().withType(Int);
497-
auto Async = Factory.makeIdentifier("async", "", " ");
497+
auto Async = Factory.makeContextualKeyword("async", "", " ");
498498
auto Throws = Factory.makeThrowsKeyword("", " ");
499499
auto Rethrows = Factory.makeRethrowsKeyword("", " ");
500500
auto Arrow = Factory.makeArrowToken("", " ");

utils/gyb_syntax_support/DeclNodes.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,7 @@
7676
Node('FunctionSignature', kind='Syntax',
7777
children=[
7878
Child('Input', kind='ParameterClause'),
79-
Child('AsyncOrReasyncKeyword', kind='IdentifierToken',
80-
classification='Keyword',
79+
Child('AsyncOrReasyncKeyword', kind='ContextualKeywordToken',
8180
text_choices=['async', 'reasync'], is_optional=True),
8281
Child('ThrowsOrRethrowsKeyword', kind='Token',
8382
is_optional=True,
@@ -538,8 +537,7 @@
538537
'_read', '_modify'
539538
]),
540539
Child('Parameter', kind='AccessorParameter', is_optional=True),
541-
Child('AsyncKeyword', kind='IdentifierToken',
542-
classification='Keyword',
540+
Child('AsyncKeyword', kind='ContextualKeywordToken',
543541
text_choices=['async'], is_optional=True),
544542
Child('ThrowsKeyword', kind='Token',
545543
is_optional=True,

utils/gyb_syntax_support/ExprNodes.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,7 @@
193193
# NOTE: This appears only in SequenceExpr.
194194
Node('ArrowExpr', kind='Expr',
195195
children=[
196-
Child('AsyncKeyword', kind='IdentifierToken',
197-
classification='Keyword',
196+
Child('AsyncKeyword', kind='ContextualKeywordToken',
198197
text_choices=['async'], is_optional=True),
199198
Child('ThrowsToken', kind='ThrowsToken',
200199
is_optional=True),
@@ -394,8 +393,7 @@
394393
Child('SimpleInput', kind='ClosureParamList'),
395394
Child('Input', kind='ParameterClause'),
396395
]),
397-
Child('AsyncKeyword', kind='IdentifierToken',
398-
classification='Keyword',
396+
Child('AsyncKeyword', kind='ContextualKeywordToken',
399397
text_choices=['async'], is_optional=True),
400398
Child('ThrowsTok', kind='ThrowsToken', is_optional=True),
401399
Child('Output', kind='ReturnClause', is_optional=True),

utils/gyb_syntax_support/TypeNodes.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,7 @@
167167
Child('Arguments', kind='TupleTypeElementList',
168168
collection_element_name='Argument'),
169169
Child('RightParen', kind='RightParenToken'),
170-
Child('AsyncKeyword', kind='IdentifierToken',
171-
classification='Keyword',
170+
Child('AsyncKeyword', kind='ContextualKeyworkToken',
172171
text_choices=['async'], is_optional=True),
173172
Child('ThrowsOrRethrowsKeyword', kind='Token',
174173
is_optional=True,

0 commit comments

Comments
 (0)