Skip to content

Commit 7426809

Browse files
committed
[CodeCompletion] Don't suggest underscored module name
Underscored modules (e.g. '_Concurrency') are usually not meant be written explicitly in source code. They are usually implicitly imported with other modules. Code completion should not suggest them in type and expression context. rdar://78232229 (cherry picked from commit 858ecb8)
1 parent 15fa94d commit 7426809

File tree

2 files changed

+63
-5
lines changed

2 files changed

+63
-5
lines changed

lib/IDE/CodeCompletion.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2079,6 +2079,12 @@ class CompletionLookup final : public swift::VisibleDeclConsumer {
20792079
IncludeInstanceMembers = true;
20802080
}
20812081

2082+
bool isHiddenModuleName(Identifier Name) {
2083+
return (Name.str().startswith("_") ||
2084+
Name == Ctx.SwiftShimsModuleName ||
2085+
Name.str() == SWIFT_ONONE_SUPPORT);
2086+
}
2087+
20822088
void addSubModuleNames(std::vector<std::pair<std::string, bool>>
20832089
&SubModuleNameVisibilityPairs) {
20842090
for (auto &Pair : SubModuleNameVisibilityPairs) {
@@ -2143,10 +2149,7 @@ class CompletionLookup final : public swift::VisibleDeclConsumer {
21432149

21442150
auto mainModuleName = CurrModule->getName();
21452151
for (auto ModuleName : ModuleNames) {
2146-
if (ModuleName.str().startswith("_") ||
2147-
ModuleName == mainModuleName ||
2148-
ModuleName == Ctx.SwiftShimsModuleName ||
2149-
ModuleName.str() == SWIFT_ONONE_SUPPORT)
2152+
if (ModuleName == mainModuleName || isHiddenModuleName(ModuleName))
21502153
continue;
21512154

21522155
auto MD = ModuleDecl::create(ModuleName, Ctx);
@@ -6279,8 +6282,10 @@ static void deliverCompletionResults(CodeCompletionContext &CompletionContext,
62796282
RequestedModules.push_back({std::move(K), TheModule,
62806283
Request.OnlyTypes, Request.OnlyPrecedenceGroups});
62816284

6285+
auto TheModuleName = TheModule->getName();
62826286
if (Request.IncludeModuleQualifier &&
6283-
seenModuleNames.insert(TheModule->getName()).second)
6287+
!Lookup.isHiddenModuleName(TheModuleName) &&
6288+
seenModuleNames.insert(TheModuleName).second)
62846289
Lookup.addModuleName(TheModule);
62856290
}
62866291
};

test/IDE/complete_modulename.swift

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// BEGIN MyModule.swift
2+
public struct MyModuleTy {}
3+
public func myModuleFunc() {}
4+
5+
6+
// BEGIN _Hidden.swift
7+
public struct HiddenTy {}
8+
public func hiddenFunc() {}
9+
10+
// BEGIN App.swift
11+
12+
import MyModule
13+
import _Hidden
14+
15+
func test() {
16+
let _ = #^EXPR^#
17+
18+
func test() -> #^TYPE^#
19+
}
20+
21+
// EXPR: Begin completion
22+
// EXPR-NOT: _Concurrency[#Module#]
23+
// EXPR-NOT: SwiftShims[#Module#]
24+
// EXPR-NOT: SwiftOnoneSupport[#Module#]
25+
// EXPR-DAG: Decl[Module]/None: swift_ide_test[#Module#]; name=swift_ide_test
26+
// EXPR-DAG: Decl[Module]/None/IsSystem: Swift[#Module#]; name=Swift
27+
// EXPR-DAG: Decl[Module]/None: MyModule[#Module#]; name=MyModule
28+
// EXPR-DAG: Decl[Struct]/OtherModule[MyModule]: MyModuleTy[#MyModuleTy#]; name=MyModuleTy
29+
// EXPR-DAG: Decl[Struct]/OtherModule[_Hidden]: HiddenTy[#HiddenTy#]; name=HiddenTy
30+
// EXPR-DAG: Decl[FreeFunction]/OtherModule[MyModule]: myModuleFunc()[#Void#]; name=myModuleFunc()
31+
// EXPR-DAG: Decl[FreeFunction]/OtherModule[_Hidden]: hiddenFunc()[#Void#]; name=hiddenFunc()
32+
// EXPR: End completions
33+
34+
// TYPE: Begin completion
35+
// TYPE-NOT: _Concurrency[#Module#]
36+
// TYPE-NOT: SwiftShims[#Module#]
37+
// TYPE-NOT: SwiftOnoneSupport[#Module#]
38+
// TYPE-DAG: Decl[Module]/None: swift_ide_test[#Module#]; name=swift_ide_test
39+
// TYPE-DAG: Decl[Module]/None/IsSystem: Swift[#Module#]; name=Swift
40+
// TYPE-DAG: Decl[Module]/None: MyModule[#Module#]; name=MyModule
41+
// TYPE-DAG: Decl[Struct]/OtherModule[MyModule]: MyModuleTy[#MyModuleTy#]; name=MyModuleTy
42+
// TYPE-DAG: Decl[Struct]/OtherModule[_Hidden]: HiddenTy[#HiddenTy#]; name=HiddenTy
43+
// TYPE: End completions
44+
45+
// RUN: %empty-directory(%t)
46+
// RUN: %{python} %utils/split_file.py -o %t %s
47+
48+
// RUN: %empty-directory(%t/Modules)
49+
// RUN: %target-swift-frontend -emit-module -module-name MyModule -o %t/Modules %t/MyModule.swift
50+
// RUN: %target-swift-frontend -emit-module -module-name _Hidden -o %t/Modules %t/_Hidden.swift
51+
52+
// RUN: %empty-directory(%t/Out)
53+
// RUN: %target-swift-ide-test -batch-code-completion -source-filename %t/App.swift -filecheck %raw-FileCheck -completion-output-dir %t/Out -I %t/Modules

0 commit comments

Comments
 (0)