Skip to content

Commit 8ab8888

Browse files
committed
[codecomplete] Factor common code for adding keyword completions NFC
1 parent edddb75 commit 8ab8888

File tree

1 file changed

+31
-51
lines changed

1 file changed

+31
-51
lines changed

lib/IDE/CodeCompletion.cpp

Lines changed: 31 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -4869,8 +4869,20 @@ static bool isClangSubModule(ModuleDecl *TheModule) {
48694869
return false;
48704870
}
48714871

4872+
static void addKeyword(CodeCompletionResultSink &Sink, StringRef Name,
4873+
CodeCompletionKeywordKind Kind,
4874+
StringRef TypeAnnotation = "") {
4875+
CodeCompletionResultBuilder Builder(
4876+
Sink, CodeCompletionResult::ResultKind::Keyword,
4877+
SemanticContextKind::None, {});
4878+
Builder.setKeywordKind(Kind);
4879+
Builder.addTextChunk(Name);
4880+
if (!TypeAnnotation.empty())
4881+
Builder.addTypeAnnotation(TypeAnnotation);
4882+
}
4883+
48724884
static void addDeclKeywords(CodeCompletionResultSink &Sink) {
4873-
auto AddKeyword = [&](StringRef Name, CodeCompletionKeywordKind Kind,
4885+
auto AddDeclKeyword = [&](StringRef Name, CodeCompletionKeywordKind Kind,
48744886
Optional<DeclAttrKind> DAK) {
48754887
if (Name == "let" || Name == "var") {
48764888
// Treat keywords that could be the start of a pattern specially.
@@ -4880,19 +4892,15 @@ static void addDeclKeywords(CodeCompletionResultSink &Sink) {
48804892
// Remove user inaccessible keywords.
48814893
if (DAK.hasValue() && DeclAttribute::isUserInaccessible(*DAK)) return;
48824894

4883-
CodeCompletionResultBuilder Builder(
4884-
Sink, CodeCompletionResult::ResultKind::Keyword,
4885-
SemanticContextKind::None, {});
4886-
Builder.setKeywordKind(Kind);
4887-
Builder.addTextChunk(Name);
4895+
addKeyword(Sink, Name, Kind);
48884896
};
48894897

4890-
#define DECL_KEYWORD(kw) AddKeyword(#kw, CodeCompletionKeywordKind::kw_##kw, None);
4898+
#define DECL_KEYWORD(kw) AddDeclKeyword(#kw, CodeCompletionKeywordKind::kw_##kw, None);
48914899
#include "swift/Syntax/TokenKinds.def"
48924900

48934901
// Context-sensitive keywords.
48944902
auto AddCSKeyword = [&](StringRef Name, DeclAttrKind Kind) {
4895-
AddKeyword(Name, CodeCompletionKeywordKind::None, Kind);
4903+
AddDeclKeyword(Name, CodeCompletionKeywordKind::None, Kind);
48964904
};
48974905

48984906
#define CONTEXTUAL_CASE(KW, CLASS) AddCSKeyword(#KW, DAK_##CLASS);
@@ -4905,68 +4913,40 @@ static void addDeclKeywords(CodeCompletionResultSink &Sink) {
49054913
}
49064914

49074915
static void addStmtKeywords(CodeCompletionResultSink &Sink, bool MaybeFuncBody) {
4908-
auto AddKeyword = [&](StringRef Name, CodeCompletionKeywordKind Kind) {
4916+
auto AddStmtKeyword = [&](StringRef Name, CodeCompletionKeywordKind Kind) {
49094917
if (!MaybeFuncBody && Kind == CodeCompletionKeywordKind::kw_return)
49104918
return;
4911-
4912-
CodeCompletionResultBuilder Builder(
4913-
Sink, CodeCompletionResult::ResultKind::Keyword,
4914-
SemanticContextKind::None, {});
4915-
Builder.setKeywordKind(Kind);
4916-
Builder.addTextChunk(Name);
4919+
addKeyword(Sink, Name, Kind);
49174920
};
4918-
#define STMT_KEYWORD(kw) AddKeyword(#kw, CodeCompletionKeywordKind::kw_##kw);
4921+
#define STMT_KEYWORD(kw) AddStmtKeyword(#kw, CodeCompletionKeywordKind::kw_##kw);
49194922
#include "swift/Syntax/TokenKinds.def"
49204923

49214924
// Throw is not marked as a STMT_KEYWORD.
4922-
AddKeyword("throw", CodeCompletionKeywordKind::kw_throw);
4925+
AddStmtKeyword("throw", CodeCompletionKeywordKind::kw_throw);
49234926
}
49244927

49254928
static void addLetVarKeywords(CodeCompletionResultSink &Sink) {
4926-
auto AddKeyword = [&](StringRef Name, CodeCompletionKeywordKind Kind) {
4927-
CodeCompletionResultBuilder Builder(
4928-
Sink, CodeCompletionResult::ResultKind::Keyword,
4929-
SemanticContextKind::None, {});
4930-
Builder.setKeywordKind(Kind);
4931-
Builder.addTextChunk(Name);
4932-
};
4933-
4934-
AddKeyword("let", CodeCompletionKeywordKind::kw_let);
4935-
AddKeyword("var", CodeCompletionKeywordKind::kw_var);
4929+
addKeyword(Sink, "let", CodeCompletionKeywordKind::kw_let);
4930+
addKeyword(Sink, "var", CodeCompletionKeywordKind::kw_var);
49364931
}
49374932

49384933
static void addExprKeywords(CodeCompletionResultSink &Sink) {
4939-
auto AddKeyword = [&](StringRef Name, StringRef TypeAnnotation, CodeCompletionKeywordKind Kind) {
4940-
CodeCompletionResultBuilder Builder(
4941-
Sink, CodeCompletionResult::ResultKind::Keyword,
4942-
SemanticContextKind::None, {});
4943-
Builder.setKeywordKind(Kind);
4944-
Builder.addTextChunk(Name);
4945-
if (!TypeAnnotation.empty())
4946-
Builder.addTypeAnnotation(TypeAnnotation);
4947-
};
4948-
49494934
// Expr keywords.
4950-
AddKeyword("try", StringRef(), CodeCompletionKeywordKind::kw_try);
4951-
AddKeyword("try!", StringRef(), CodeCompletionKeywordKind::kw_try);
4952-
AddKeyword("try?", StringRef(), CodeCompletionKeywordKind::kw_try);
4935+
addKeyword(Sink, "try", CodeCompletionKeywordKind::kw_try);
4936+
addKeyword(Sink, "try!", CodeCompletionKeywordKind::kw_try);
4937+
addKeyword(Sink, "try?", CodeCompletionKeywordKind::kw_try);
49534938
// FIXME: The pedantically correct way to find the type is to resolve the
49544939
// Swift.StringLiteralType type.
4955-
AddKeyword("#function", "String", CodeCompletionKeywordKind::pound_function);
4956-
AddKeyword("#file", "String", CodeCompletionKeywordKind::pound_file);
4940+
addKeyword(Sink, "#function", CodeCompletionKeywordKind::pound_function, "String");
4941+
addKeyword(Sink, "#file", CodeCompletionKeywordKind::pound_file, "String");
49574942
// Same: Swift.IntegerLiteralType.
4958-
AddKeyword("#line", "Int", CodeCompletionKeywordKind::pound_line);
4959-
AddKeyword("#column", "Int", CodeCompletionKeywordKind::pound_column);
4960-
AddKeyword("#dsohandle", "UnsafeMutableRawPointer", CodeCompletionKeywordKind::pound_dsohandle);
4943+
addKeyword(Sink, "#line", CodeCompletionKeywordKind::pound_line, "Int");
4944+
addKeyword(Sink, "#column", CodeCompletionKeywordKind::pound_column, "Int");
4945+
addKeyword(Sink, "#dsohandle", CodeCompletionKeywordKind::pound_dsohandle, "UnsafeMutableRawPointer");
49614946
}
49624947

49634948
static void addAnyTypeKeyword(CodeCompletionResultSink &Sink) {
4964-
CodeCompletionResultBuilder Builder(
4965-
Sink, CodeCompletionResult::ResultKind::Keyword,
4966-
SemanticContextKind::None, {});
4967-
Builder.setKeywordKind(CodeCompletionKeywordKind::None);
4968-
Builder.addTextChunk("Any");
4969-
Builder.addTypeAnnotation("Any");
4949+
addKeyword(Sink, "Any", CodeCompletionKeywordKind::None, "Any");
49704950
}
49714951

49724952

0 commit comments

Comments
 (0)