Skip to content

Commit 6a08f14

Browse files
authored
Merge pull request swiftlang#58698 from rintaro/ide-completion-rdar92511769
[CodeCompletion] Suggest 'actor' decl introducer keyword
2 parents cf50b9d + 2805864 commit 6a08f14

File tree

3 files changed

+23
-6
lines changed

3 files changed

+23
-6
lines changed

lib/IDE/CodeCompletion.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -671,11 +671,6 @@ static void addDeclKeywords(CodeCompletionResultSink &Sink, DeclContext *DC,
671671
case CodeCompletionKeywordKind::kw_enum:
672672
case CodeCompletionKeywordKind::kw_extension:
673673
return true;
674-
case CodeCompletionKeywordKind::None:
675-
if (DAK && *DAK == DeclAttrKind::DAK_Actor) {
676-
return true;
677-
}
678-
break;
679674
default:
680675
break;
681676
}
@@ -782,12 +777,20 @@ static void addDeclKeywords(CodeCompletionResultSink &Sink, DeclContext *DC,
782777
DeclAttribute::isConcurrencyOnly(*DAK))
783778
return;
784779

785-
addKeyword(Sink, Name, Kind, /*TypeAnnotation=*/"", getFlair(Kind, DAK));
780+
CodeCompletionFlair flair = getFlair(Kind, DAK);
781+
782+
// Special case for 'actor'. Get the same flair with 'kw_class'.
783+
if (Kind == CodeCompletionKeywordKind::None && Name == "actor")
784+
flair = getFlair(CodeCompletionKeywordKind::kw_class, None);
785+
786+
addKeyword(Sink, Name, Kind, /*TypeAnnotation=*/"", flair);
786787
};
787788

788789
#define DECL_KEYWORD(kw) \
789790
AddDeclKeyword(#kw, CodeCompletionKeywordKind::kw_##kw, None);
790791
#include "swift/Syntax/TokenKinds.def"
792+
// Manually add "actor" because it's a contextual keyword.
793+
AddDeclKeyword("actor", CodeCompletionKeywordKind::None, None);
791794

792795
// Context-sensitive keywords.
793796
auto AddCSKeyword = [&](StringRef Name, DeclAttrKind Kind) {

test/IDE/complete_keywords.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
// KW_DECL: Begin completions
88
// KW_DECL-DAG: Keyword[class]/None: class{{; name=.+$}}
9+
// KW_DECL-DAG: Keyword/None: actor{{; name=.+$}}
910
// KW_DECL-DAG: Keyword/None: convenience{{; name=.+$}}
1011
// KW_DECL-DAG: Keyword[deinit]/None: deinit{{; name=.+$}}
1112
// KW_DECL-DAG: Keyword/None: dynamic{{; name=.+$}}
@@ -42,6 +43,7 @@
4243

4344
// KW_DECL_PROTOCOL: Begin completions
4445
// KW_DECL_PROTOCOL-DAG: Keyword[class]/None/Flair[RareKeyword]: class{{; name=.+$}}
46+
// KW_DECL_PROTOCOL-DAG: Keyword/None/Flair[RareKeyword]: actor{{; name=.+$}}
4547
// KW_DECL_PROTOCOL-DAG: Keyword/None: convenience{{; name=.+$}}
4648
// KW_DECL_PROTOCOL-DAG: Keyword[deinit]/None: deinit{{; name=.+$}}
4749
// KW_DECL_PROTOCOL-DAG: Keyword/None: dynamic{{; name=.+$}}
@@ -78,6 +80,7 @@
7880

7981
// KW_DECL_TYPECONTEXT: Begin completions
8082
// KW_DECL_TYPECONTEXT-DAG: Keyword[class]/None: class{{; name=.+$}}
83+
// KW_DECL_TYPECONTEXT-DAG: Keyword/None: actor{{; name=.+$}}
8184
// KW_DECL_TYPECONTEXT-DAG: Keyword/None: convenience{{; name=.+$}}
8285
// KW_DECL_TYPECONTEXT-DAG: Keyword[deinit]/None: deinit{{; name=.+$}}
8386
// KW_DECL_TYPECONTEXT-DAG: Keyword/None: dynamic{{; name=.+$}}
@@ -118,6 +121,7 @@
118121
// Declaration keywords.
119122
//
120123
// KW_DECL_STMT_TOPLEVEL-DAG: Keyword[class]/None: class{{; name=.+$}}
124+
// KW_DECL_STMT_TOPLEVEL-DAG: Keyword/None: actor{{; name=.+$}}
121125
// KW_DECL_STMT_TOPLEVEL-DAG: Keyword/None: convenience{{; name=.+$}}
122126
// KW_DECL_STMT_TOPLEVEL-DAG: Keyword[deinit]/None: deinit{{; name=.+$}}
123127
// KW_DECL_STMT_TOPLEVEL-DAG: Keyword/None: dynamic{{; name=.+$}}

test/SourceKit/CodeComplete/complete_override.swift.response

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,16 @@
3030
key.typerelation: source.codecompletion.typerelation.notapplicable,
3131
key.num_bytes_to_erase: 0
3232
},
33+
{
34+
key.kind: source.lang.swift.keyword,
35+
key.name: "actor",
36+
key.sourcetext: "actor",
37+
key.description: "actor",
38+
key.typename: "",
39+
key.context: source.codecompletion.context.none,
40+
key.typerelation: source.codecompletion.typerelation.notapplicable,
41+
key.num_bytes_to_erase: 0
42+
},
3343
{
3444
key.kind: source.lang.swift.keyword,
3545
key.name: "associatedtype",

0 commit comments

Comments
 (0)