@@ -695,7 +695,7 @@ void CodeCompletionResult::print(raw_ostream &OS) const {
695
695
Prefix.append (Twine (NumBytesToErase).str ());
696
696
Prefix.append (" ]" );
697
697
}
698
- switch (TypeDistance ) {
698
+ switch (getExpectedTypeRelation () ) {
699
699
case ExpectedTypeRelation::Invalid:
700
700
Prefix.append (" /TypeRelation[Invalid]" );
701
701
break ;
@@ -705,6 +705,8 @@ void CodeCompletionResult::print(raw_ostream &OS) const {
705
705
case ExpectedTypeRelation::Convertible:
706
706
Prefix.append (" /TypeRelation[Convertible]" );
707
707
break ;
708
+ case ExpectedTypeRelation::NotApplicable:
709
+ case ExpectedTypeRelation::Unknown:
708
710
case ExpectedTypeRelation::Unrelated:
709
711
break ;
710
712
}
@@ -903,6 +905,9 @@ static CodeCompletionResult::ExpectedTypeRelation
903
905
calculateMaxTypeRelationForDecl (
904
906
const Decl *D, const ExpectedTypeContext &typeContext,
905
907
bool IsImplicitlyCurriedInstanceMethod = false ) {
908
+ if (typeContext.empty ())
909
+ return CodeCompletionResult::ExpectedTypeRelation::Unknown;
910
+
906
911
auto Result = CodeCompletionResult::ExpectedTypeRelation::Unrelated;
907
912
for (auto Type : typeContext.possibleTypes ) {
908
913
// Do not use Void type context for a single-expression body, since the
@@ -1034,7 +1039,7 @@ CodeCompletionResult *CodeCompletionResultBuilder::takeResult() {
1034
1039
}
1035
1040
1036
1041
auto typeRelation = ExpectedTypeRelation;
1037
- if (typeRelation == CodeCompletionResult::Unrelated )
1042
+ if (typeRelation == CodeCompletionResult::Unknown )
1038
1043
typeRelation =
1039
1044
calculateMaxTypeRelationForDecl (AssociatedDecl, declTypeContext);
1040
1045
@@ -3610,8 +3615,13 @@ class CompletionLookup final : public swift::VisibleDeclConsumer {
3610
3615
}
3611
3616
3612
3617
// Fallback to showing the default type.
3613
- if (!defaultTypeName.empty ())
3618
+ if (!defaultTypeName.empty ()) {
3614
3619
builder.addTypeAnnotation (defaultTypeName);
3620
+ builder.setExpectedTypeRelation (
3621
+ expectedTypeContext.possibleTypes .empty ()
3622
+ ? CodeCompletionResult::ExpectedTypeRelation::Unknown
3623
+ : CodeCompletionResult::ExpectedTypeRelation::Unrelated);
3624
+ }
3615
3625
}
3616
3626
3617
3627
// / Add '#file', '#line', et at.
@@ -4308,6 +4318,8 @@ class CompletionOverrideLookup : public swift::VisibleDeclConsumer {
4308
4318
CodeCompletionResultBuilder Builder (
4309
4319
Sink, CodeCompletionResult::ResultKind::Declaration,
4310
4320
SemanticContextKind::Super, {});
4321
+ Builder.setExpectedTypeRelation (
4322
+ CodeCompletionResult::ExpectedTypeRelation::NotApplicable);
4311
4323
Builder.setAssociatedDecl (FD);
4312
4324
addValueOverride (FD, Reason, dynamicLookupInfo, Builder, hasFuncIntroducer);
4313
4325
Builder.addBraceStmtWithCursor ();
@@ -4335,6 +4347,8 @@ class CompletionOverrideLookup : public swift::VisibleDeclConsumer {
4335
4347
CodeCompletionResultBuilder Builder (
4336
4348
Sink, CodeCompletionResult::ResultKind::Declaration,
4337
4349
SemanticContextKind::Super, {});
4350
+ Builder.setExpectedTypeRelation (
4351
+ CodeCompletionResult::ExpectedTypeRelation::NotApplicable);
4338
4352
Builder.setAssociatedDecl (SD);
4339
4353
addValueOverride (SD, Reason, dynamicLookupInfo, Builder, false );
4340
4354
Builder.addBraceStmtWithCursor ();
@@ -4345,6 +4359,8 @@ class CompletionOverrideLookup : public swift::VisibleDeclConsumer {
4345
4359
CodeCompletionResultBuilder Builder (Sink,
4346
4360
CodeCompletionResult::ResultKind::Declaration,
4347
4361
SemanticContextKind::Super, {});
4362
+ Builder.setExpectedTypeRelation (
4363
+ CodeCompletionResult::ExpectedTypeRelation::NotApplicable);
4348
4364
Builder.setAssociatedDecl (ATD);
4349
4365
if (!hasTypealiasIntroducer && !hasAccessModifier)
4350
4366
addAccessControl (ATD, Builder);
@@ -4361,6 +4377,8 @@ class CompletionOverrideLookup : public swift::VisibleDeclConsumer {
4361
4377
Sink,
4362
4378
CodeCompletionResult::ResultKind::Declaration,
4363
4379
SemanticContextKind::Super, {});
4380
+ Builder.setExpectedTypeRelation (
4381
+ CodeCompletionResult::ExpectedTypeRelation::NotApplicable);
4364
4382
Builder.setAssociatedDecl (CD);
4365
4383
4366
4384
if (!hasAccessModifier)
@@ -4845,16 +4863,19 @@ static bool isClangSubModule(ModuleDecl *TheModule) {
4845
4863
return false ;
4846
4864
}
4847
4865
4848
- static void addKeyword (CodeCompletionResultSink &Sink, StringRef Name,
4849
- CodeCompletionKeywordKind Kind,
4850
- StringRef TypeAnnotation = " " ) {
4851
- CodeCompletionResultBuilder Builder (
4852
- Sink, CodeCompletionResult::ResultKind::Keyword,
4853
- SemanticContextKind::None, {});
4854
- Builder.setKeywordKind (Kind);
4855
- Builder.addTextChunk (Name);
4856
- if (!TypeAnnotation.empty ())
4857
- Builder.addTypeAnnotation (TypeAnnotation);
4866
+ static void
4867
+ addKeyword (CodeCompletionResultSink &Sink, StringRef Name,
4868
+ CodeCompletionKeywordKind Kind, StringRef TypeAnnotation = " " ,
4869
+ CodeCompletionResult::ExpectedTypeRelation TypeRelation =
4870
+ CodeCompletionResult::ExpectedTypeRelation::NotApplicable) {
4871
+ CodeCompletionResultBuilder Builder (Sink,
4872
+ CodeCompletionResult::ResultKind::Keyword,
4873
+ SemanticContextKind::None, {});
4874
+ Builder.setKeywordKind (Kind);
4875
+ Builder.addTextChunk (Name);
4876
+ if (!TypeAnnotation.empty ())
4877
+ Builder.addTypeAnnotation (TypeAnnotation);
4878
+ Builder.setExpectedTypeRelation (TypeRelation);
4858
4879
}
4859
4880
4860
4881
static void addDeclKeywords (CodeCompletionResultSink &Sink) {
0 commit comments