Skip to content

Commit e5e3732

Browse files
committed
[Completion] Remove uses of unbounded generic types
Ensure we always produce bounded generic type annotations and contextual types.
1 parent 09003d6 commit e5e3732

14 files changed

+42
-45
lines changed

lib/IDE/CodeCompletionResultType.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -395,8 +395,7 @@ static TypeRelation calculateTypeRelation(Type Ty, Type ExpectedTy,
395395

396396
// Equality/Conversion of GenericTypeParameterType won't account for
397397
// requirements – ignore them
398-
if (!Ty->hasTypeParameter() && !ExpectedTy->hasTypeParameter() &&
399-
!Ty->hasUnboundGenericType() && !ExpectedTy->hasUnboundGenericType()) {
398+
if (!Ty->hasTypeParameter() && !ExpectedTy->hasTypeParameter()) {
400399
if (Ty->isEqual(ExpectedTy))
401400
return TypeRelation::Convertible;
402401
bool isAny = false;

lib/IDE/CompletionLookup.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,11 @@ static Type defaultTypeLiteralKind(CodeCompletionLiteralKind kind,
8989
case CodeCompletionLiteralKind::ArrayLiteral:
9090
if (!Ctx.getArrayDecl())
9191
return Type();
92-
return Ctx.getArrayDecl()->getDeclaredType();
92+
return Ctx.getArrayDecl()->getDeclaredInterfaceType();
9393
case CodeCompletionLiteralKind::DictionaryLiteral:
9494
if (!Ctx.getDictionaryDecl())
9595
return Type();
96-
return Ctx.getDictionaryDecl()->getDeclaredType();
96+
return Ctx.getDictionaryDecl()->getDeclaredInterfaceType();
9797
case CodeCompletionLiteralKind::NilLiteral:
9898
case CodeCompletionLiteralKind::ColorLiteral:
9999
case CodeCompletionLiteralKind::ImageLiteral:
@@ -1715,7 +1715,7 @@ void CompletionLookup::addNominalTypeRef(const NominalTypeDecl *NTD,
17151715
if (!customAttributeAnnotation.empty()) {
17161716
Builder.addTypeAnnotation(customAttributeAnnotation);
17171717
} else {
1718-
addTypeAnnotation(Builder, NTD->getDeclaredType());
1718+
addTypeAnnotation(Builder, NTD->getDeclaredInterfaceType());
17191719
}
17201720

17211721
// Override the type relation for NominalTypes. Use the better relation
@@ -1741,11 +1741,7 @@ void CompletionLookup::addTypeAliasRef(const TypeAliasDecl *TAD,
17411741
Builder.addBaseName(TAD->getName().str());
17421742
if (auto underlyingType = TAD->getUnderlyingType()) {
17431743
if (underlyingType->hasError()) {
1744-
addTypeAnnotation(Builder,
1745-
TAD->isGeneric()
1746-
? TAD->getUnboundGenericType()
1747-
: TAD->getDeclaredInterfaceType());
1748-
1744+
addTypeAnnotation(Builder, TAD->getDeclaredInterfaceType());
17491745
} else {
17501746
addTypeAnnotation(Builder, underlyingType);
17511747
}

lib/IDE/TypeCheckCompletionCallback.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,10 @@ Type swift::ide::getTypeForCompletion(const constraints::Solution &S,
5151
// Use the contextual type, unless it is still unresolved, in which case fall
5252
// back to getting the type from the expression.
5353
if (auto ContextualType = S.getContextualType(Node)) {
54-
if (!ContextualType->hasUnresolvedType())
54+
if (!ContextualType->hasUnresolvedType() &&
55+
!ContextualType->hasUnboundGenericType()) {
5556
return ContextualType;
57+
}
5658
}
5759

5860
if (!S.hasType(Node)) {

test/IDE/complete_annotation.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ func testGlobal() {
3535
// GLOBAL_EXPR-DAG: Literal[Boolean]/None: <name>false</name>; typename=<typeid.sys>Bool</typeid.sys>;
3636
// GLOBAL_EXPR-DAG: Literal[Nil]/None: <name>nil</name>; typename=;
3737
// GLOBAL_EXPR-DAG: Literal[String]/None: &quot;<callarg><callarg.param>abc</callarg.param></callarg>&quot;; typename=<typeid.sys>String</typeid.sys>;
38-
// GLOBAL_EXPR-DAG: Literal[Array]/None: [<callarg><callarg.param>values</callarg.param></callarg>]; typename=<typeid.sys>Array</typeid.sys>;
39-
// GLOBAL_EXPR-DAG: Literal[Dictionary]/None: [<callarg><callarg.param>key</callarg.param></callarg>: <callarg><callarg.param>value</callarg.param></callarg>]; typename=<typeid.sys>Dictionary</typeid.sys>;
38+
// GLOBAL_EXPR-DAG: Literal[Array]/None: [<callarg><callarg.param>values</callarg.param></callarg>]; typename=<typeid.sys>Array</typeid.sys>&lt;<typeid.sys>Element</typeid.sys>&gt;;
39+
// GLOBAL_EXPR-DAG: Literal[Dictionary]/None: [<callarg><callarg.param>key</callarg.param></callarg>: <callarg><callarg.param>value</callarg.param></callarg>]; typename=<typeid.sys>Dictionary</typeid.sys>&lt;<typeid.sys>Key</typeid.sys>, <typeid.sys>Value</typeid.sys>&gt;;
4040
// GLOBAL_EXPR-DAG: Literal[_Color]/None: <name>#colorLiteral</name>(<callarg><callarg.label>red</callarg.label>: <callarg.type><typeid.sys>Float</typeid.sys></callarg.type></callarg>, <callarg><callarg.label>green</callarg.label>: <callarg.type><typeid.sys>Float</typeid.sys></callarg.type></callarg>, <callarg><callarg.label>blue</callarg.label>: <callarg.type><typeid.sys>Float</typeid.sys></callarg.type></callarg>, <callarg><callarg.label>alpha</callarg.label>: <callarg.type><typeid.sys>Float</typeid.sys></callarg.type></callarg>); typename=;
4141
// GLOBAL_EXPR-DAG: Literal[_Image]/None: <name>#imageLiteral</name>(<callarg><callarg.label>resourceName</callarg.label>: <callarg.type><typeid.sys>String</typeid.sys></callarg.type></callarg>); typename=;
4242
// GLOBAL_EXPR-DAG: Literal[Tuple]/None: (<callarg><callarg.param>values</callarg.param></callarg>); typename=;

test/IDE/complete_at_top_level_library.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ protocol MyProtocol {}
7070
// LIBRARY-DAG: Literal[Boolean]/None/Flair[ExprAtFileScope]: false[#Bool#]; name=false
7171
// LIBRARY-DAG: Literal[Nil]/None/Flair[ExprAtFileScope]: nil; name=nil
7272
// LIBRARY-DAG: Literal[String]/None/Flair[ExprAtFileScope]: "{#(abc)#}"[#String#]; name=""
73-
// LIBRARY-DAG: Literal[Array]/None/Flair[ExprAtFileScope]: [{#(values)#}][#Array#]; name=[]
74-
// LIBRARY-DAG: Literal[Dictionary]/None/Flair[ExprAtFileScope]: [{#(key)#}: {#(value)#}][#Dictionary#]; name=[: ]
73+
// LIBRARY-DAG: Literal[Array]/None/Flair[ExprAtFileScope]: [{#(values)#}][#Array<Element>#]; name=[]
74+
// LIBRARY-DAG: Literal[Dictionary]/None/Flair[ExprAtFileScope]: [{#(key)#}: {#(value)#}][#Dictionary<Key, Value>#]; name=[: ]
7575
// LIBRARY-DAG: Literal[Tuple]/None/Flair[ExprAtFileScope]: ({#(values)#}); name=()
7676
// LIBRARY-DAG: Decl[Struct]/CurrModule/Flair[ExprAtFileScope]: MyStruct[#MyStruct#]; name=MyStruct
7777
// LIBRARY-DAG: Decl[Protocol]/CurrModule/Flair[RareType,ExprAtFileScope]: MyProtocol[#MyProtocol#]; name=MyProtocol
@@ -136,8 +136,8 @@ protocol MyProtocol {}
136136
// SCRIPT-DAG: Literal[Boolean]/None: false[#Bool#]; name=false
137137
// SCRIPT-DAG: Literal[Nil]/None: nil; name=nil
138138
// SCRIPT-DAG: Literal[String]/None: "{#(abc)#}"[#String#]; name=""
139-
// SCRIPT-DAG: Literal[Array]/None: [{#(values)#}][#Array#]; name=[]
140-
// SCRIPT-DAG: Literal[Dictionary]/None: [{#(key)#}: {#(value)#}][#Dictionary#]; name=[: ]
139+
// SCRIPT-DAG: Literal[Array]/None: [{#(values)#}][#Array<Element>#]; name=[]
140+
// SCRIPT-DAG: Literal[Dictionary]/None: [{#(key)#}: {#(value)#}][#Dictionary<Key, Value>#]; name=[: ]
141141
// SCRIPT-DAG: Literal[Tuple]/None: ({#(values)#}); name=()
142142
// SCRIPT-DAG: Decl[Struct]/CurrModule: MyStruct[#MyStruct#]; name=MyStruct
143143
// SCRIPT-DAG: Decl[Protocol]/CurrModule/Flair[RareType]: MyProtocol[#MyProtocol#]; name=MyProtocol

test/IDE/complete_constructor.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -311,8 +311,8 @@ class DependentTypeInClosure<Data: DataType> {
311311
func testDependentTypeInClosure() {
312312
let _: DependentTypeInClosure = .#^DEPENDENT_IN_CLOSURE_3^#
313313
// DEPENDENT_IN_CLOSURE_3: Begin completions, 2 items
314-
// DEPENDENT_IN_CLOSURE_3-DAG: Decl[Constructor]/CurrNominal: init({#(arg): DataType#}, {#fn: (DataType.Content) -> Void##(DataType.Content) -> Void#})[#DependentTypeInClosure<DataType>#];
315-
// DEPENDENT_IN_CLOSURE_3-DAG: Decl[Constructor]/CurrNominal: init({#arg: DataType#}, {#fn: () -> DataType.Content##() -> DataType.Content#})[#DependentTypeInClosure<DataType>#];
314+
// DEPENDENT_IN_CLOSURE_3-DAG: Decl[Constructor]/CurrNominal/TypeRelation[Convertible]: init({#(arg): DataType#}, {#fn: (Data.Content) -> Void##(Data.Content) -> Void#})[#DependentTypeInClosure<DataType>#];
315+
// DEPENDENT_IN_CLOSURE_3-DAG: Decl[Constructor]/CurrNominal/TypeRelation[Convertible]: init({#arg: DataType#}, {#fn: () -> Data.Content##() -> Data.Content#})[#DependentTypeInClosure<DataType>#];
316316

317317
let _ = DependentTypeInClosure(#^DEPENDENT_IN_CLOSURE_1^#)
318318
// DEPENDENT_IN_CLOSURE_1-DAG: Decl[Constructor]/CurrNominal/Flair[ArgLabels]: ['(']{#(arg): DataType#}, {#fn: (_) -> Void##(_) -> Void#}[')'][#DependentTypeInClosure<DataType>#];
@@ -348,6 +348,6 @@ func testIgnoreGenericArgsAfterCompletionToken() {
348348
func deserializeRecord() throws -> HostRecord<IPv4> {
349349
var position = 42
350350
return try #^IGNORE_GENERIC_ARGS_AFTER_COMPLETION_TOKEN^#HostRecord<IPv4>(position: &position)
351-
// IGNORE_GENERIC_ARGS_AFTER_COMPLETION_TOKEN-DAG: Decl[Struct]/Local: HostRecord[#HostRecord#];
351+
// IGNORE_GENERIC_ARGS_AFTER_COMPLETION_TOKEN-DAG: Decl[Struct]/Local: HostRecord[#HostRecord<IPType>#];
352352
}
353353
}

test/IDE/complete_embedded_linux.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ func test() {
1111
// GLOBAL: Literal[Boolean]/None: false[#Bool#];
1212
// GLOBAL: Literal[Nil]/None: nil;
1313
// GLOBAL: Literal[String]/None: "{#(abc)#}"[#String#];
14-
// GLOBAL: Literal[Array]/None: [{#(values)#}][#Array#];
15-
// GLOBAL: Literal[Dictionary]/None: [{#(key)#}: {#(value)#}][#Dictionary#];
14+
// GLOBAL: Literal[Array]/None: [{#(values)#}][#Array<Element>#];
15+
// GLOBAL: Literal[Dictionary]/None: [{#(key)#}: {#(value)#}][#Dictionary<Key, Value>#];
1616
}

test/IDE/complete_embedded_macos.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ func test() {
1111
// GLOBAL: Literal[Boolean]/None: false[#Bool#];
1212
// GLOBAL: Literal[Nil]/None: nil;
1313
// GLOBAL: Literal[String]/None: "{#(abc)#}"[#String#];
14-
// GLOBAL: Literal[Array]/None: [{#(values)#}][#Array#];
15-
// GLOBAL: Literal[Dictionary]/None: [{#(key)#}: {#(value)#}][#Dictionary#];
14+
// GLOBAL: Literal[Array]/None: [{#(values)#}][#Array<Element>#];
15+
// GLOBAL: Literal[Dictionary]/None: [{#(key)#}: {#(value)#}][#Dictionary<Key, Value>#];
1616
}

test/IDE/complete_from_stdlib.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
#^PLAIN_TOP_LEVEL_1?check=PLAIN_TOP_LEVEL;check=NO_STDLIB_PRIVATE^#
77

8-
// PLAIN_TOP_LEVEL-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: Array[#Array#]{{; name=.+$}}
8+
// PLAIN_TOP_LEVEL-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: Array[#Array<Element>#]{{; name=.+$}}
99

1010
func privateNominalMembers(_ a: String) {
1111
a.#^PRIVATE_NOMINAL_MEMBERS_1?check=PRIVATE_NOMINAL_MEMBERS_1;check=NO_STDLIB_PRIVATE^#

test/IDE/complete_from_swift_module.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,15 +134,15 @@ struct Foo: Swift.Array.#^STDLIB_TYPE_QUALIFIED_NESTED^# {}
134134

135135
struct Bar: Swift.#^STDLIB_TYPE_QUALIFIED^# {}
136136
// STDLIB_TYPE_QUALIFIED-NOT: Decl[Module]
137-
// STDLIB_TYPE_QUALIFIED: Decl[Struct]/OtherModule[Swift]/IsSystem: AnyCollection[#AnyCollection#]; name=AnyCollection
137+
// STDLIB_TYPE_QUALIFIED: Decl[Struct]/OtherModule[Swift]/IsSystem: AnyCollection[#AnyCollection<Element>#]; name=AnyCollection
138138
// STDLIB_TYPE_QUALIFIED-NOT: Decl[Module]
139139

140140
func foo() -> foo_swift_module.#^MODULE_TYPE_QUALIFIED^# {}
141141
// MODULE_TYPE_QUALIFIED: Decl[Protocol]/OtherModule[foo_swift_module]: BarProtocol[#BarProtocol#]; name=BarProtocol
142142
// MODULE_TYPE_QUALIFIED: Decl[Enum]/OtherModule[foo_swift_module]: MyQuickLookObject[#MyQuickLookObject#]; name=MyQuickLookObject
143-
// MODULE_TYPE_QUALIFIED: Decl[Struct]/OtherModule[foo_swift_module]: BarGenericSwiftStruct1[#BarGenericSwiftStruct1#]; name=BarGenericSwiftStruct1
143+
// MODULE_TYPE_QUALIFIED: Decl[Struct]/OtherModule[foo_swift_module]: BarGenericSwiftStruct1[#BarGenericSwiftStruct1<T>#]; name=BarGenericSwiftStruct1
144144
// MODULE_TYPE_QUALIFIED: Decl[Struct]/OtherModule[foo_swift_module]: FooSwiftStruct[#FooSwiftStruct#]; name=FooSwiftStruct
145-
// MODULE_TYPE_QUALIFIED: Decl[Struct]/OtherModule[foo_swift_module]: BarGenericSwiftStruct2[#BarGenericSwiftStruct2#]; name=BarGenericSwiftStruct2
145+
// MODULE_TYPE_QUALIFIED: Decl[Struct]/OtherModule[foo_swift_module]: BarGenericSwiftStruct2[#BarGenericSwiftStruct2<T, U>#]; name=BarGenericSwiftStruct2
146146

147147
// rdar://92048610
148148
func testAmbiguousResultBuilder() {

test/IDE/complete_member_type.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,10 @@ do {
115115
// DICTIONARY-NEXT: Decl[TypeAlias]/CurrNominal/IsSystem: Indices[#DefaultIndices<Dictionary<Key, Value>>#]; name=Indices
116116
// DICTIONARY-NEXT: Decl[TypeAlias]/CurrNominal/IsSystem: Key[#Key#]; name=Key
117117
// DICTIONARY-NEXT: Decl[TypeAlias]/CurrNominal/IsSystem: Value[#Value#]; name=Value
118-
// DICTIONARY-NEXT: Decl[Struct]/CurrNominal/IsSystem: Keys[#Dictionary.Keys#]; name=Keys
119-
// DICTIONARY-NEXT: Decl[Struct]/CurrNominal/IsSystem: Values[#Dictionary.Values#]; name=Values
120-
// DICTIONARY-NEXT: Decl[Struct]/CurrNominal/IsSystem: Index[#Dictionary.Index#]; name=Index
121-
// DICTIONARY-NEXT: Decl[Struct]/CurrNominal/IsSystem: Iterator[#Dictionary.Iterator#]; name=Iterator
118+
// DICTIONARY-NEXT: Decl[Struct]/CurrNominal/IsSystem: Keys[#Dictionary<Key, Value>.Keys#]; name=Keys
119+
// DICTIONARY-NEXT: Decl[Struct]/CurrNominal/IsSystem: Values[#Dictionary<Key, Value>.Values#]; name=Values
120+
// DICTIONARY-NEXT: Decl[Struct]/CurrNominal/IsSystem: Index[#Dictionary<Key, Value>.Index#]; name=Index
121+
// DICTIONARY-NEXT: Decl[Struct]/CurrNominal/IsSystem: Iterator[#Dictionary<Key, Value>.Iterator#]; name=Iterator
122122
// DICTIONARY-NEXT: Decl[TypeAlias]/Super/NotRecommended/IsSystem: IndexDistance[#Int#]; name=IndexDistance; diagnostics=warning
123123
// DICTIONARY-NEXT: Keyword/None: Type[#{{Dictionary<Int, Int>|\[Int : Int\]}}.Type#]; name=Type
124124
}

test/IDE/complete_value_literals.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ func testAll0() {
88
// NO_CONTEXT_0-DAG: Literal[Boolean]/None: false[#Bool#];
99
// NO_CONTEXT_0-DAG: Literal[Nil]/None: nil;
1010
// NO_CONTEXT_0-DAG: Literal[String]/None: "{#(abc)#}"[#String#];
11-
// NO_CONTEXT_0-DAG: Literal[Array]/None: [{#(values)#}][#Array#];
12-
// NO_CONTEXT_0-DAG: Literal[Dictionary]/None: [{#(key)#}: {#(value)#}][#Dictionary#];
11+
// NO_CONTEXT_0-DAG: Literal[Array]/None: [{#(values)#}][#Array<Element>#];
12+
// NO_CONTEXT_0-DAG: Literal[Dictionary]/None: [{#(key)#}: {#(value)#}][#Dictionary<Key, Value>#];
1313
// NO_CONTEXT_0-DAG: Literal[_Color]/None: #colorLiteral({#red: Float#}, {#green: Float#}, {#blue: Float#}, {#alpha: Float#});
1414
// NO_CONTEXT_0-DAG: Literal[_Image]/None: #imageLiteral({#resourceName: String#});
1515
}
@@ -146,7 +146,7 @@ func testString5() {
146146
func testArray0() {
147147
let x: Int = #^ARRAY_0^#
148148
}
149-
// ARRAY_0: Literal[Array]/None: [{#(values)#}][#Array#];
149+
// ARRAY_0: Literal[Array]/None: [{#(values)#}][#Array<Element>#];
150150

151151
func testArray1() {
152152
let x: MyArray1<MyInt1> = #^ARRAY_1^#
@@ -161,7 +161,7 @@ func testArray2() {
161161
func testDict0() {
162162
let x: Int = #^DICT_0^#
163163
}
164-
// DICT_0: Literal[Dictionary]/None: [{#(key)#}: {#(value)#}][#Dictionary#];
164+
// DICT_0: Literal[Dictionary]/None: [{#(key)#}: {#(value)#}][#Dictionary<Key, Value>#];
165165

166166
func testDict1() {
167167
let x: MyDict1<MyInt1, MyString1> = #^DICT_1^#

test/IDE/complete_where_clause.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,14 @@ extension A1 where T1.#^GP6^# {}
6464
// A1-DAG: Decl[GenericTypeParam]/Local: T1[#T1#]; name=T1
6565
// A1-DAG: Decl[GenericTypeParam]/Local: T2[#T2#]; name=T2
6666
// A1-DAG: Decl[GenericTypeParam]/Local: T3[#T3#]; name=T3
67-
// A1-DAG: Decl[Class]/Local: A1[#A1#]; name=A1
67+
// A1-DAG: Decl[Class]/Local: A1[#A1<T1, T2, T3>#]; name=A1
6868
// A1-NOT: T4
6969
// A1-NOT: T5
7070
// A1-NOT: Self
7171

7272
// TYPE1-DAG: Decl[Protocol]/CurrModule: P1[#P1#]; name=P1
73-
// TYPE1-DAG: Decl[Class]/CurrModule: A1[#A1#]; name=A1
74-
// TYPE1-DAG: Decl[Class]/CurrModule: A2[#A2#]; name=A2
73+
// TYPE1-DAG: Decl[Class]/CurrModule: A1[#A1<T1, T2, T3>#]; name=A1
74+
// TYPE1-DAG: Decl[Class]/CurrModule: A2[#A2<T4, T5>#]; name=A2
7575
// TYPE1-NOT: T1
7676
// TYPE1-NOT: T2
7777
// TYPE1-NOT: T3
@@ -138,7 +138,7 @@ enum E2<T> where T.#^ENUM_2^# {}
138138
// GEN_T_NOMINAL: Decl[GenericTypeParam]/Local: T[#T#]; name=T
139139

140140
// ANYTYPE-DAG: Decl[GenericTypeParam]/Local: T[#T#];
141-
// ANYTYPE-DAG: Decl[Class]/CurrModule: A1[#A1#];
141+
// ANYTYPE-DAG: Decl[Class]/CurrModule: A1[#A1<T1, T2, T3>#];
142142
// ANYTYPE-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: Int[#Int#];
143143

144144
protocol P2 {
@@ -190,7 +190,7 @@ extension TA1 where #^NOMINAL_TYPEALIAS_EXT^# { }
190190
// NOMINAL_TYPEALIAS_EXT: Begin completions, 4 items
191191
// NOMINAL_TYPEALIAS_EXT-DAG: Decl[GenericTypeParam]/Local: T[#T#];
192192
// NOMINAL_TYPEALIAS_EXT-DAG: Decl[TypeAlias]/CurrNominal: U[#T.Q#];
193-
// NOMINAL_TYPEALIAS_EXT-DAG: Decl[Struct]/Local: TA1[#TA1#];
193+
// NOMINAL_TYPEALIAS_EXT-DAG: Decl[Struct]/Local: TA1[#TA1<T>#];
194194
// NOMINAL_TYPEALIAS_EXT-DAG: Keyword[Self]/CurrNominal: Self[#TA1<T>#];
195195

196196
struct TA2<T: Assoc> {
@@ -215,15 +215,15 @@ extension TA2.Inner1 where #^NOMINAL_TYPEALIAS_NESTED1_EXT^# {}
215215
// NOMINAL_TYPEALIAS_NESTED1_EXT-DAG: Decl[TypeAlias]/CurrNominal: X1[#T#];
216216
// NOMINAL_TYPEALIAS_NESTED1_EXT-DAG: Decl[TypeAlias]/CurrNominal: X2[#T.Q#];
217217
// FIXME : We shouldn't be suggesting Inner1 because it's not fully-qualified
218-
// NOMINAL_TYPEALIAS_NESTED1_EXT-DAG: Decl[Struct]/Local: Inner1[#TA2.Inner1#];
218+
// NOMINAL_TYPEALIAS_NESTED1_EXT-DAG: Decl[Struct]/Local: Inner1[#TA2<T>.Inner1<U>#];
219219
// NOMINAL_TYPEALIAS_NESTED1_EXT-DAG: Keyword[Self]/CurrNominal: Self[#TA2<T>.Inner1<U>#];
220220
extension TA2.Inner2 where #^NOMINAL_TYPEALIAS_NESTED2_EXT^# {}
221221
// NOMINAL_TYPEALIAS_NESTED2_EXT: Begin completions, 5 items
222222
// NOMINAL_TYPEALIAS_NESTED2_EXT-DAG: Decl[GenericTypeParam]/Local: T[#T#];
223223
// NOMINAL_TYPEALIAS_NESTED2_EXT-DAG: Decl[TypeAlias]/CurrNominal: X1[#T#];
224224
// NOMINAL_TYPEALIAS_NESTED2_EXT-DAG: Decl[TypeAlias]/CurrNominal: X2[#T.Q#];
225225
// FIXME : We shouldn't be suggesting Inner2 because it's not fully-qualified
226-
// NOMINAL_TYPEALIAS_NESTED2_EXT-DAG: Decl[Struct]/Local: Inner2[#TA2.Inner2#];
226+
// NOMINAL_TYPEALIAS_NESTED2_EXT-DAG: Decl[Struct]/Local: Inner2[#TA2<T>.Inner2#];
227227
// NOMINAL_TYPEALIAS_NESTED2_EXT-DAG: Keyword[Self]/CurrNominal: Self[#TA2<T>.Inner2#];
228228

229229
protocol WithAssoc {

test/SourceKit/Misc/load-module-with-errors.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ func testInvalidTypeCompletion() {
3030
let foo: #^INVALID-TYPE^#;
3131
// INVALID-TYPE-DAG: Decl[Enum]/OtherModule[errors]: InvalidEnum[#InvalidEnum#];
3232
// INVALID-TYPE-DAG: Decl[Class]/OtherModule[errors]: InvalidClass[#InvalidClass#];
33-
// INVALID-TYPE-DAG: Decl[Struct]/OtherModule[errors]: InvalidGenericStruct[#InvalidGenericStruct#];
33+
// INVALID-TYPE-DAG: Decl[Struct]/OtherModule[errors]: InvalidGenericStruct[#InvalidGenericStruct<T, U>#];
3434
// INVALID-TYPE-DAG: Decl[Struct]/OtherModule[errors]: InvalidStruct[#InvalidStruct#];
3535
// INVALID-TYPE-DAG: Decl[TypeAlias]/OtherModule[errors]: InvalidAlias[#InvalidAlias#];
3636
// INVALID-TYPE-DAG: Decl[Class]/OtherModule[errors]: InvalidClassSub1[#InvalidClassSub1#];
@@ -48,7 +48,7 @@ func testInvalidTopLevelCompletion() {
4848
// INVALID-TOP-DAG: Decl[GlobalVar]/OtherModule[errors]: invalidGlobalClosureBody[#<<error type>>#];
4949
// INVALID-TOP-DAG: Decl[FreeFunction]/OtherModule[errors]: invalidFuncSignature()[#Void#];
5050
// INVALID-TOP-DAG: Decl[GlobalVar]/OtherModule[errors]: invalidGlobalMissingInit[#String#];
51-
// INVALID-TOP-DAG: Decl[Struct]/OtherModule[errors]: InvalidGenericStruct[#InvalidGenericStruct#];
51+
// INVALID-TOP-DAG: Decl[Struct]/OtherModule[errors]: InvalidGenericStruct[#InvalidGenericStruct<T, U>#];
5252
// INVALID-TOP-DAG: Decl[Struct]/OtherModule[errors]: InvalidStruct[#InvalidStruct#];
5353
// INVALID-TOP-DAG: Decl[FreeFunction]/OtherModule[errors]: typeUsesFunc({#pe: InvalidEnum#}, {#pa: <<error type>>#}, {#pp: any InvalidProtocol#}, {#ps: InvalidStruct#}, {#pg: <<error type>>#}, {#pc: InvalidClass#})[#Int#];
5454
// INVALID-TOP-DAG: Decl[GlobalVar]/OtherModule[errors]: invalidGlobalKeypath[#InvalidStruct.Type#];

0 commit comments

Comments
 (0)