Skip to content

Commit c4c214d

Browse files
authored
Merge pull request #58873 from rintaro/5.7-ide-completion-rdar92511769
[5.7][CodeCompletion] Suggest 'actor' decl introducer keyword
2 parents cb28676 + 103cb2f commit c4c214d

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
@@ -682,11 +682,6 @@ static void addDeclKeywords(CodeCompletionResultSink &Sink, DeclContext *DC,
682682
case CodeCompletionKeywordKind::kw_enum:
683683
case CodeCompletionKeywordKind::kw_extension:
684684
return true;
685-
case CodeCompletionKeywordKind::None:
686-
if (DAK && *DAK == DeclAttrKind::DAK_Actor) {
687-
return true;
688-
}
689-
break;
690685
default:
691686
break;
692687
}
@@ -793,12 +788,20 @@ static void addDeclKeywords(CodeCompletionResultSink &Sink, DeclContext *DC,
793788
DeclAttribute::isConcurrencyOnly(*DAK))
794789
return;
795790

796-
addKeyword(Sink, Name, Kind, /*TypeAnnotation=*/"", getFlair(Kind, DAK));
791+
CodeCompletionFlair flair = getFlair(Kind, DAK);
792+
793+
// Special case for 'actor'. Get the same flair with 'kw_class'.
794+
if (Kind == CodeCompletionKeywordKind::None && Name == "actor")
795+
flair = getFlair(CodeCompletionKeywordKind::kw_class, None);
796+
797+
addKeyword(Sink, Name, Kind, /*TypeAnnotation=*/"", flair);
797798
};
798799

799800
#define DECL_KEYWORD(kw) \
800801
AddDeclKeyword(#kw, CodeCompletionKeywordKind::kw_##kw, None);
801802
#include "swift/Syntax/TokenKinds.def"
803+
// Manually add "actor" because it's a contextual keyword.
804+
AddDeclKeyword("actor", CodeCompletionKeywordKind::None, None);
802805

803806
// Context-sensitive keywords.
804807
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
@@ -9,6 +9,7 @@
99

1010
// KW_DECL: Begin completions
1111
// KW_DECL-DAG: Keyword[class]/None: class{{; name=.+$}}
12+
// KW_DECL-DAG: Keyword/None: actor{{; name=.+$}}
1213
// KW_DECL-DAG: Keyword/None: convenience{{; name=.+$}}
1314
// KW_DECL-DAG: Keyword[deinit]/None: deinit{{; name=.+$}}
1415
// KW_DECL-DAG: Keyword/None: dynamic{{; name=.+$}}
@@ -45,6 +46,7 @@
4546

4647
// KW_DECL_PROTOCOL: Begin completions
4748
// KW_DECL_PROTOCOL-DAG: Keyword[class]/None/Flair[RareKeyword]: class{{; name=.+$}}
49+
// KW_DECL_PROTOCOL-DAG: Keyword/None/Flair[RareKeyword]: actor{{; name=.+$}}
4850
// KW_DECL_PROTOCOL-DAG: Keyword/None: convenience{{; name=.+$}}
4951
// KW_DECL_PROTOCOL-DAG: Keyword[deinit]/None: deinit{{; name=.+$}}
5052
// KW_DECL_PROTOCOL-DAG: Keyword/None: dynamic{{; name=.+$}}
@@ -81,6 +83,7 @@
8183

8284
// KW_DECL_TYPECONTEXT: Begin completions
8385
// KW_DECL_TYPECONTEXT-DAG: Keyword[class]/None: class{{; name=.+$}}
86+
// KW_DECL_TYPECONTEXT-DAG: Keyword/None: actor{{; name=.+$}}
8487
// KW_DECL_TYPECONTEXT-DAG: Keyword/None: convenience{{; name=.+$}}
8588
// KW_DECL_TYPECONTEXT-DAG: Keyword[deinit]/None: deinit{{; name=.+$}}
8689
// KW_DECL_TYPECONTEXT-DAG: Keyword/None: dynamic{{; name=.+$}}
@@ -121,6 +124,7 @@
121124
// Declaration keywords.
122125
//
123126
// KW_DECL_STMT_TOPLEVEL-DAG: Keyword[class]/None: class{{; name=.+$}}
127+
// KW_DECL_STMT_TOPLEVEL-DAG: Keyword/None: actor{{; name=.+$}}
124128
// KW_DECL_STMT_TOPLEVEL-DAG: Keyword/None: convenience{{; name=.+$}}
125129
// KW_DECL_STMT_TOPLEVEL-DAG: Keyword[deinit]/None: deinit{{; name=.+$}}
126130
// 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)