Skip to content

Commit cc8d496

Browse files
committed
[CodeCompletion] Ensure cached results have 'unknown' type relation
1 parent 566a84d commit cc8d496

File tree

6 files changed

+30
-11
lines changed

6 files changed

+30
-11
lines changed

include/swift/IDE/CodeCompletion.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -585,7 +585,7 @@ class CodeCompletionResult {
585585
CodeCompletionResult(ResultKind Kind, SemanticContextKind SemanticContext,
586586
unsigned NumBytesToErase,
587587
CodeCompletionString *CompletionString,
588-
ExpectedTypeRelation TypeDistance = Unrelated,
588+
ExpectedTypeRelation TypeDistance,
589589
CodeCompletionOperatorKind KnownOperatorKind =
590590
CodeCompletionOperatorKind::None)
591591
: Kind(Kind), KnownOperatorKind(unsigned(KnownOperatorKind)),
@@ -610,7 +610,7 @@ class CodeCompletionResult {
610610
SemanticContextKind SemanticContext,
611611
unsigned NumBytesToErase,
612612
CodeCompletionString *CompletionString,
613-
ExpectedTypeRelation TypeDistance = Unrelated)
613+
ExpectedTypeRelation TypeDistance)
614614
: Kind(Keyword), KnownOperatorKind(0),
615615
SemanticContext(unsigned(SemanticContext)), NotRecommended(false),
616616
NotRecReason(NotRecommendedReason::NoReason),
@@ -689,7 +689,7 @@ class CodeCompletionResult {
689689
AssociatedUSRs(AssociatedUSRs), DocWords(DocWords) {
690690
AssociatedKind = static_cast<unsigned>(DeclKind);
691691
assert(CompletionString);
692-
TypeDistance = ExpectedTypeRelation::Unrelated;
692+
TypeDistance = ExpectedTypeRelation::Unknown;
693693
assert(!isOperator() ||
694694
getOperatorKind() != CodeCompletionOperatorKind::None);
695695
}

lib/IDE/CodeCompletion.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -695,7 +695,7 @@ void CodeCompletionResult::print(raw_ostream &OS) const {
695695
Prefix.append(Twine(NumBytesToErase).str());
696696
Prefix.append("]");
697697
}
698-
switch (ExpectedTypeRelation(TypeDistance)) {
698+
switch (getExpectedTypeRelation()) {
699699
case ExpectedTypeRelation::Invalid:
700700
Prefix.append("/TypeRelation[Invalid]");
701701
break;

lib/IDE/CodeCompletionCache.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ static bool readCachedModule(llvm::MemoryBuffer *in,
255255
} else {
256256
result = new (*V.Sink.Allocator)
257257
CodeCompletionResult(kind, context, numBytesToErase, string,
258-
CodeCompletionResult::Unrelated, opKind);
258+
CodeCompletionResult::NotApplicable, opKind);
259259
}
260260

261261
V.Sink.Results.push_back(result);

test/SourceKit/CodeComplete/complete_typerelation.swift

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,20 @@ func testUnknown() {
3636
// RUN: %sourcekitd-test -req=complete -pos=17:17 %s -- %s > %t.convertible.response
3737
// RUN: diff -u %s.convertible.response %t.convertible.response
3838

39-
// RUN: %sourcekitd-test -req=complete -pos=21:10 %s -- %s | %FileCheck %s --check-prefix=BOOLCONTEXT
40-
// RUN: %sourcekitd-test -req=complete -pos=24:10 %s -- %s | %FileCheck %s --check-prefix=OPTIONALCONTEXT
41-
// RUN: %sourcekitd-test -req=complete -pos=27:10 %s -- %s | %FileCheck %s --check-prefix=VOIDCONTEXT
42-
// RUN: %sourcekitd-test -req=complete -pos=27:10 %s -- %s | %FileCheck %s --check-prefix=UNKNOWNCONTEXT
39+
// RUN: %empty-directory(%t/cache)
40+
// RUN: %sourcekitd-test -req=complete.cache.ondisk -cache-path %t/cache == -req=complete -pos=21:10 %s -- %s | %FileCheck %s --check-prefix=BOOLCONTEXT
41+
// RUN: %sourcekitd-test -req=complete.cache.ondisk -cache-path %t/cache == -req=complete -pos=24:10 %s -- %s | %FileCheck %s --check-prefix=OPTIONALCONTEXT
42+
// RUN: %sourcekitd-test -req=complete.cache.ondisk -cache-path %t/cache == -req=complete -pos=27:10 %s -- %s | %FileCheck %s --check-prefix=VOIDCONTEXT
43+
// RUN: %sourcekitd-test -req=complete.cache.ondisk -cache-path %t/cache == -req=complete -pos=27:10 %s -- %s | %FileCheck %s --check-prefix=UNKNOWNCONTEXT
4344

4445
// BOOLCONTEXT-LABEL: key.name: "false",
4546
// BOOLCONTEXT-NOT: key.name:
4647
// BOOLCONTEXT: key.typename: "Bool",
4748
// BOOLCONTEXT: key.typerelation: source.codecompletion.typerelation.identical,
49+
// BOOLCONTEXT-LABEL: key.name: "Int",
50+
// BOOLCONTEXT-NOT: key.name:
51+
// BOOLCONTEXT: key.typename: "Int",
52+
// BOOLCONTEXT: key.typerelation: source.codecompletion.typerelation.unknown,
4853
// BOOLCONTEXT-LABEL: key.name: "nil",
4954
// BOOLCONTEXT-NOT: key.name:
5055
// BOOLCONTEXT: key.typename: "",
@@ -58,6 +63,10 @@ func testUnknown() {
5863
// OPTIONALCONTEXT-NOT: key.name:
5964
// OPTIONALCONTEXT: key.typename: "Bool",
6065
// OPTIONALCONTEXT: key.typerelation: source.codecompletion.typerelation.unrelated,
66+
// OPTIONALCONTEXT-LABEL: key.name: "Int",
67+
// OPTIONALCONTEXT-NOT: key.name:
68+
// OPTIONALCONTEXT: key.typename: "Int",
69+
// OPTIONALCONTEXT: key.typerelation: source.codecompletion.typerelation.unknown,
6170
// OPTIONALCONTEXT-LABEL: key.name: "nil",
6271
// OPTIONALCONTEXT-NOT: key.name:
6372
// OPTIONALCONTEXT: key.typename: "Int?",
@@ -71,6 +80,10 @@ func testUnknown() {
7180
// VOIDCONTEXT-NOT: key.name:
7281
// VOIDCONTEXT: key.typename: "Bool",
7382
// VOIDCONTEXT: key.typerelation: source.codecompletion.typerelation.unrelated,
83+
// VOIDCONTEXT-LABEL: key.name: "Int",
84+
// VOIDCONTEXT-NOT: key.name:
85+
// VOIDCONTEXT: key.typename: "Int",
86+
// VOIDCONTEXT: key.typerelation: source.codecompletion.typerelation.unknown,
7487
// VOIDCONTEXT-LABEL: key.name: "nil",
7588
// VOIDCONTEXT-NOT: key.name:
7689
// VOIDCONTEXT: key.typename: "",
@@ -84,6 +97,10 @@ func testUnknown() {
8497
// UNKNOWNCONTEXT-NOT: key.name:
8598
// UNKNOWNCONTEXT: key.typename: "Bool",
8699
// UNKNOWNCONTEXT: key.typerelation: source.codecompletion.typerelation.unknown,
100+
// UNKNOWNCONTEXT-LABEL: key.name: "Int",
101+
// UNKNOWNCONTEXT-NOT: key.name:
102+
// UNKNOWNCONTEXT: key.typename: "Int",
103+
// UNKNOWNCONTEXT: key.typerelation: source.codecompletion.typerelation.unknown,
87104
// UNKNOWNCONTEXT-LABEL: key.name: "nil",
88105
// UNKNOWNCONTEXT-NOT: key.name:
89106
// UNKNOWNCONTEXT: key.typename: "",

tools/SourceKit/lib/SwiftLang/CodeCompletionOrganizer.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,8 @@ bool SourceKit::CodeCompletion::addCustomCompletions(
158158
CodeCompletion::SwiftResult swiftResult(
159159
CodeCompletion::SwiftResult::ResultKind::Pattern,
160160
SemanticContextKind::ExpressionSpecific,
161-
/*NumBytesToErase=*/0, completionString);
161+
/*NumBytesToErase=*/0, completionString,
162+
CodeCompletionResult::ExpectedTypeRelation::Unknown);
162163

163164
CompletionBuilder builder(sink, swiftResult);
164165
builder.setCustomKind(customCompletion.Kind);

tools/SourceKit/lib/SwiftLang/SwiftCompletion.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -992,7 +992,8 @@ static void transformAndForwardResults(
992992
CodeCompletion::SwiftResult paren(
993993
CodeCompletion::SwiftResult::ResultKind::BuiltinOperator,
994994
SemanticContextKind::ExpressionSpecific,
995-
exactMatch ? exactMatch->getNumBytesToErase() : 0, completionString);
995+
exactMatch ? exactMatch->getNumBytesToErase() : 0, completionString,
996+
CodeCompletionResult::ExpectedTypeRelation::NotApplicable);
996997

997998
SwiftCompletionInfo info;
998999
std::vector<Completion *> extended =

0 commit comments

Comments
 (0)