Skip to content

Commit ed3196a

Browse files
authored
Merge pull request #21718 from slavapestov/more-completion-fixes
More completion fixes
2 parents 7708e25 + 46dd33a commit ed3196a

8 files changed

+93
-73
lines changed

lib/Sema/LookupVisibleDecls.cpp

Lines changed: 46 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -225,27 +225,8 @@ static void lookupTypeMembers(Type BaseType, Type LookupType,
225225
NominalTypeDecl *D = LookupType->getAnyNominal();
226226
assert(D && "should have a nominal type");
227227

228-
bool LookupFromChildDeclContext = false;
229-
const DeclContext *TempDC = CurrDC;
230-
while (!TempDC->isModuleContext()) {
231-
if (TempDC == D) {
232-
LookupFromChildDeclContext = true;
233-
break;
234-
}
235-
TempDC = TempDC->getParent();
236-
}
237-
238228
SmallVector<ValueDecl*, 2> FoundDecls;
239229

240-
if (LookupFromChildDeclContext) {
241-
// Current decl context is contained inside 'D', so generic parameters
242-
// are visible.
243-
if (D->getGenericParams())
244-
for (auto Param : *D->getGenericParams())
245-
if (isDeclVisibleInLookupMode(Param, LS, CurrDC, TypeResolver))
246-
FoundDecls.push_back(Param);
247-
}
248-
249230
for (Decl *Member : D->getMembers()) {
250231
if (auto *VD = dyn_cast<ValueDecl>(Member))
251232
if (isDeclVisibleInLookupMode(VD, LS, CurrDC, TypeResolver))
@@ -674,6 +655,23 @@ template <> struct DenseMapInfo<FoundDeclTy> {
674655

675656
} // namespace llvm
676657

658+
// If a class 'Base' conforms to 'Proto', and my base type is a subclass
659+
// 'Derived' of 'Base', use 'Base' not 'Derived' as the 'Self' type in the
660+
// substitution map.
661+
static Type getBaseTypeForMember(ModuleDecl *M, ValueDecl *OtherVD, Type BaseTy) {
662+
if (auto *Proto = OtherVD->getDeclContext()->getSelfProtocolDecl()) {
663+
if (BaseTy->getClassOrBoundGenericClass()) {
664+
if (auto Conformance = M->lookupConformance(BaseTy, Proto)) {
665+
auto *Superclass = Conformance->getConcrete()->getRootConformance()
666+
->getType()->getClassOrBoundGenericClass();
667+
return BaseTy->getSuperclassForDecl(Superclass);
668+
}
669+
}
670+
}
671+
672+
return BaseTy;
673+
}
674+
677675
namespace {
678676

679677
class OverrideFilteringConsumer : public VisibleDeclConsumer {
@@ -784,7 +782,8 @@ class OverrideFilteringConsumer : public VisibleDeclConsumer {
784782
auto OtherSignature = OtherVD->getOverloadSignature();
785783
auto OtherSignatureType = OtherVD->getOverloadSignatureType();
786784
if (OtherSignatureType && shouldSubst) {
787-
auto subs = BaseTy->getMemberSubstitutionMap(M, OtherVD);
785+
auto ActualBaseTy = getBaseTypeForMember(M, OtherVD, BaseTy);
786+
auto subs = ActualBaseTy->getMemberSubstitutionMap(M, OtherVD);
788787
if (auto CT = OtherSignatureType.subst(subs))
789788
OtherSignatureType = CT->getCanonicalType();
790789
}
@@ -845,7 +844,7 @@ static void lookupVisibleDeclsImpl(VisibleDeclConsumer &Consumer,
845844
// If we are inside of a method, check to see if there are any ivars in scope,
846845
// and if so, whether this is a reference to one of them.
847846
while (!DC->isModuleScopeContext()) {
848-
const ValueDecl *BaseDecl = nullptr;
847+
GenericParamList *GenericParams = nullptr;
849848
Type ExtendedType;
850849
auto LS = LookupState::makeUnqualified();
851850

@@ -869,7 +868,6 @@ static void lookupVisibleDeclsImpl(VisibleDeclConsumer &Consumer,
869868
if (auto *SE = dyn_cast<SubscriptDecl>(DC)) {
870869
ExtendedType = SE->getDeclContext()->getSelfTypeInContext();
871870
DC = DC->getParent();
872-
BaseDecl = DC->getSelfNominalTypeDecl();
873871
} else if (auto *AFD = dyn_cast<AbstractFunctionDecl>(DC)) {
874872

875873
// Look for local variables; normally, the parser resolves these
@@ -888,9 +886,10 @@ static void lookupVisibleDeclsImpl(VisibleDeclConsumer &Consumer,
888886
namelookup::FindLocalVal(SM, Loc, Consumer).checkParameterList(
889887
AFD->getParameters());
890888

889+
GenericParams = AFD->getGenericParams();
890+
891891
if (AFD->getDeclContext()->isTypeContext()) {
892892
ExtendedType = AFD->getDeclContext()->getSelfTypeInContext();
893-
BaseDecl = AFD->getImplicitSelfDecl();
894893
DC = DC->getParent();
895894

896895
if (auto *FD = dyn_cast<FuncDecl>(AFD))
@@ -906,14 +905,34 @@ static void lookupVisibleDeclsImpl(VisibleDeclConsumer &Consumer,
906905
}
907906
} else if (auto ED = dyn_cast<ExtensionDecl>(DC)) {
908907
ExtendedType = ED->getSelfTypeInContext();
909-
if (ExtendedType)
910-
BaseDecl = ExtendedType->getNominalOrBoundGenericNominal();
911908
} else if (auto ND = dyn_cast<NominalTypeDecl>(DC)) {
912909
ExtendedType = ND->getSelfTypeInContext();
913-
BaseDecl = ND;
914910
}
915911

916-
if (BaseDecl && ExtendedType)
912+
// If we're inside a function context, we've already moved to
913+
// the parent DC, so we have to check the function's generic
914+
// parameters first.
915+
if (GenericParams) {
916+
namelookup::FindLocalVal localVal(SM, Loc, Consumer);
917+
localVal.checkGenericParams(GenericParams);
918+
}
919+
920+
// Check the generic parameters of our context.
921+
GenericParamList *dcGenericParams = nullptr;
922+
if (auto nominal = dyn_cast<NominalTypeDecl>(DC))
923+
dcGenericParams = nominal->getGenericParams();
924+
else if (auto ext = dyn_cast<ExtensionDecl>(DC))
925+
dcGenericParams = ext->getGenericParams();
926+
else if (auto subscript = dyn_cast<SubscriptDecl>(DC))
927+
dcGenericParams = subscript->getGenericParams();
928+
929+
while (dcGenericParams) {
930+
namelookup::FindLocalVal localVal(SM, Loc, Consumer);
931+
localVal.checkGenericParams(dcGenericParams);
932+
dcGenericParams = dcGenericParams->getOuterParameters();
933+
}
934+
935+
if (ExtendedType)
917936
::lookupVisibleMemberDecls(ExtendedType, Consumer, DC, LS, Reason,
918937
TypeResolver, nullptr);
919938

test/IDE/complete_crashes.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ while true {
6868
struct CustomGenericCollection<Key> : ExpressibleByDictionaryLiteral {
6969
// GENERIC_PARAM_AND_ASSOC_TYPE: Begin completions
7070
// GENERIC_PARAM_AND_ASSOC_TYPE-DAG: Decl[InstanceVar]/CurrNominal: count[#Int#]; name=count
71-
// GENERIC_PARAM_AND_ASSOC_TYPE-DAG: Decl[GenericTypeParam]/CurrNominal: Key[#Key#]; name=Key
71+
// GENERIC_PARAM_AND_ASSOC_TYPE-DAG: Decl[GenericTypeParam]/Local: Key[#Key#]; name=Key
7272
// GENERIC_PARAM_AND_ASSOC_TYPE-DAG: Decl[TypeAlias]/CurrNominal: Value[#CustomGenericCollection<Key>.Value#]; name=Value
7373
// GENERIC_PARAM_AND_ASSOC_TYPE: End completions
7474

test/IDE/complete_expr_postfix_begin.swift

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ struct TestFindFuncParam5_6<T> {
228228
func testFindFuncParam5(a: Int, b: T) {
229229
#^FIND_FUNC_PARAM_5^#
230230
// FIND_FUNC_PARAM_5: Begin completions
231-
// FIND_FUNC_PARAM_5-DAG: Decl[GenericTypeParam]/CurrNominal: T[#T#]{{; name=.+$}}
231+
// FIND_FUNC_PARAM_5-DAG: Decl[GenericTypeParam]/Local: T[#T#]{{; name=.+$}}
232232
// FIND_FUNC_PARAM_5-DAG: Decl[LocalVar]/Local: self[#TestFindFuncParam5_6<T>#]{{; name=.+$}}
233233
// FIND_FUNC_PARAM_5-DAG: Decl[LocalVar]/Local: a[#Int#]{{; name=.+$}}
234234
// FIND_FUNC_PARAM_5-DAG: Decl[LocalVar]/Local: b[#T#]{{; name=.+$}}
@@ -238,7 +238,7 @@ struct TestFindFuncParam5_6<T> {
238238
func testFindFuncParam6<U>(a: Int, b: T, c: U) {
239239
#^FIND_FUNC_PARAM_6^#
240240
// FIND_FUNC_PARAM_6: Begin completions
241-
// FIND_FUNC_PARAM_6-DAG: Decl[GenericTypeParam]/CurrNominal: T[#T#]{{; name=.+$}}
241+
// FIND_FUNC_PARAM_6-DAG: Decl[GenericTypeParam]/Local: T[#T#]{{; name=.+$}}
242242
// FIND_FUNC_PARAM_6-DAG: Decl[GenericTypeParam]/Local: U[#U#]{{; name=.+$}}
243243
// FIND_FUNC_PARAM_6-DAG: Decl[LocalVar]/Local: self[#TestFindFuncParam5_6<T>#]{{; name=.+$}}
244244
// FIND_FUNC_PARAM_6-DAG: Decl[LocalVar]/Local: a[#Int#]{{; name=.+$}}
@@ -309,10 +309,10 @@ class TestFindConstructorParam4<T> {
309309
init(a: Int, b: T) {
310310
#^FIND_CONSTRUCTOR_PARAM_4^#
311311
// FIND_CONSTRUCTOR_PARAM_4: Begin completions
312-
// FIND_CONSTRUCTOR_PARAM_4-DAG: Decl[GenericTypeParam]/CurrNominal: T[#T#]{{; name=.+$}}
313-
// FIND_CONSTRUCTOR_PARAM_4-DAG: Decl[LocalVar]/Local: self[#TestFindConstructorParam4<T>#]{{; name=.+$}}
314-
// FIND_CONSTRUCTOR_PARAM_4-DAG: Decl[LocalVar]/Local: a[#Int#]{{; name=.+$}}
315-
// FIND_CONSTRUCTOR_PARAM_4-DAG: Decl[LocalVar]/Local: b[#T#]{{; name=.+$}}
312+
// FIND_CONSTRUCTOR_PARAM_4-DAG: Decl[GenericTypeParam]/Local: T[#T#]{{; name=.+$}}
313+
// FIND_CONSTRUCTOR_PARAM_4-DAG: Decl[LocalVar]/Local: self[#TestFindConstructorParam4<T>#]{{; name=.+$}}
314+
// FIND_CONSTRUCTOR_PARAM_4-DAG: Decl[LocalVar]/Local: a[#Int#]{{; name=.+$}}
315+
// FIND_CONSTRUCTOR_PARAM_4-DAG: Decl[LocalVar]/Local: b[#T#]{{; name=.+$}}
316316
// FIND_CONSTRUCTOR_PARAM_4: End completions
317317
}
318318
}
@@ -321,12 +321,12 @@ class TestFindConstructorParam5<T> {
321321
init<U>(a: Int, b: T, c: U) {
322322
#^FIND_CONSTRUCTOR_PARAM_5^#
323323
// FIND_CONSTRUCTOR_PARAM_5: Begin completions
324-
// FIND_CONSTRUCTOR_PARAM_5-DAG: Decl[GenericTypeParam]/CurrNominal: T[#T#]{{; name=.+$}}
325-
// FIND_CONSTRUCTOR_PARAM_5-DAG: Decl[GenericTypeParam]/Local: U[#U#]{{; name=.+$}}
326-
// FIND_CONSTRUCTOR_PARAM_5-DAG: Decl[LocalVar]/Local: self[#TestFindConstructorParam5<T>#]{{; name=.+$}}
327-
// FIND_CONSTRUCTOR_PARAM_5-DAG: Decl[LocalVar]/Local: a[#Int#]{{; name=.+$}}
328-
// FIND_CONSTRUCTOR_PARAM_5-DAG: Decl[LocalVar]/Local: b[#T#]{{; name=.+$}}
329-
// FIND_CONSTRUCTOR_PARAM_5-DAG: Decl[LocalVar]/Local: c[#U#]{{; name=.+$}}
324+
// FIND_CONSTRUCTOR_PARAM_5-DAG: Decl[GenericTypeParam]/Local: T[#T#]{{; name=.+$}}
325+
// FIND_CONSTRUCTOR_PARAM_5-DAG: Decl[GenericTypeParam]/Local: U[#U#]{{; name=.+$}}
326+
// FIND_CONSTRUCTOR_PARAM_5-DAG: Decl[LocalVar]/Local: self[#TestFindConstructorParam5<T>#]{{; name=.+$}}
327+
// FIND_CONSTRUCTOR_PARAM_5-DAG: Decl[LocalVar]/Local: a[#Int#]{{; name=.+$}}
328+
// FIND_CONSTRUCTOR_PARAM_5-DAG: Decl[LocalVar]/Local: b[#T#]{{; name=.+$}}
329+
// FIND_CONSTRUCTOR_PARAM_5-DAG: Decl[LocalVar]/Local: c[#U#]{{; name=.+$}}
330330
// FIND_CONSTRUCTOR_PARAM_5: End completions
331331
}
332332
}
@@ -357,7 +357,7 @@ class TestFindDestructorParam2<T> {
357357
deinit {
358358
#^FIND_DESTRUCTOR_PARAM_2^#
359359
// FIND_DESTRUCTOR_PARAM_2: Begin completions
360-
// FIND_DESTRUCTOR_PARAM_2-DAG: Decl[GenericTypeParam]/CurrNominal: T[#T#]{{; name=.+$}}
360+
// FIND_DESTRUCTOR_PARAM_2-DAG: Decl[GenericTypeParam]/Local: T[#T#]{{; name=.+$}}
361361
// FIND_DESTRUCTOR_PARAM_2-DAG: Decl[LocalVar]/Local: self[#TestFindDestructorParam2<T>#]{{; name=.+$}}
362362
// FIND_DESTRUCTOR_PARAM_2: End completions
363363
}

test/IDE/complete_init.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,8 @@ extension L {
124124
// INSIDE_L_0-DAG: Decl[Constructor]/CurrNominal: Y({#x: A#})[#G#]{{; name=.+}}
125125

126126
// FIXME: <rdar://problem/20530021> Code complete generic parameters in extensions
127-
// disabled_INSIDE_L_0-DAG: Decl[Constructor]/CurrNominal: X({#x: A#})[#X#]{{; name=.+}}
127+
// INSIDE_L_0-DAG: Decl[GenericTypeParam]/Local: X[#X#]; name=X
128+
// INSIDE_L_0-DAG: Decl[Constructor]/Local: X({#x: A#})[#G#]{{; name=.+}}
128129

129130
// INSIDE_L_0: End completions
130131

@@ -136,7 +137,7 @@ struct M<X: G> {
136137
}
137138
// INSIDE_M_0: Begin completions
138139
// INSIDE_M_0-DAG: Decl[Constructor]/CurrNominal: Y({#x: A#})[#G#]{{; name=.+}}
139-
// INSIDE_M_0-DAG: Decl[Constructor]/CurrNominal: X({#x: A#})[#G#]{{; name=.+}}
140+
// INSIDE_M_0-DAG: Decl[Constructor]/Local: X({#x: A#})[#G#]{{; name=.+}}
140141
// INSIDE_M_0: End completions
141142

142143
typealias CAlias = C

test/IDE/complete_pattern.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,9 +198,9 @@ struct PatternIsGeneric2<
198198

199199
// PATTERN_IS_GENERIC_2: Begin completions
200200
// Generic parameters of the struct.
201-
// PATTERN_IS_GENERIC_2-DAG: Decl[GenericTypeParam]/CurrNominal: StructGenericFoo[#StructGenericFoo#]{{; name=.+$}}
202-
// PATTERN_IS_GENERIC_2-DAG: Decl[GenericTypeParam]/CurrNominal: StructGenericBar[#StructGenericBar#]{{; name=.+$}}
203-
// PATTERN_IS_GENERIC_2-DAG: Decl[GenericTypeParam]/CurrNominal: StructGenericBaz[#StructGenericBaz#]{{; name=.+$}}
201+
// PATTERN_IS_GENERIC_2-DAG: Decl[GenericTypeParam]/Local: StructGenericFoo[#StructGenericFoo#]{{; name=.+$}}
202+
// PATTERN_IS_GENERIC_2-DAG: Decl[GenericTypeParam]/Local: StructGenericBar[#StructGenericBar#]{{; name=.+$}}
203+
// PATTERN_IS_GENERIC_2-DAG: Decl[GenericTypeParam]/Local: StructGenericBaz[#StructGenericBaz#]{{; name=.+$}}
204204
// Generic parameters of the function.
205205
// PATTERN_IS_GENERIC_2-DAG: Decl[GenericTypeParam]/Local: GenericFoo[#GenericFoo#]{{; name=.+$}}
206206
// PATTERN_IS_GENERIC_2-DAG: Decl[GenericTypeParam]/Local: GenericBar[#GenericBar#]{{; name=.+$}}

test/IDE/complete_type.swift

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,7 @@ typealias FooTypealias = Int
456456
//===---
457457

458458
// TYPE_IN_PROTOCOL: Begin completions
459-
// TYPE_IN_PROTOCOL-DAG: Decl[GenericTypeParam]/CurrNominal: Self[#Self#]{{; name=.+$}}
459+
// TYPE_IN_PROTOCOL-DAG: Decl[GenericTypeParam]/Local: Self[#Self#]{{; name=.+$}}
460460
// TYPE_IN_PROTOCOL: End completions
461461

462462
protocol TestSelf1 {
@@ -488,9 +488,9 @@ struct TestTypeInParamGeneric2<
488488
}
489489

490490
// TYPE_IN_FUNC_PARAM_GENERIC_2: Begin completions
491-
// TYPE_IN_FUNC_PARAM_GENERIC_2-DAG: Decl[GenericTypeParam]/CurrNominal: StructGenericFoo[#StructGenericFoo#]{{; name=.+$}}
492-
// TYPE_IN_FUNC_PARAM_GENERIC_2-DAG: Decl[GenericTypeParam]/CurrNominal: StructGenericBar[#StructGenericBar#]{{; name=.+$}}
493-
// TYPE_IN_FUNC_PARAM_GENERIC_2-DAG: Decl[GenericTypeParam]/CurrNominal: StructGenericBaz[#StructGenericBaz#]{{; name=.+$}}
491+
// TYPE_IN_FUNC_PARAM_GENERIC_2-DAG: Decl[GenericTypeParam]/Local: StructGenericFoo[#StructGenericFoo#]{{; name=.+$}}
492+
// TYPE_IN_FUNC_PARAM_GENERIC_2-DAG: Decl[GenericTypeParam]/Local: StructGenericBar[#StructGenericBar#]{{; name=.+$}}
493+
// TYPE_IN_FUNC_PARAM_GENERIC_2-DAG: Decl[GenericTypeParam]/Local: StructGenericBaz[#StructGenericBaz#]{{; name=.+$}}
494494
// TYPE_IN_FUNC_PARAM_GENERIC_2: End completions
495495

496496
struct TestTypeInParamGeneric3 {
@@ -518,9 +518,9 @@ struct TestTypeInParamGeneric4<
518518

519519
// TYPE_IN_FUNC_PARAM_GENERIC_4: Begin completions
520520
// Generic parameters of the struct.
521-
// TYPE_IN_FUNC_PARAM_GENERIC_4-DAG: Decl[GenericTypeParam]/CurrNominal: StructGenericFoo[#StructGenericFoo#]{{; name=.+$}}
522-
// TYPE_IN_FUNC_PARAM_GENERIC_4-DAG: Decl[GenericTypeParam]/CurrNominal: StructGenericBar[#StructGenericBar#]{{; name=.+$}}
523-
// TYPE_IN_FUNC_PARAM_GENERIC_4-DAG: Decl[GenericTypeParam]/CurrNominal: StructGenericBaz[#StructGenericBaz#]{{; name=.+$}}
521+
// TYPE_IN_FUNC_PARAM_GENERIC_4-DAG: Decl[GenericTypeParam]/Local: StructGenericFoo[#StructGenericFoo#]{{; name=.+$}}
522+
// TYPE_IN_FUNC_PARAM_GENERIC_4-DAG: Decl[GenericTypeParam]/Local: StructGenericBar[#StructGenericBar#]{{; name=.+$}}
523+
// TYPE_IN_FUNC_PARAM_GENERIC_4-DAG: Decl[GenericTypeParam]/Local: StructGenericBaz[#StructGenericBaz#]{{; name=.+$}}
524524
// Generic parameters of the function.
525525
// TYPE_IN_FUNC_PARAM_GENERIC_4-DAG: Decl[GenericTypeParam]/Local: GenericFoo[#GenericFoo#]{{; name=.+$}}
526526
// TYPE_IN_FUNC_PARAM_GENERIC_4-DAG: Decl[GenericTypeParam]/Local: GenericBar[#GenericBar#]{{; name=.+$}}
@@ -537,9 +537,9 @@ struct TestTypeInParamGeneric5<StructGenericFoo> {
537537

538538
// TYPE_IN_FUNC_PARAM_GENERIC_5: Begin completions
539539
// Generic parameters of the containing structs.
540-
// TYPE_IN_FUNC_PARAM_GENERIC_5-DAG: Decl[GenericTypeParam]/OutNominal: StructGenericFoo[#StructGenericFoo#]{{; name=.+$}}
541-
// TYPE_IN_FUNC_PARAM_GENERIC_5-DAG: Decl[GenericTypeParam]/OutNominal: StructGenericBar[#StructGenericBar#]{{; name=.+$}}
542-
// TYPE_IN_FUNC_PARAM_GENERIC_5-DAG: Decl[GenericTypeParam]/CurrNominal: StructGenericBaz[#StructGenericBaz#]{{; name=.+$}}
540+
// TYPE_IN_FUNC_PARAM_GENERIC_5-DAG: Decl[GenericTypeParam]/Local: StructGenericFoo[#StructGenericFoo#]{{; name=.+$}}
541+
// TYPE_IN_FUNC_PARAM_GENERIC_5-DAG: Decl[GenericTypeParam]/Local: StructGenericBar[#StructGenericBar#]{{; name=.+$}}
542+
// TYPE_IN_FUNC_PARAM_GENERIC_5-DAG: Decl[GenericTypeParam]/Local: StructGenericBaz[#StructGenericBaz#]{{; name=.+$}}
543543
// Generic parameters of the function.
544544
// TYPE_IN_FUNC_PARAM_GENERIC_5-DAG: Decl[GenericTypeParam]/Local: GenericFoo[#GenericFoo#]{{; name=.+$}}
545545
// TYPE_IN_FUNC_PARAM_GENERIC_5: End completions
@@ -552,9 +552,9 @@ struct TestTypeInConstructorParamGeneric1<
552552
}
553553

554554
// TYPE_IN_CONSTRUCTOR_PARAM_GENERIC_1: Begin completions
555-
// TYPE_IN_CONSTRUCTOR_PARAM_GENERIC_1-DAG: Decl[GenericTypeParam]/CurrNominal: StructGenericFoo[#StructGenericFoo#]{{; name=.+$}}
556-
// TYPE_IN_CONSTRUCTOR_PARAM_GENERIC_1-DAG: Decl[GenericTypeParam]/CurrNominal: StructGenericBar[#StructGenericBar#]{{; name=.+$}}
557-
// TYPE_IN_CONSTRUCTOR_PARAM_GENERIC_1-DAG: Decl[GenericTypeParam]/CurrNominal: StructGenericBaz[#StructGenericBaz#]{{; name=.+$}}
555+
// TYPE_IN_CONSTRUCTOR_PARAM_GENERIC_1-DAG: Decl[GenericTypeParam]/Local: StructGenericFoo[#StructGenericFoo#]{{; name=.+$}}
556+
// TYPE_IN_CONSTRUCTOR_PARAM_GENERIC_1-DAG: Decl[GenericTypeParam]/Local: StructGenericBar[#StructGenericBar#]{{; name=.+$}}
557+
// TYPE_IN_CONSTRUCTOR_PARAM_GENERIC_1-DAG: Decl[GenericTypeParam]/Local: StructGenericBaz[#StructGenericBaz#]{{; name=.+$}}
558558
// TYPE_IN_CONSTRUCTOR_PARAM_GENERIC_1: End completions
559559

560560
struct TestTypeInConstructorParamGeneric2 {
@@ -580,9 +580,9 @@ struct TestTypeInConstructorParamGeneric3<
580580

581581
// TYPE_IN_CONSTRUCTOR_PARAM_GENERIC_3: Begin completions
582582
// Generic parameters of the struct.
583-
// TYPE_IN_CONSTRUCTOR_PARAM_GENERIC_3-DAG: Decl[GenericTypeParam]/CurrNominal: StructGenericFoo[#StructGenericFoo#]{{; name=.+$}}
584-
// TYPE_IN_CONSTRUCTOR_PARAM_GENERIC_3-DAG: Decl[GenericTypeParam]/CurrNominal: StructGenericBar[#StructGenericBar#]{{; name=.+$}}
585-
// TYPE_IN_CONSTRUCTOR_PARAM_GENERIC_3-DAG: Decl[GenericTypeParam]/CurrNominal: StructGenericBaz[#StructGenericBaz#]{{; name=.+$}}
583+
// TYPE_IN_CONSTRUCTOR_PARAM_GENERIC_3-DAG: Decl[GenericTypeParam]/Local: StructGenericFoo[#StructGenericFoo#]{{; name=.+$}}
584+
// TYPE_IN_CONSTRUCTOR_PARAM_GENERIC_3-DAG: Decl[GenericTypeParam]/Local: StructGenericBar[#StructGenericBar#]{{; name=.+$}}
585+
// TYPE_IN_CONSTRUCTOR_PARAM_GENERIC_3-DAG: Decl[GenericTypeParam]/Local: StructGenericBaz[#StructGenericBaz#]{{; name=.+$}}
586586
// Generic parameters of the constructor.
587587
// TYPE_IN_CONSTRUCTOR_PARAM_GENERIC_3-DAG: Decl[GenericTypeParam]/Local: GenericFoo[#GenericFoo#]{{; name=.+$}}
588588
// TYPE_IN_CONSTRUCTOR_PARAM_GENERIC_3-DAG: Decl[GenericTypeParam]/Local: GenericBar[#GenericBar#]{{; name=.+$}}
@@ -605,18 +605,18 @@ class A<T> {
605605
}
606606

607607
// TYPE_IN_RETURN_GEN_PARAM_NO_DUP: Begin completions
608-
// TYPE_IN_RETURN_GEN_PARAM_NO_DUP-DAG: Decl[GenericTypeParam]/CurrNominal: T[#T#]; name=T
609-
// TYPE_IN_RETURN_GEN_PARAM_NO_DUP-NOT: Decl[GenericTypeParam]/Local: T[#T#]; name=T
608+
// TYPE_IN_RETURN_GEN_PARAM_NO_DUP-DAG: Decl[GenericTypeParam]/Local: T[#T#]; name=T
609+
// TYPE_IN_RETURN_GEN_PARAM_NO_DUP-NOT: Decl[GenericTypeParam]/Local: T[#T#]; name=T
610610
// TYPE_IN_RETURN_GEN_PARAM_NO_DUP: End completions
611611

612612
// TYPE_IVAR_GEN_PARAM_NO_DUP: Begin completions
613-
// TYPE_IVAR_GEN_PARAM_NO_DUP-DAG: Decl[GenericTypeParam]/CurrNominal: T[#T#]; name=T
614-
// TYPE_IVAR_GEN_PARAM_NO_DUP-NOT: Decl[GenericTypeParam]/Local: T[#T#]; name=T
613+
// TYPE_IVAR_GEN_PARAM_NO_DUP-DAG: Decl[GenericTypeParam]/Local: T[#T#]; name=T
614+
// TYPE_IVAR_GEN_PARAM_NO_DUP-NOT: Decl[GenericTypeParam]/Local: T[#T#]; name=T
615615
// TYPE_IVAR_GEN_PARAM_NO_DUP: End completions
616616

617617
// TYPE_IN_SUBSCR_GEN_PARAM_NO_DUP: Begin completions
618-
// TYPE_IN_SUBSCR_GEN_PARAM_NO_DUP-DAG: Decl[GenericTypeParam]/CurrNominal: T[#T#]; name=T
619-
// TYPE_IN_SUBSCR_GEN_PARAM_NO_DUP-NOT: Decl[GenericTypeParam]/Local: T[#T#]; name=T
618+
// TYPE_IN_SUBSCR_GEN_PARAM_NO_DUP-DAG: Decl[GenericTypeParam]/Local: T[#T#]; name=T
619+
// TYPE_IN_SUBSCR_GEN_PARAM_NO_DUP-NOT: Decl[GenericTypeParam]/Local: T[#T#]; name=T
620620
// TYPE_IN_SUBSCR_GEN_PARAM_NO_DUP: End completions
621621

622622
//===---

test/IDE/complete_type_subscript.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ struct G0<T> {
4040
subscript(x: T) -> #^GEN_RETURN_0^# { return 0 }
4141
}
4242
// GEN_TOP_LEVEL_0: Keyword/None: Any[#Any#];
43-
// GEN_TOP_LEVEL_0: Decl[GenericTypeParam]/CurrNominal: T[#T#]; name=T
43+
// GEN_TOP_LEVEL_0: Decl[GenericTypeParam]/Local: T[#T#]; name=T
4444
// GEN_TOP_LEVEL_0: Decl[Struct]/CurrModule: S0[#S0#];
4545
// GEN_TOP_LEVEL_0: Decl[Struct]/OtherModule[Swift]: Int[#Int#];
4646

test/IDE/complete_where_clause.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,17 +118,17 @@ class C1<T> where #^CLASS_1^# {}
118118
class C2<T> where T.#^CLASS_2^# {}
119119
enum E1<T> where #^ENUM_1^# {}
120120
enum E2<T> where T.#^ENUM_2^# {}
121-
// GEN_T_NOMINAL: Decl[GenericTypeParam]/CurrNominal: T[#T#]; name=T
121+
// GEN_T_NOMINAL: Decl[GenericTypeParam]/Local: T[#T#]; name=T
122122

123123
protocol P2 {
124124
associatedtype T where #^ASSOC_1^#
125125
associatedtype U: Assoc where U.#^ASSOC_2^#
126126
}
127127

128128
// P2: Begin completions
129-
// P2-DAG: Decl[GenericTypeParam]/{{Super|CurrNominal}}: Self[#Self#];
130-
// P2-DAG: Decl[AssociatedType]/{{Super|CurrNominal}}: T;
131-
// P2-DAG: Decl[AssociatedType]/{{Super|CurrNominal}}: U;
129+
// P2-DAG: Decl[GenericTypeParam]/Local: Self[#Self#];
130+
// P2-DAG: Decl[AssociatedType]/{{Super|CurrNominal}}: T;
131+
// P2-DAG: Decl[AssociatedType]/{{Super|CurrNominal}}: U;
132132
// P2: End completions
133133

134134
// U_DOT: Begin completions

0 commit comments

Comments
 (0)