Skip to content

Commit 3b3934e

Browse files
committed
[CodeCompletion] Dont mark type mismatching items 'not recommended'
func foo() {} let a: Int = #^HERE^# Previously, we marked 'foo()' as 'NotRecommented' because 'Void' doesn't have any member hence it cannot be 'Int'. But it wass confusing with 'deprecated'. Now that we output 'typerelation' which is 'invalid' in this case. So clients can deprioritize results, or even filter them out. rdar://problem/57726512 (cherry picked from commit e9c438c)
1 parent 7cac40e commit 3b3934e

20 files changed

+164
-137
lines changed

include/swift/IDE/CodeCompletion.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -575,7 +575,6 @@ class CodeCompletionResult {
575575

576576
enum NotRecommendedReason {
577577
Redundant,
578-
TypeMismatch,
579578
Deprecated,
580579
NoReason,
581580
};
@@ -705,17 +704,18 @@ class CodeCompletionResult {
705704
StringRef BriefDocComment,
706705
ArrayRef<StringRef> AssociatedUSRs,
707706
ArrayRef<std::pair<StringRef, StringRef>> DocWords,
707+
ExpectedTypeRelation TypeDistance,
708708
CodeCompletionOperatorKind KnownOperatorKind)
709709
: Kind(ResultKind::Declaration),
710710
KnownOperatorKind(unsigned(KnownOperatorKind)),
711711
SemanticContext(unsigned(SemanticContext)),
712712
NotRecommended(NotRecommended), NotRecReason(NotRecReason),
713713
NumBytesToErase(NumBytesToErase), CompletionString(CompletionString),
714714
ModuleName(ModuleName), BriefDocComment(BriefDocComment),
715-
AssociatedUSRs(AssociatedUSRs), DocWords(DocWords) {
715+
AssociatedUSRs(AssociatedUSRs), DocWords(DocWords),
716+
TypeDistance(TypeDistance) {
716717
AssociatedKind = static_cast<unsigned>(DeclKind);
717718
assert(CompletionString);
718-
TypeDistance = ExpectedTypeRelation::Unknown;
719719
assert(!isOperator() ||
720720
getOperatorKind() != CodeCompletionOperatorKind::None);
721721
}

lib/IDE/CodeCompletion.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1240,11 +1240,6 @@ CodeCompletionResult *CodeCompletionResultBuilder::takeResult() {
12401240
typeRelation =
12411241
calculateMaxTypeRelationForDecl(AssociatedDecl, declTypeContext);
12421242

1243-
if (typeRelation == CodeCompletionResult::Invalid) {
1244-
IsNotRecommended = true;
1245-
NotRecReason = CodeCompletionResult::NotRecommendedReason::TypeMismatch;
1246-
}
1247-
12481243
return new (*Sink.Allocator) CodeCompletionResult(
12491244
SemanticContext, NumBytesToErase, CCS, AssociatedDecl, ModuleName,
12501245
/*NotRecommended=*/IsNotRecommended, NotRecReason,

lib/IDE/CodeCompletionCache.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,8 @@ static bool readCachedModule(llvm::MemoryBuffer *in,
251251
context, numBytesToErase, string, declKind, moduleName,
252252
notRecommended, CodeCompletionResult::NotRecommendedReason::NoReason,
253253
briefDocComment, copyStringArray(*V.Sink.Allocator, assocUSRs),
254-
copyStringPairArray(*V.Sink.Allocator, declKeywords), opKind);
254+
copyStringPairArray(*V.Sink.Allocator, declKeywords),
255+
CodeCompletionResult::Unknown, opKind);
255256
} else {
256257
result = new (*V.Sink.Allocator)
257258
CodeCompletionResult(kind, context, numBytesToErase, string,

test/IDE/complete_assignment.swift

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ func f1() {
7777
// ASSIGN_1-DAG: Decl[InstanceVar]/CurrNominal/TypeRelation[Identical]: I1[#Int#]; name=I1
7878
// ASSIGN_1-DAG: Decl[InstanceVar]/CurrNominal/TypeRelation[Identical]: I2[#Int#]; name=I2
7979
// ASSIGN_1-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Identical]: IntGenerator()[#Int#]; name=IntGenerator()
80-
// ASSIGN_1-DAG: Decl[InstanceMethod]/CurrNominal/NotRecommended/TypeRelation[Invalid]: VoidGen()[#Void#]; name=VoidGen()
80+
// ASSIGN_1-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: VoidGen()[#Void#]; name=VoidGen()
8181
// ASSIGN_1-DAG: Decl[InstanceVar]/CurrNominal: S1[#String#]; name=S1
8282

8383
func f2() {
@@ -104,7 +104,7 @@ func f2() {
104104
// ASSIGN_3-DAG: Decl[InstanceVar]/CurrNominal/TypeRelation[Identical]: S1[#String#]; name=S1
105105
// ASSIGN_3-DAG: Decl[InstanceVar]/CurrNominal/TypeRelation[Identical]: S2[#String#]; name=S2
106106
// ASSIGN_3-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Identical]: StringGenerator()[#String#]; name=StringGenerator()
107-
// ASSIGN_3-DAG: Decl[InstanceMethod]/CurrNominal/NotRecommended/TypeRelation[Invalid]: VoidGen()[#Void#]; name=VoidGen()
107+
// ASSIGN_3-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: VoidGen()[#Void#]; name=VoidGen()
108108
// ASSIGN_3-DAG: Decl[InstanceVar]/CurrNominal: I1[#Int#]; name=I1
109109

110110
func f4() {
@@ -119,7 +119,7 @@ func f2() {
119119
// ASSIGN_4-DAG: Decl[InstanceVar]/CurrNominal/TypeRelation[Identical]: SO1[#String?#]; name=SO1
120120
// ASSIGN_4-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Convertible]: StringGenerator()[#String#]; name=StringGenerator()
121121
// ASSIGN_4-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Identical]: StringOpGenerator()[#String?#]; name=StringOpGenerator()
122-
// ASSIGN_4-DAG: Decl[InstanceMethod]/CurrNominal/NotRecommended/TypeRelation[Invalid]: VoidGen()[#Void#]; name=VoidGen()
122+
// ASSIGN_4-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: VoidGen()[#Void#]; name=VoidGen()
123123
// ASSIGN_4-DAG: Decl[InstanceVar]/CurrNominal: I1[#Int#]; name=I1
124124

125125
func f5() {
@@ -149,7 +149,7 @@ func f2() {
149149
// ASSIGN_7-DAG: Decl[InstanceMethod]/CurrNominal: IntOpGen()[#Int?#]
150150
// ASSIGN_7-DAG: Decl[InstanceMethod]/CurrNominal: D1Gen()[#D1#]
151151
// ASSIGN_7-DAG: Decl[InstanceMethod]/CurrNominal: D2Gen()[#D2#]
152-
// ASSIGN_7-DAG: Decl[InstanceMethod]/CurrNominal/NotRecommended/TypeRelation[Invalid]: VoidGen()[#Void#]
152+
// ASSIGN_7-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: VoidGen()[#Void#]
153153
// ASSIGN_7-DAG: Decl[InstanceVar]/CurrNominal: InternalC2[#C2#]
154154

155155
func f8 (C : C2) {
@@ -162,7 +162,7 @@ func f2() {
162162
// ASSIGN_8-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Identical]: IntOpGen()[#Int?#]
163163
// ASSIGN_8-DAG: Decl[InstanceMethod]/CurrNominal: D1Gen()[#D1#]
164164
// ASSIGN_8-DAG: Decl[InstanceMethod]/CurrNominal: D2Gen()[#D2#]
165-
// ASSIGN_8-DAG: Decl[InstanceMethod]/CurrNominal/NotRecommended/TypeRelation[Invalid]: VoidGen()[#Void#]
165+
// ASSIGN_8-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: VoidGen()[#Void#]
166166
// ASSIGN_8-DAG: Decl[InstanceVar]/CurrNominal: InternalC2[#C2#]
167167

168168
func f9 (C : C2) {
@@ -175,7 +175,7 @@ func f2() {
175175
// ASSIGN_9-DAG: Decl[InstanceMethod]/CurrNominal: IntOpGen()[#Int?#]
176176
// ASSIGN_9-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Identical]: D1Gen()[#D1#]
177177
// ASSIGN_9-DAG: Decl[InstanceMethod]/CurrNominal: D2Gen()[#D2#]
178-
// ASSIGN_9-DAG: Decl[InstanceMethod]/CurrNominal/NotRecommended/TypeRelation[Invalid]: VoidGen()[#Void#]
178+
// ASSIGN_9-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: VoidGen()[#Void#]
179179
// ASSIGN_9-DAG: Decl[InstanceVar]/CurrNominal: InternalC2[#C2#]
180180

181181
func f10 (C : C2) {
@@ -188,7 +188,7 @@ func f2() {
188188
// ASSIGN_10-DAG: Decl[InstanceMethod]/CurrNominal: IntOpGen()[#Int?#]
189189
// ASSIGN_10-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Identical]: D1Gen()[#D1#]
190190
// ASSIGN_10-DAG: Decl[InstanceMethod]/CurrNominal: D2Gen()[#D2#]
191-
// ASSIGN_10-DAG: Decl[InstanceMethod]/CurrNominal/NotRecommended/TypeRelation[Invalid]: VoidGen()[#Void#]
191+
// ASSIGN_10-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: VoidGen()[#Void#]
192192
// ASSIGN_10-DAG: Decl[InstanceVar]/CurrNominal: InternalC2[#C2#]
193193

194194
func f11(C: C2) {
@@ -213,7 +213,7 @@ func f2() {
213213
// ASSIGN_12-DAG: Decl[InstanceMethod]/CurrNominal: IntOpGen()[#Int?#]
214214
// ASSIGN_12-DAG: Decl[InstanceMethod]/CurrNominal: D1Gen()[#D1#]
215215
// ASSIGN_12-DAG: Decl[InstanceMethod]/CurrNominal: D2Gen()[#D2#]
216-
// ASSIGN_12-DAG: Decl[InstanceMethod]/CurrNominal/NotRecommended/TypeRelation[Invalid]: VoidGen()[#Void#]
216+
// ASSIGN_12-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: VoidGen()[#Void#]
217217
// ASSIGN_12-DAG: Decl[InstanceVar]/CurrNominal: InternalC2[#C2#]
218218

219219
func f13() {
@@ -223,7 +223,7 @@ func f2() {
223223
// ASSIGN_13-DAG: Decl[InstanceVar]/CurrNominal/TypeRelation[Identical]: I1[#Int#]; name=I1
224224
// ASSIGN_13-DAG: Decl[InstanceVar]/CurrNominal/TypeRelation[Identical]: I2[#Int#]; name=I2
225225
// ASSIGN_13-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Identical]: IntGenerator()[#Int#]; name=IntGenerator()
226-
// ASSIGN_13-DAG: Decl[InstanceMethod]/CurrNominal/NotRecommended/TypeRelation[Invalid]: VoidGen()[#Void#]; name=VoidGen()
226+
// ASSIGN_13-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: VoidGen()[#Void#]; name=VoidGen()
227227
// ASSIGN_13-DAG: Decl[InstanceVar]/CurrNominal: S1[#String#]; name=S1
228228

229229
func f14() {
@@ -252,7 +252,7 @@ func f2() {
252252
// ASSIGN_16-DAG: Decl[InstanceMethod]/CurrNominal: IntOpGen()[#Int?#]
253253
// ASSIGN_16-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Identical]: D1Gen()[#D1#]
254254
// ASSIGN_16-DAG: Decl[InstanceMethod]/CurrNominal: D2Gen()[#D2#]
255-
// ASSIGN_16-DAG: Decl[InstanceMethod]/CurrNominal/NotRecommended/TypeRelation[Invalid]: VoidGen()[#Void#]
255+
// ASSIGN_16-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: VoidGen()[#Void#]
256256
// ASSIGN_16-DAG: Decl[InstanceVar]/CurrNominal: InternalC2[#C2#]
257257

258258
func f17() {
@@ -264,7 +264,7 @@ func f2() {
264264
// ASSIGN_17-DAG: Decl[InstanceMethod]/CurrNominal: IntOpGen()[#Int?#]
265265
// ASSIGN_17-DAG: Decl[InstanceMethod]/CurrNominal: D1Gen()[#D1#]
266266
// ASSIGN_17-DAG: Decl[InstanceMethod]/CurrNominal: D2Gen()[#D2#]
267-
// ASSIGN_17-DAG: Decl[InstanceMethod]/CurrNominal/NotRecommended/TypeRelation[Invalid]: VoidGen()[#Void#]
267+
// ASSIGN_17-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: VoidGen()[#Void#]
268268
// ASSIGN_17-DAG: Decl[InstanceVar]/CurrNominal: InternalC2[#C2#]
269269

270270
func f18 (C : C2) {
@@ -276,7 +276,7 @@ func f2() {
276276
// ASSIGN_18-DAG: Decl[InstanceMethod]/CurrNominal: IntOpGen()[#Int?#]
277277
// ASSIGN_18-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Identical]: D1Gen()[#D1#]
278278
// ASSIGN_18-DAG: Decl[InstanceMethod]/CurrNominal: D2Gen()[#D2#]
279-
// ASSIGN_18-DAG: Decl[InstanceMethod]/CurrNominal/NotRecommended/TypeRelation[Invalid]: VoidGen()[#Void#]
279+
// ASSIGN_18-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: VoidGen()[#Void#]
280280
// ASSIGN_18-DAG: Decl[InstanceVar]/CurrNominal: InternalC2[#C2#]
281281
}
282282

test/IDE/complete_at_top_level.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,7 @@ _ = "" + "\(#^STRING_INTERP_4^#)" + ""
472472
// STRING_INTERP: Begin completions
473473
// STRING_INTERP-DAG: Decl[InstanceMethod]/CurrNominal: ['(']{#(value): T#}[')'][#Void#];
474474
// STRING_INTERP-DAG: Decl[Struct]/CurrModule: FooStruct[#FooStruct#];
475-
// STRING_INTERP-DAG: Decl[FreeFunction]/CurrModule/NotRecommended/TypeRelation[Invalid]: fooFunc1()[#Void#];
475+
// STRING_INTERP-DAG: Decl[FreeFunction]/CurrModule/TypeRelation[Invalid]: fooFunc1()[#Void#];
476476
// STRING_INTERP-DAG: Decl[FreeFunction]/CurrModule: optStr()[#String?#];
477477
// STRING_INTERP-DAG: Decl[GlobalVar]/Local: fooObject[#FooStruct#];
478478
// STRING_INTERP: End completions

0 commit comments

Comments
 (0)