Skip to content

Commit e9c51a0

Browse files
committed
[CodeCompletion] Report 'Unrelated' type relation for keywords
1 parent c31bfae commit e9c51a0

File tree

2 files changed

+76
-1
lines changed

2 files changed

+76
-1
lines changed

lib/IDE/CodeCompletion.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3613,8 +3613,13 @@ class CompletionLookup final : public swift::VisibleDeclConsumer {
36133613
}
36143614

36153615
// Fallback to showing the default type.
3616-
if (!defaultTypeName.empty())
3616+
if (!defaultTypeName.empty()) {
36173617
builder.addTypeAnnotation(defaultTypeName);
3618+
builder.setExpectedTypeRelation(
3619+
expectedTypeContext.possibleTypes.empty()
3620+
? CodeCompletionResult::ExpectedTypeRelation::Unknown
3621+
: CodeCompletionResult::ExpectedTypeRelation::Unrelated);
3622+
}
36183623
}
36193624

36203625
/// Add '#file', '#line', et at.

test/SourceKit/CodeComplete/complete_typerelation.swift

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,78 @@ func testConvertibleContext() -> MyProto {
1717
return MyEnum.
1818
}
1919

20+
func testBool() -> Bool {
21+
return
22+
}
23+
func testOptionalInt() -> Int? {
24+
return
25+
}
26+
func testVoid() -> Void {
27+
return
28+
}
29+
func testUnknown() {
30+
31+
}
32+
2033
// RUN: %sourcekitd-test -req=complete -pos=13:17 %s -- %s > %t.identical.response
2134
// RUN: diff -u %s.identical.response %t.identical.response
2235

2336
// RUN: %sourcekitd-test -req=complete -pos=17:17 %s -- %s > %t.convertible.response
2437
// RUN: diff -u %s.convertible.response %t.convertible.response
38+
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
43+
44+
// BOOLCONTEXT-LABEL: key.name: "false",
45+
// BOOLCONTEXT-NOT: key.name:
46+
// BOOLCONTEXT: key.typename: "Bool",
47+
// BOOLCONTEXT: key.typerelation: source.codecompletion.typerelation.identical,
48+
// BOOLCONTEXT-LABEL: key.name: "nil",
49+
// BOOLCONTEXT-NOT: key.name:
50+
// BOOLCONTEXT: key.typename: "",
51+
// BOOLCONTEXT: key.typerelation: source.codecompletion.typerelation.unknown,
52+
// BOOLCONTEXT-LABEL: key.name: "true",
53+
// BOOLCONTEXT-NOT: key.name:
54+
// BOOLCONTEXT: key.typename: "Bool",
55+
// BOOLCONTEXT: key.typerelation: source.codecompletion.typerelation.identical,
56+
57+
// OPTIONALCONTEXT-LABEL: key.name: "false",
58+
// OPTIONALCONTEXT-NOT: key.name:
59+
// OPTIONALCONTEXT: key.typename: "Bool",
60+
// OPTIONALCONTEXT: key.typerelation: source.codecompletion.typerelation.unrelated,
61+
// OPTIONALCONTEXT-LABEL: key.name: "nil",
62+
// OPTIONALCONTEXT-NOT: key.name:
63+
// OPTIONALCONTEXT: key.typename: "Int?",
64+
// OPTIONALCONTEXT: key.typerelation: source.codecompletion.typerelation.identical,
65+
// OPTIONALCONTEXT-LABEL: key.name: "true",
66+
// OPTIONALCONTEXT-NOT: key.name:
67+
// OPTIONALCONTEXT: key.typename: "Bool",
68+
// OPTIONALCONTEXT: key.typerelation: source.codecompletion.typerelation.unrelated,
69+
70+
// VOIDCONTEXT-LABEL: key.name: "false",
71+
// VOIDCONTEXT-NOT: key.name:
72+
// VOIDCONTEXT: key.typename: "Bool",
73+
// VOIDCONTEXT: key.typerelation: source.codecompletion.typerelation.unrelated,
74+
// VOIDCONTEXT-LABEL: key.name: "nil",
75+
// VOIDCONTEXT-NOT: key.name:
76+
// VOIDCONTEXT: key.typename: "",
77+
// VOIDCONTEXT: key.typerelation: source.codecompletion.typerelation.unrelated,
78+
// VOIDCONTEXT-LABEL: key.name: "true",
79+
// VOIDCONTEXT-NOT: key.name:
80+
// VOIDCONTEXT: key.typename: "Bool",
81+
// VOIDCONTEXT: key.typerelation: source.codecompletion.typerelation.unrelated,
82+
83+
// UNKNOWNCONTEXT-LABEL: key.name: "false",
84+
// UNKNOWNCONTEXT-NOT: key.name:
85+
// UNKNOWNCONTEXT: key.typename: "Bool",
86+
// UNKNOWNCONTEXT: key.typerelation: source.codecompletion.typerelation.unknown,
87+
// UNKNOWNCONTEXT-LABEL: key.name: "nil",
88+
// UNKNOWNCONTEXT-NOT: key.name:
89+
// UNKNOWNCONTEXT: key.typename: "",
90+
// UNKNOWNCONTEXT: key.typerelation: source.codecompletion.typerelation.unknown,
91+
// UNKNOWNCONTEXT-LABEL: key.name: "true",
92+
// UNKNOWNCONTEXT-NOT: key.name:
93+
// UNKNOWNCONTEXT: key.typename: "Bool",
94+
// UNKNOWNCONTEXT: key.typerelation: source.codecompletion.typerelation.unknown,

0 commit comments

Comments
 (0)