Skip to content

Commit d065957

Browse files
committed
[CodeCompletion] Don't include symbols starting with '$_'
rdar://problem/50073762
1 parent 32a0b2e commit d065957

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

lib/AST/Decl.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2758,6 +2758,11 @@ bool ValueDecl::shouldHideFromEditor() const {
27582758
if (getBaseName().isEditorPlaceholder())
27592759
return true;
27602760

2761+
// '$_' names are reserved by compiler internal.
2762+
if (!getBaseName().isSpecial() &&
2763+
getBaseName().getIdentifier().str().startswith("$_"))
2764+
return true;
2765+
27612766
return false;
27622767
}
27632768

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CONTEXT | %FileCheck %s -check-prefix=CONTEXT
2+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CONTEXT_VARNAME | %FileCheck %s -check-prefix=CONTEXT_VARNAME
3+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CONTEXT_DOLLAR_VARNAME | %FileCheck %s -check-prefix=CONTEXT_DOLLAR_VARNAME
4+
5+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=SELF | %FileCheck %s -check-prefix=CONTEXT
6+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=SELF_VARNAME | %FileCheck %s -check-prefix=CONTEXT_VARNAME
7+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=SELF_DOLLAR_VARNAME | %FileCheck %s -check-prefix=CONTEXT_DOLLAR_VARNAME
8+
9+
@_propertyWrapper
10+
struct Lazzzy<T> {
11+
var value: T
12+
13+
init(initialValue: T) { value = initialValue }
14+
func delegateOperation() -> Int {}
15+
}
16+
17+
struct MyMember {
18+
var x: Int
19+
var y: Int
20+
static var zero = MyMember(x: 0, y: 0)
21+
}
22+
23+
class MyClass {
24+
@Lazzzy<MyMember>
25+
var foo = .zero
26+
27+
func test() {
28+
let _ = #^CONTEXT^#
29+
// CONTEXT: Begin completions
30+
// CONTEXT-DAG: Decl[InstanceVar]/CurrNominal: foo[#MyMember#];
31+
// CONTEXT-DAG: Decl[InstanceVar]/CurrNominal: $foo[#Lazzzy<MyMember>#];
32+
// CONTEXT-NOT: $_
33+
// CONTEXT: End completions
34+
35+
let _ = foo.#^CONTEXT_VARNAME^#
36+
// CONTEXT_VARNAME: Begin completions, 3 items
37+
// CONTEXT_VARNAME-DAG: Keyword[self]/CurrNominal: self[#MyMember#]; name=self
38+
// CONTEXT_VARNAME-DAG: Decl[InstanceVar]/CurrNominal: x[#Int#]; name=x
39+
// CONTEXT_VARNAME-DAG: Decl[InstanceVar]/CurrNominal: y[#Int#]; name=y
40+
// CONTEXT_VARNAME-NOT: $_
41+
// CONTEXT_VARNAME-DAG: End completions
42+
43+
let _ = $foo.#^CONTEXT_DOLLAR_VARNAME^#
44+
// CONTEXT_DOLLAR_VARNAME: Begin completions, 3 items
45+
// CONTEXT_DOLLAR_VARNAME-DAG: Keyword[self]/CurrNominal: self[#Lazzzy<MyMember>#]; name=self
46+
// CONTEXT_DOLLAR_VARNAME-DAG: Decl[InstanceVar]/CurrNominal: value[#MyMember#]; name=value
47+
// CONTEXT_DOLLAR_VARNAME-DAG: Decl[InstanceMethod]/CurrNominal: delegateOperation()[#Int#]; name=delegateOperation()
48+
// CONTEXT_DOLLAR_VARNAME-NOT: $_
49+
// CONTEXT_DOLLAR_VARNAME: End completions
50+
51+
let _ = self.#^SELF^#
52+
// Same as CONTEXT.
53+
54+
let _ = self.foo.#^SELF_VARNAME^#
55+
// Same as CONTEXT_VARNAME.
56+
57+
let _ = self.$foo.#^SELF_DOLLAR_VARNAME^#
58+
// Same as CONTEXT_DOLLAR_VARNAME.
59+
}
60+
}

0 commit comments

Comments
 (0)