Skip to content

Commit 816ea9f

Browse files
committed
[CodeCompletion] Implement completions in using declaration's specifier position
1 parent aabfebe commit 816ea9f

File tree

8 files changed

+39
-1
lines changed

8 files changed

+39
-1
lines changed

include/swift/IDE/CodeCompletionResult.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ enum class CodeCompletionKeywordKind : uint8_t {
190190
enum class CompletionKind : uint8_t {
191191
None,
192192
Import,
193+
Using,
193194
UnresolvedMember,
194195
DotExpr,
195196
StmtOrExpr,

include/swift/IDE/CompletionLookup.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,8 @@ class CompletionLookup final : public swift::VisibleDeclConsumer {
325325

326326
void addImportModuleNames();
327327

328+
void addUsingSpecifiers();
329+
328330
SemanticContextKind getSemanticContext(const Decl *D,
329331
DeclVisibilityKind Reason,
330332
DynamicLookupInfo dynamicLookupInfo);

include/swift/Parse/IDEInspectionCallbacks.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,10 @@ class CodeCompletionCallbacks {
255255
virtual void
256256
completeImportDecl(ImportPath::Builder &Path) {};
257257

258+
/// Complete the 'using' decl with supported specifiers.
259+
virtual void
260+
completeUsingDecl() {};
261+
258262
/// Complete unresolved members after dot.
259263
virtual void completeUnresolvedMember(CodeCompletionExpr *E,
260264
SourceLoc DotLoc) {};

lib/IDE/CodeCompletion.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,7 @@ class CodeCompletionCallbacksImpl : public CodeCompletionCallbacks,
283283

284284
void completePoundAvailablePlatform() override;
285285
void completeImportDecl(ImportPath::Builder &Path) override;
286+
void completeUsingDecl() override;
286287
void completeUnresolvedMember(CodeCompletionExpr *E,
287288
SourceLoc DotLoc) override;
288289
void completeCallArg(CodeCompletionExpr *E) override;
@@ -550,6 +551,11 @@ void CodeCompletionCallbacksImpl::completeImportDecl(
550551
Path.pop_back();
551552
}
552553

554+
void CodeCompletionCallbacksImpl::completeUsingDecl() {
555+
Kind = CompletionKind::Using;
556+
CurDeclContext = P.CurDeclContext;
557+
}
558+
553559
void CodeCompletionCallbacksImpl::completeUnresolvedMember(CodeCompletionExpr *E,
554560
SourceLoc DotLoc) {
555561
Kind = CompletionKind::UnresolvedMember;
@@ -990,6 +996,7 @@ void CodeCompletionCallbacksImpl::addKeywords(CodeCompletionResultSink &Sink,
990996
case CompletionKind::AttributeBegin:
991997
case CompletionKind::PoundAvailablePlatform:
992998
case CompletionKind::Import:
999+
case CompletionKind::Using:
9931000
case CompletionKind::UnresolvedMember:
9941001
case CompletionKind::AfterPoundExpr:
9951002
case CompletionKind::AfterPoundDirective:
@@ -1915,7 +1922,10 @@ void CodeCompletionCallbacksImpl::doneParsing(SourceFile *SrcFile) {
19151922
Lookup.addImportModuleNames();
19161923
break;
19171924
}
1918-
1925+
case CompletionKind::Using: {
1926+
Lookup.addUsingSpecifiers();
1927+
break;
1928+
}
19191929
case CompletionKind::AfterPoundDirective: {
19201930
addPoundDirectives(CompletionContext.getResultSink());
19211931

lib/IDE/CodeCompletionResult.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@ ContextFreeCodeCompletionResult::getCodeCompletionDeclKind(const Decl *D) {
315315
case DeclKind::OpaqueType:
316316
case DeclKind::BuiltinTuple:
317317
case DeclKind::MacroExpansion:
318+
case DeclKind::Using:
318319
llvm_unreachable("not expecting such a declaration result");
319320
case DeclKind::Module:
320321
return CodeCompletionDeclKind::Module;

lib/IDE/CompletionLookup.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,23 @@ void CompletionLookup::addImportModuleNames() {
387387
}
388388
}
389389

390+
void CompletionLookup::addUsingSpecifiers() {
391+
for (unsigned i = 0,
392+
n = static_cast<unsigned>(UsingSpecifier::LastSpecifier) + 1;
393+
i != n; ++i) {
394+
CodeCompletionResultBuilder Builder = makeResultBuilder(
395+
CodeCompletionResultKind::Keyword, SemanticContextKind::None);
396+
switch (static_cast<UsingSpecifier>(i)) {
397+
case UsingSpecifier::MainActor:
398+
Builder.addTextChunk("@MainActor");
399+
break;
400+
case UsingSpecifier::nonisolated:
401+
Builder.addTextChunk("nonisolated");
402+
break;
403+
}
404+
}
405+
}
406+
390407
SemanticContextKind
391408
CompletionLookup::getSemanticContext(const Decl *D, DeclVisibilityKind Reason,
392409
DynamicLookupInfo dynamicLookupInfo) {

tools/SourceKit/tools/sourcekitd/bin/InProc/CodeCompletionSwiftInterop.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,8 @@ swiftide_completion_result_get_kind(swiftide_completion_response_t _response) {
489489
return SWIFTIDE_COMPLETION_KIND_NONE;
490490
case CompletionKind::Import:
491491
return SWIFTIDE_COMPLETION_KIND_IMPORT;
492+
case CompletionKind::Using:
493+
return SWIFTIDE_COMPLETION_KIND_USING;
492494
case CompletionKind::UnresolvedMember:
493495
return SWIFTIDE_COMPLETION_KIND_UNRESOLVEDMEMBER;
494496
case CompletionKind::DotExpr:

tools/SourceKit/tools/sourcekitd/bin/InProc/CodeCompletionSwiftInterop.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ typedef enum swiftide_completion_kind_t: uint32_t {
123123
SWIFTIDE_COMPLETION_KIND_TYPEPOSSIBLEFUNCTIONPARAMBEGINNING = 42,
124124
SWIFTIDE_COMPLETION_KIND_TYPEATTRINHERITANCEBEGINNING = 43,
125125
SWIFTIDE_COMPLETION_KIND_TYPESIMPLEINVERTED = 44,
126+
SWIFTIDE_COMPLETION_KIND_USING = 45,
126127
} swiftide_completion_kind_t;
127128

128129
typedef enum swiftide_completion_item_kind_t: uint32_t {

0 commit comments

Comments
 (0)