Skip to content

Commit 2ace212

Browse files
committed
[codecomplete] Factor common code for adding keyword completions NFC
1 parent 4931362 commit 2ace212

File tree

1 file changed

+30
-50
lines changed

1 file changed

+30
-50
lines changed

lib/IDE/CodeCompletion.cpp

Lines changed: 30 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -4770,8 +4770,20 @@ static bool isClangSubModule(ModuleDecl *TheModule) {
47704770
return false;
47714771
}
47724772

4773+
static void addKeyword(CodeCompletionResultSink &Sink, StringRef Name,
4774+
CodeCompletionKeywordKind Kind,
4775+
StringRef TypeAnnotation = "") {
4776+
CodeCompletionResultBuilder Builder(
4777+
Sink, CodeCompletionResult::ResultKind::Keyword,
4778+
SemanticContextKind::None, {});
4779+
Builder.setKeywordKind(Kind);
4780+
Builder.addTextChunk(Name);
4781+
if (!TypeAnnotation.empty())
4782+
Builder.addTypeAnnotation(TypeAnnotation);
4783+
}
4784+
47734785
static void addDeclKeywords(CodeCompletionResultSink &Sink) {
4774-
auto AddKeyword = [&](StringRef Name, CodeCompletionKeywordKind Kind,
4786+
auto AddDeclKeyword = [&](StringRef Name, CodeCompletionKeywordKind Kind,
47754787
Optional<DeclAttrKind> DAK) {
47764788
if (Name == "let" || Name == "var") {
47774789
// Treat keywords that could be the start of a pattern specially.
@@ -4781,19 +4793,15 @@ static void addDeclKeywords(CodeCompletionResultSink &Sink) {
47814793
// Remove user inaccessible keywords.
47824794
if (DAK.hasValue() && DeclAttribute::isUserInaccessible(*DAK)) return;
47834795

4784-
CodeCompletionResultBuilder Builder(
4785-
Sink, CodeCompletionResult::ResultKind::Keyword,
4786-
SemanticContextKind::None, {});
4787-
Builder.setKeywordKind(Kind);
4788-
Builder.addTextChunk(Name);
4796+
addKeyword(Sink, Name, Kind);
47894797
};
47904798

4791-
#define DECL_KEYWORD(kw) AddKeyword(#kw, CodeCompletionKeywordKind::kw_##kw, None);
4799+
#define DECL_KEYWORD(kw) AddDeclKeyword(#kw, CodeCompletionKeywordKind::kw_##kw, None);
47924800
#include "swift/Syntax/TokenKinds.def"
47934801

47944802
// Context-sensitive keywords.
47954803
auto AddCSKeyword = [&](StringRef Name, DeclAttrKind Kind) {
4796-
AddKeyword(Name, CodeCompletionKeywordKind::None, Kind);
4804+
AddDeclKeyword(Name, CodeCompletionKeywordKind::None, Kind);
47974805
};
47984806

47994807
#define CONTEXTUAL_CASE(KW, CLASS) AddCSKeyword(#KW, DAK_##CLASS);
@@ -4806,65 +4814,37 @@ static void addDeclKeywords(CodeCompletionResultSink &Sink) {
48064814
}
48074815

48084816
static void addStmtKeywords(CodeCompletionResultSink &Sink, bool MaybeFuncBody) {
4809-
auto AddKeyword = [&](StringRef Name, CodeCompletionKeywordKind Kind) {
4817+
auto AddStmtKeyword = [&](StringRef Name, CodeCompletionKeywordKind Kind) {
48104818
if (!MaybeFuncBody && Kind == CodeCompletionKeywordKind::kw_return)
48114819
return;
4812-
4813-
CodeCompletionResultBuilder Builder(
4814-
Sink, CodeCompletionResult::ResultKind::Keyword,
4815-
SemanticContextKind::None, {});
4816-
Builder.setKeywordKind(Kind);
4817-
Builder.addTextChunk(Name);
4820+
addKeyword(Sink, Name, Kind);
48184821
};
4819-
#define STMT_KEYWORD(kw) AddKeyword(#kw, CodeCompletionKeywordKind::kw_##kw);
4822+
#define STMT_KEYWORD(kw) AddStmtKeyword(#kw, CodeCompletionKeywordKind::kw_##kw);
48204823
#include "swift/Syntax/TokenKinds.def"
48214824
}
48224825

48234826
static void addLetVarKeywords(CodeCompletionResultSink &Sink) {
4824-
auto AddKeyword = [&](StringRef Name, CodeCompletionKeywordKind Kind) {
4825-
CodeCompletionResultBuilder Builder(
4826-
Sink, CodeCompletionResult::ResultKind::Keyword,
4827-
SemanticContextKind::None, {});
4828-
Builder.setKeywordKind(Kind);
4829-
Builder.addTextChunk(Name);
4830-
};
4831-
4832-
AddKeyword("let", CodeCompletionKeywordKind::kw_let);
4833-
AddKeyword("var", CodeCompletionKeywordKind::kw_var);
4827+
addKeyword(Sink, "let", CodeCompletionKeywordKind::kw_let);
4828+
addKeyword(Sink, "var", CodeCompletionKeywordKind::kw_var);
48344829
}
48354830

48364831
static void addExprKeywords(CodeCompletionResultSink &Sink) {
4837-
auto AddKeyword = [&](StringRef Name, StringRef TypeAnnotation, CodeCompletionKeywordKind Kind) {
4838-
CodeCompletionResultBuilder Builder(
4839-
Sink, CodeCompletionResult::ResultKind::Keyword,
4840-
SemanticContextKind::None, {});
4841-
Builder.setKeywordKind(Kind);
4842-
Builder.addTextChunk(Name);
4843-
if (!TypeAnnotation.empty())
4844-
Builder.addTypeAnnotation(TypeAnnotation);
4845-
};
4846-
48474832
// Expr keywords.
4848-
AddKeyword("try", StringRef(), CodeCompletionKeywordKind::kw_try);
4849-
AddKeyword("try!", StringRef(), CodeCompletionKeywordKind::kw_try);
4850-
AddKeyword("try?", StringRef(), CodeCompletionKeywordKind::kw_try);
4833+
addKeyword(Sink, "try", CodeCompletionKeywordKind::kw_try);
4834+
addKeyword(Sink, "try!", CodeCompletionKeywordKind::kw_try);
4835+
addKeyword(Sink, "try?", CodeCompletionKeywordKind::kw_try);
48514836
// FIXME: The pedantically correct way to find the type is to resolve the
48524837
// Swift.StringLiteralType type.
4853-
AddKeyword("#function", "String", CodeCompletionKeywordKind::pound_function);
4854-
AddKeyword("#file", "String", CodeCompletionKeywordKind::pound_file);
4838+
addKeyword(Sink, "#function", CodeCompletionKeywordKind::pound_function, "String");
4839+
addKeyword(Sink, "#file", CodeCompletionKeywordKind::pound_file, "String");
48554840
// Same: Swift.IntegerLiteralType.
4856-
AddKeyword("#line", "Int", CodeCompletionKeywordKind::pound_line);
4857-
AddKeyword("#column", "Int", CodeCompletionKeywordKind::pound_column);
4858-
AddKeyword("#dsohandle", "UnsafeMutableRawPointer", CodeCompletionKeywordKind::pound_dsohandle);
4841+
addKeyword(Sink, "#line", CodeCompletionKeywordKind::pound_line, "Int");
4842+
addKeyword(Sink, "#column", CodeCompletionKeywordKind::pound_column, "Int");
4843+
addKeyword(Sink, "#dsohandle", CodeCompletionKeywordKind::pound_dsohandle, "UnsafeMutableRawPointer");
48594844
}
48604845

48614846
static void addAnyTypeKeyword(CodeCompletionResultSink &Sink) {
4862-
CodeCompletionResultBuilder Builder(
4863-
Sink, CodeCompletionResult::ResultKind::Keyword,
4864-
SemanticContextKind::None, {});
4865-
Builder.setKeywordKind(CodeCompletionKeywordKind::None);
4866-
Builder.addTextChunk("Any");
4867-
Builder.addTypeAnnotation("Any");
4847+
addKeyword(Sink, "Any", CodeCompletionKeywordKind::None, "Any");
48684848
}
48694849

48704850

0 commit comments

Comments
 (0)