Skip to content

Commit b2a742c

Browse files
authored
Merge pull request #31307 from rintaro/ide-completion-rdar62121221
[CodeCompletion] Prioritize type matching overload for unresovled member
2 parents a08f197 + e947512 commit b2a742c

13 files changed

+188
-80
lines changed

lib/IDE/CodeCompletion.cpp

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1872,6 +1872,10 @@ class CompletionLookup final : public swift::VisibleDeclConsumer {
18721872
expectedTypeContext.possibleTypes.push_back(T);
18731873
}
18741874

1875+
void setIdealExpectedType(Type Ty) {
1876+
expectedTypeContext.idealType = Ty;
1877+
}
1878+
18751879
CodeCompletionContext::TypeContextKind typeContextKind() const {
18761880
if (expectedTypeContext.empty()) {
18771881
return CodeCompletionContext::TypeContextKind::None;
@@ -2011,12 +2015,6 @@ class CompletionLookup final : public swift::VisibleDeclConsumer {
20112015
if (ForcedSemanticContext)
20122016
return *ForcedSemanticContext;
20132017

2014-
if (IsUnresolvedMember) {
2015-
if (isa<EnumElementDecl>(D)) {
2016-
return SemanticContextKind::ExpressionSpecific;
2017-
}
2018-
}
2019-
20202018
switch (Reason) {
20212019
case DeclVisibilityKind::LocalVariable:
20222020
case DeclVisibilityKind::FunctionParameter:
@@ -2080,6 +2078,23 @@ class CompletionLookup final : public swift::VisibleDeclConsumer {
20802078
llvm_unreachable("unhandled kind");
20812079
}
20822080

2081+
bool isUnresolvedMemberIdealType(Type Ty) {
2082+
assert(Ty);
2083+
if (!IsUnresolvedMember)
2084+
return false;
2085+
Type idealTy = expectedTypeContext.idealType;
2086+
if (!idealTy)
2087+
return false;
2088+
/// Consider optional object type is the ideal.
2089+
/// For exmaple:
2090+
/// enum MyEnum { case foo, bar }
2091+
/// func foo(_: MyEnum?)
2092+
/// fooo(.<HERE>)
2093+
/// Prefer '.foo' and '.bar' over '.some' and '.none'.
2094+
idealTy = idealTy->lookThroughAllOptionalTypes();
2095+
return idealTy->isEqual(Ty);
2096+
}
2097+
20832098
void addValueBaseName(CodeCompletionResultBuilder &Builder,
20842099
DeclBaseName Name) {
20852100
auto NameStr = Name.userFacingName();
@@ -2406,6 +2421,9 @@ class CompletionLookup final : public swift::VisibleDeclConsumer {
24062421
DynamicOrOptional);
24072422
else
24082423
addTypeAnnotation(Builder, VarType);
2424+
2425+
if (isUnresolvedMemberIdealType(VarType))
2426+
Builder.setSemanticContext(SemanticContextKind::ExpressionSpecific);
24092427
}
24102428

24112429
static bool hasInterestingDefaultValues(const AbstractFunctionDecl *func) {
@@ -2862,6 +2880,9 @@ class CompletionLookup final : public swift::VisibleDeclConsumer {
28622880
}
28632881
}
28642882
Builder.addTypeAnnotation(TypeStr);
2883+
2884+
if (isUnresolvedMemberIdealType(ResultType))
2885+
Builder.setSemanticContext(SemanticContextKind::ExpressionSpecific);
28652886
};
28662887

28672888
if (!AFT || IsImplicitlyCurriedInstanceMethod) {
@@ -3148,6 +3169,9 @@ class CompletionLookup final : public swift::VisibleDeclConsumer {
31483169
}
31493170

31503171
addTypeAnnotation(Builder, EnumType);
3172+
3173+
if (isUnresolvedMemberIdealType(EnumType))
3174+
Builder.setSemanticContext(SemanticContextKind::ExpressionSpecific);
31513175
}
31523176

31533177
void addKeyword(StringRef Name, Type TypeAnnotation = Type(),
@@ -4117,7 +4141,7 @@ class CompletionLookup final : public swift::VisibleDeclConsumer {
41174141
auto &SM = CurrDeclContext->getASTContext().SourceMgr;
41184142
if (DotLoc.isValid())
41194143
bytesToErase = SM.getByteDistance(DotLoc, SM.getCodeCompletionLoc());
4120-
addKeyword("nil", T, SemanticContextKind::ExpressionSpecific,
4144+
addKeyword("nil", T, SemanticContextKind::None,
41214145
CodeCompletionKeywordKind::kw_nil, bytesToErase);
41224146
}
41234147
getUnresolvedMemberCompletions(T);
@@ -5755,6 +5779,7 @@ void CodeCompletionCallbacksImpl::doneParsing() {
57555779
ExprContextInfo ContextInfo(CurDeclContext, CodeCompleteTokenExpr);
57565780
Lookup.setExpectedTypes(ContextInfo.getPossibleTypes(),
57575781
ContextInfo.isSingleExpressionBody());
5782+
Lookup.setIdealExpectedType(CodeCompleteTokenExpr->getType());
57585783
Lookup.getUnresolvedMemberCompletions(ContextInfo.getPossibleTypes());
57595784
DoPostfixExprBeginning();
57605785
break;
@@ -5810,6 +5835,7 @@ void CodeCompletionCallbacksImpl::doneParsing() {
58105835
ExprContextInfo ContextInfo(CurDeclContext, CodeCompleteTokenExpr);
58115836
Lookup.setExpectedTypes(ContextInfo.getPossibleTypes(),
58125837
ContextInfo.isSingleExpressionBody());
5838+
Lookup.setIdealExpectedType(CodeCompleteTokenExpr->getType());
58135839
Lookup.getUnresolvedMemberCompletions(ContextInfo.getPossibleTypes());
58145840
break;
58155841
}

lib/IDE/CodeCompletionResultBuilder.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ struct ExpectedTypeContext {
4040
/// Possible types of the code completion expression.
4141
llvm::SmallVector<Type, 4> possibleTypes;
4242

43+
/// Pre typechecked type of the expression at the completion position.
44+
Type idealType;
45+
4346
/// Whether the `ExpectedTypes` comes from a single-expression body, e.g.
4447
/// `foo({ here })`.
4548
///
@@ -136,6 +139,10 @@ class CodeCompletionResultBuilder {
136139
NotRecReason = Reason;
137140
}
138141

142+
void setSemanticContext(SemanticContextKind Kind) {
143+
SemanticContext = Kind;
144+
}
145+
139146
void
140147
setExpectedTypeRelation(CodeCompletionResult::ExpectedTypeRelation relation) {
141148
ExpectedTypeRelation = relation;

test/IDE/complete_annotation.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ func testImplicitMember() -> MyStruct {
9797
}
9898
// EXPR_IMPLICITMEMBER: Begin completions, 3 items
9999
// EXPR_IMPLICITMEMBER-DAG: Decl[Constructor]/CurrNominal/TypeRelation[Identical]: <name>init</name>(<callarg><callarg.label>x</callarg.label>: <callarg.type><typeid.sys>Int</typeid.sys></callarg.type></callarg>); name=init(x: Int)
100-
// EXPR_IMPLICITMEMBER-DAG: Decl[StaticVar]/CurrNominal/TypeRelation[Identical]: <name>instance</name>; name=instance
101-
// EXPR_IMPLICITMEMBER-DAG: Decl[StaticMethod]/CurrNominal/TypeRelation[Identical]: <name>create</name>(<callarg><callarg.label>x</callarg.label>: <callarg.type><typeid.sys>Int</typeid.sys></callarg.type></callarg>); name=create(x: Int)
100+
// EXPR_IMPLICITMEMBER-DAG: Decl[StaticVar]/ExprSpecific/TypeRelation[Identical]: <name>instance</name>; name=instance
101+
// EXPR_IMPLICITMEMBER-DAG: Decl[StaticMethod]/ExprSpecific/TypeRelation[Identical]: <name>create</name>(<callarg><callarg.label>x</callarg.label>: <callarg.type><typeid.sys>Int</typeid.sys></callarg.type></callarg>); name=create(x: Int)
102102
// EXPR_IMPLICITMEMBER: End completions
103103

104104
func testArgument() -> MyStruct {

test/IDE/complete_call_arg.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -593,8 +593,8 @@ func testSubscript(obj: HasSubscript, intValue: Int, strValue: String) {
593593
// SUBSCRIPT_1_DOT: Begin completions
594594
// SUBSCRIPT_1_DOT-NOT: i1
595595
// SUBSCRIPT_1_DOT-NOT: s1
596-
// SUBSCRIPT_1_DOT-DAG: Decl[StaticVar]/Super: max[#Int#]; name=max
597-
// SUBSCRIPT_1_DOT-DAG: Decl[StaticVar]/Super: min[#Int#]; name=min
596+
// SUBSCRIPT_1_DOT-DAG: Decl[StaticVar]/ExprSpecific: max[#Int#]; name=max
597+
// SUBSCRIPT_1_DOT-DAG: Decl[StaticVar]/ExprSpecific: min[#Int#]; name=min
598598

599599
let _ = obj[42, #^SUBSCRIPT_2^#
600600
// SUBSCRIPT_2: Begin completions, 1 items

test/IDE/complete_call_as_function.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ func testCallAsFunctionOverloaded(fn: Functor) {
114114
//OVERLOADED_ARG2_VALUE: Begin completions, 4 items
115115
//OVERLOADED_ARG2_VALUE-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: up[#Functor.Vertical#];
116116
//OVERLOADED_ARG2_VALUE-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: down[#Functor.Vertical#];
117-
//OVERLOADED_ARG2_VALUE-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: left[#Functor.Horizontal#];
118-
//OVERLOADED_ARG2_VALUE-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: right[#Functor.Horizontal#];
117+
//OVERLOADED_ARG2_VALUE-DAG: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: left[#Functor.Horizontal#];
118+
//OVERLOADED_ARG2_VALUE-DAG: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: right[#Functor.Horizontal#];
119119
//OVERLOADED_ARG2_VALUE: End completions
120120
}

test/IDE/complete_constrained.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,8 @@ struct Vegetarian: EatsFruit, EatsVegetables { }
118118
func testVegetarian(chef: Chef<Vegetarian>) {
119119
chef.cook(.#^CONDITIONAL_OVERLOAD_ARG^#)
120120
// CONDITIONAL_OVERLOAD_ARG: Begin completions, 2 items
121-
// CONDITIONAL_OVERLOAD_ARG-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: apple[#Fruit#]; name=apple
122-
// CONDITIONAL_OVERLOAD_ARG-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: broccoli[#Vegetable#]; name=broccoli
121+
// CONDITIONAL_OVERLOAD_ARG-DAG: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: apple[#Fruit#]; name=apple
122+
// CONDITIONAL_OVERLOAD_ARG-DAG: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: broccoli[#Vegetable#]; name=broccoli
123123
// CONDITIONAL_OVERLOAD_ARG: End completions
124124

125125
var chefMeta: Chef<Vegetarian>.Type = Chef<Vegetarian>.self

test/IDE/complete_enum_elements.swift

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ enum FooEnum: CaseIterable {
9191
// FOO_ENUM_TYPE_CONTEXT: Begin completions
9292
// FOO_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: .Foo1[#FooEnum#]{{; name=.+$}}
9393
// FOO_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: .Foo2[#FooEnum#]{{; name=.+$}}
94-
// FOO_ENUM_TYPE_CONTEXT-DAG: Decl[StaticVar]/CurrNominal/TypeRelation[Identical]: .alias1[#FooEnum#]; name=alias1
94+
// FOO_ENUM_TYPE_CONTEXT-DAG: Decl[StaticVar]/ExprSpecific/TypeRelation[Identical]: .alias1[#FooEnum#]; name=alias1
9595
// FOO_ENUM_TYPE_CONTEXT: End completions
9696

9797
// FOO_ENUM_NO_DOT: Begin completions
@@ -130,7 +130,7 @@ enum FooEnum: CaseIterable {
130130
// FOO_ENUM_DOT_ELEMENTS: Begin completions, 3 items
131131
// FOO_ENUM_DOT_ELEMENTS-NEXT: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: Foo1[#FooEnum#]{{; name=.+$}}
132132
// FOO_ENUM_DOT_ELEMENTS-NEXT: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: Foo2[#FooEnum#]{{; name=.+$}}
133-
// FOO_ENUM_DOT_ELEMENTS-NEXT: Decl[StaticVar]/CurrNominal/TypeRelation[Identical]: alias1[#FooEnum#]; name=alias1
133+
// FOO_ENUM_DOT_ELEMENTS-NEXT: Decl[StaticVar]/ExprSpecific/TypeRelation[Identical]: alias1[#FooEnum#]; name=alias1
134134
// FOO_ENUM_DOT_ELEMENTS-NEXT: End completions
135135

136136
enum BarEnum {
@@ -154,18 +154,18 @@ enum BarEnum {
154154
}
155155

156156
// BAR_ENUM_TYPE_CONTEXT: Begin completions
157-
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: .Bar1[#BarEnum#]{{; name=.+$}}
158-
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: .Bar2()[#BarEnum#]{{; name=.+$}}
159-
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: .Bar3({#Int#})[#BarEnum#]{{; name=.+$}}
160-
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: .Bar4({#a: Int#}, {#b: Float#})[#BarEnum#]{{; name=.+$}}
161-
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: .Bar5({#a: Int#}, {#(Float)#})[#BarEnum#]{{; name=.+$}}
162-
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: .Bar6({#a: Int#}, {#b: (Float)#})[#BarEnum#]{{; name=.+$}}
163-
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: .Bar7({#a: Int#}, {#(b: Float, c: Double)#})[#BarEnum#]{{; name=.+$}}
164-
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: .Bar8({#a: Int#}, {#b: (c: Float, d: Double)#})[#BarEnum#]{{; name=.+$}}
165-
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: .Bar9({#Int#})[#BarEnum#]{{; name=.+$}}
166-
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: .Bar10({#Int#}, {#Float#})[#BarEnum#]{{; name=.+$}}
167-
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: .Bar11({#Int#}, {#(Float)#})[#BarEnum#]{{; name=.+$}}
168-
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: .Bar12({#Int#}, {#(Float, Double)#})[#BarEnum#]{{; name=.+$}}
157+
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: .Bar1[#BarEnum#]{{; name=.+$}}
158+
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: .Bar2()[#BarEnum#]{{; name=.+$}}
159+
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: .Bar3({#Int#})[#BarEnum#]{{; name=.+$}}
160+
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: .Bar4({#a: Int#}, {#b: Float#})[#BarEnum#]{{; name=.+$}}
161+
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: .Bar5({#a: Int#}, {#(Float)#})[#BarEnum#]{{; name=.+$}}
162+
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: .Bar6({#a: Int#}, {#b: (Float)#})[#BarEnum#]{{; name=.+$}}
163+
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: .Bar7({#a: Int#}, {#(b: Float, c: Double)#})[#BarEnum#]{{; name=.+$}}
164+
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: .Bar8({#a: Int#}, {#b: (c: Float, d: Double)#})[#BarEnum#]{{; name=.+$}}
165+
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: .Bar9({#Int#})[#BarEnum#]{{; name=.+$}}
166+
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: .Bar10({#Int#}, {#Float#})[#BarEnum#]{{; name=.+$}}
167+
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: .Bar11({#Int#}, {#(Float)#})[#BarEnum#]{{; name=.+$}}
168+
// BAR_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: .Bar12({#Int#}, {#(Float, Double)#})[#BarEnum#]{{; name=.+$}}
169169
// BAR_ENUM_TYPE_CONTEXT: End completions
170170

171171
// BAR_ENUM_NO_DOT: Begin completions
@@ -220,8 +220,8 @@ enum BazEnum<T> {
220220
}
221221

222222
// BAZ_ENUM_TYPE_CONTEXT: Begin completions
223-
// BAZ_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/ExprSpecific: .Baz1[#BazEnum<Int>#]{{; name=.+$}}
224-
// BAZ_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/ExprSpecific: .Baz2({#Int#})[#BazEnum<Int>#]{{; name=.+$}}
223+
// BAZ_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/CurrNominal: .Baz1[#BazEnum<Int>#]{{; name=.+$}}
224+
// BAZ_ENUM_TYPE_CONTEXT-DAG: Decl[EnumElement]/CurrNominal: .Baz2({#Int#})[#BazEnum<Int>#]{{; name=.+$}}
225225
// BAZ_ENUM_TYPE_CONTEXT: End completions
226226

227227
// BAZ_INT_ENUM_NO_DOT: Begin completions, 8 items

test/IDE/complete_property_delegate_attribute.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ struct TestStruct {
3535
@MyStruct(arg1: .#^ARG_MyEnum_DOT^#
3636
var test3
3737
// ARG_MyEnum_DOT: Begin completions, 2 items
38-
// ARG_MyEnum_DOT-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: east[#MyEnum#]; name=east
39-
// ARG_MyEnum_DOT-DAG: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: west[#MyEnum#]; name=west
38+
// ARG_MyEnum_DOT-DAG: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: east[#MyEnum#]; name=east
39+
// ARG_MyEnum_DOT-DAG: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: west[#MyEnum#]; name=west
4040
// ARG_MyEnum_DOT: End completions
4141

4242
@MyStruct(arg1: MyEnum.#^ARG_MyEnum_NOBINDING^#)

test/IDE/complete_single_expression_return.swift

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TestSingleExprClosureRetUnresolved | %FileCheck %s -check-prefix=TestSingleExprClosureRetUnresolved
44
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TestSingleExprClosure | %FileCheck %s -check-prefix=TestSingleExprClosure
55
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TestSingleExprClosureVoid | %FileCheck %s -check-prefix=TestSingleExprClosureVoid
6-
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TestSingleExprClosureUnresolved | %FileCheck %s -check-prefix=TestSingleExprClosureRetUnresolved
6+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TestSingleExprClosureUnresolved | %FileCheck %s -check-prefix=TestSingleExprClosureUnresolved
77
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TestSingleExprClosureCall | %FileCheck %s -check-prefix=TestSingleExprClosure
88
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TestSingleExprClosureGlobal | %FileCheck %s -check-prefix=TestSingleExprClosureGlobal
99
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TestNonSingleExprClosureGlobal | %FileCheck %s -check-prefix=TestNonSingleExprClosureGlobal
@@ -151,6 +151,11 @@ struct TestSingleExprClosureUnresolved {
151151
}()
152152
}
153153
}
154+
// TestSingleExprClosureUnresolved: Begin completions
155+
// TestSingleExprClosureUnresolved-NOT: notMine
156+
// TestSingleExprClosureUnresolved: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: myEnum[#MyEnum#];
157+
// TestSingleExprClosureUnresolved-NOT: notMine
158+
// TestSingleExprClosureUnresolved: End completions
154159

155160
struct TestSingleExprClosureCall {
156161
func void() -> Void {}
@@ -263,7 +268,7 @@ struct TestSingleExprFuncUnresolved {
263268

264269
// TestSingleExprFuncUnresolved: Begin completions
265270
// TestSingleExprFuncUnresolved-NOT: notMine
266-
// TestSingleExprFuncUnresolved: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: myEnum[#MyEnum#];
271+
// TestSingleExprFuncUnresolved: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: myEnum[#MyEnum#];
267272
// TestSingleExprFuncUnresolved-NOT: notMine
268273
// TestSingleExprFuncUnresolved: End completions
269274
}
@@ -373,7 +378,7 @@ struct TestSingleExprAccessorUnresolved {
373378

374379
// TestSingleExprAccessorUnresolved: Begin completions
375380
// TestSingleExprAccessorUnresolved-NOT: notMine
376-
// TestSingleExprAccessorUnresolved: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: myEnum[#MyEnum#];
381+
// TestSingleExprAccessorUnresolved: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: myEnum[#MyEnum#];
377382
// TestSingleExprAccessorUnresolved-NOT: notMine
378383
// TestSingleExprAccessorUnresolved: End completions
379384
}
@@ -525,7 +530,7 @@ struct TestSingleExprSubscriptUnresolved {
525530

526531
// TestSingleExprSubscriptUnresolved: Begin completions
527532
// TestSingleExprSubscriptUnresolved-NOT: notMine
528-
// TestSingleExprSubscriptUnresolved: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: myEnum[#MyEnum#];
533+
// TestSingleExprSubscriptUnresolved: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: myEnum[#MyEnum#];
529534
// TestSingleExprSubscriptUnresolved-NOT: notMine
530535
// TestSingleExprSubscriptUnresolved: End completions
531536
}
@@ -630,7 +635,7 @@ enum TopLevelEnum {
630635
case foo
631636
}
632637

633-
// TopLevelEnum: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: foo[#TopLevelEnum#];
638+
// TopLevelEnum: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: foo[#TopLevelEnum#];
634639

635640
var testAccessorUnresolvedTopLevel: TopLevelEnum {
636641
.#^testAccessorUnresolvedTopLevel^#

test/IDE/complete_stmt_controlling_expr.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,7 @@ func testSwitchCaseWhereExprIJ1(_ fooObject: FooStruct) {
519519
enum A { case aaa }
520520
enum B { case bbb }
521521
// UNRESOLVED_B-NOT: aaa
522-
// UNRESOLVED_B: Decl[EnumElement]/ExprSpecific/TypeRelation[Identical]: bbb[#B#]; name=bbb
522+
// UNRESOLVED_B: Decl[EnumElement]/CurrNominal/TypeRelation[Identical]: bbb[#B#]; name=bbb
523523
// UNRESOLVED_B-NOT: aaa
524524

525525
struct AA {

0 commit comments

Comments
 (0)