@@ -132,31 +132,6 @@ class CodeCompletionCallbacksImpl : public CodeCompletionCallbacks {
132132
133133 std::vector<std::pair<std::string, bool >> SubModuleNameVisibilityPairs;
134134
135- void addSuperKeyword (CodeCompletionResultSink &Sink) {
136- auto *DC = CurDeclContext->getInnermostTypeContext ();
137- if (!DC)
138- return ;
139- auto *CD = DC->getSelfClassDecl ();
140- if (!CD)
141- return ;
142- Type ST = CD->getSuperclass ();
143- if (ST.isNull () || ST->is <ErrorType>())
144- return ;
145-
146- CodeCompletionResultBuilder Builder (Sink, CodeCompletionResultKind::Keyword,
147- SemanticContextKind::CurrentNominal,
148- {});
149- if (auto *AFD = dyn_cast<AbstractFunctionDecl>(CurDeclContext)) {
150- if (AFD->getOverriddenDecl () != nullptr ) {
151- Builder.addFlair (CodeCompletionFlairBit::CommonKeywordAtCurrentPosition);
152- }
153- }
154-
155- Builder.setKeywordKind (CodeCompletionKeywordKind::kw_super);
156- Builder.addKeyword (" super" );
157- Builder.addTypeAnnotation (ST, PrintOptions ());
158- }
159-
160135 Optional<std::pair<Type, ConcreteDeclRef>> typeCheckParsedExpr () {
161136 assert (ParsedExpr && " should have an expression" );
162137
@@ -879,6 +854,32 @@ static void addExprKeywords(CodeCompletionResultSink &Sink, DeclContext *DC) {
879854 addKeyword (Sink, " await" , CodeCompletionKeywordKind::None, " " , flair);
880855}
881856
857+ static void addSuperKeyword (CodeCompletionResultSink &Sink, DeclContext *DC) {
858+ if (!DC)
859+ return ;
860+ auto *TC = DC->getInnermostTypeContext ();
861+ if (!TC)
862+ return ;
863+ auto *CD = TC->getSelfClassDecl ();
864+ if (!CD)
865+ return ;
866+ Type ST = CD->getSuperclass ();
867+ if (ST.isNull () || ST->is <ErrorType>())
868+ return ;
869+
870+ CodeCompletionResultBuilder Builder (Sink, CodeCompletionResultKind::Keyword,
871+ SemanticContextKind::CurrentNominal, {});
872+ if (auto *AFD = dyn_cast<AbstractFunctionDecl>(DC)) {
873+ if (AFD->getOverriddenDecl () != nullptr ) {
874+ Builder.addFlair (CodeCompletionFlairBit::CommonKeywordAtCurrentPosition);
875+ }
876+ }
877+
878+ Builder.setKeywordKind (CodeCompletionKeywordKind::kw_super);
879+ Builder.addKeyword (" super" );
880+ Builder.addTypeAnnotation (ST, PrintOptions ());
881+ }
882+
882883static void addOpaqueTypeKeyword (CodeCompletionResultSink &Sink) {
883884 addKeyword (Sink, " some" , CodeCompletionKeywordKind::None, " some" );
884885}
@@ -950,7 +951,7 @@ void CodeCompletionCallbacksImpl::addKeywords(CodeCompletionResultSink &Sink,
950951 case CompletionKind::YieldStmtExpr:
951952 case CompletionKind::PostfixExprBeginning:
952953 case CompletionKind::ForEachSequence:
953- addSuperKeyword (Sink);
954+ addSuperKeyword (Sink, CurDeclContext );
954955 addLetVarKeywords (Sink);
955956 addExprKeywords (Sink, CurDeclContext);
956957 addAnyTypeKeyword (Sink, CurDeclContext->getASTContext ().TheAnyType );
@@ -1334,8 +1335,7 @@ bool CodeCompletionCallbacksImpl::trySolverCompletion(bool MaybeFuncBody) {
13341335 assert (CodeCompleteTokenExpr);
13351336 assert (CurDeclContext);
13361337
1337- DotExprTypeCheckCompletionCallback Lookup (CurDeclContext,
1338- CodeCompleteTokenExpr);
1338+ DotExprTypeCheckCompletionCallback Lookup (CodeCompleteTokenExpr);
13391339 llvm::SaveAndRestore<TypeCheckCompletionCallback*>
13401340 CompletionCollector (Context.CompletionCallback , &Lookup);
13411341 typeCheckContextAt (CurDeclContext, CompletionLoc);
@@ -1346,7 +1346,7 @@ bool CodeCompletionCallbacksImpl::trySolverCompletion(bool MaybeFuncBody) {
13461346 // typechecking still resolve even these cases would be beneficial for
13471347 // tooling in general though.
13481348 if (!Lookup.gotCallback ())
1349- Lookup.fallbackTypeCheck ();
1349+ Lookup.fallbackTypeCheck (CurDeclContext );
13501350
13511351 addKeywords (CompletionContext.getResultSink (), MaybeFuncBody);
13521352
@@ -1567,7 +1567,7 @@ void CodeCompletionCallbacksImpl::doneParsing() {
15671567 Lookup.setHaveLParen (false );
15681568
15691569 // Add any keywords that can be used in an argument expr position.
1570- addSuperKeyword (CompletionContext.getResultSink ());
1570+ addSuperKeyword (CompletionContext.getResultSink (), CurDeclContext );
15711571 addExprKeywords (CompletionContext.getResultSink (), CurDeclContext);
15721572
15731573 DoPostfixExprBeginning ();
@@ -1713,7 +1713,7 @@ void CodeCompletionCallbacksImpl::doneParsing() {
17131713 ContextInfo.isImplicitSingleExpressionReturn ());
17141714
17151715 // Add any keywords that can be used in an argument expr position.
1716- addSuperKeyword (CompletionContext.getResultSink ());
1716+ addSuperKeyword (CompletionContext.getResultSink (), CurDeclContext );
17171717 addExprKeywords (CompletionContext.getResultSink (), CurDeclContext);
17181718
17191719 DoPostfixExprBeginning ();
@@ -1771,7 +1771,7 @@ void CodeCompletionCallbacksImpl::doneParsing() {
17711771 Context.LangOpts .EnableExperimentalConcurrency ,
17721772 Context.LangOpts .EnableExperimentalDistributed );
17731773 addStmtKeywords (Sink, CurDeclContext, MaybeFuncBody);
1774- addSuperKeyword (Sink);
1774+ addSuperKeyword (Sink, CurDeclContext );
17751775 addLetVarKeywords (Sink);
17761776 addExprKeywords (Sink, CurDeclContext);
17771777 addAnyTypeKeyword (Sink, Context.TheAnyType );
0 commit comments