Skip to content

Commit 706411d

Browse files
committed
[CodeCompletion] Plumb source locations through code completion name lookup.
1 parent 0b91f63 commit 706411d

7 files changed

+35
-31
lines changed

include/swift/AST/NameLookup.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,7 @@ void lookupVisibleDecls(VisibleDeclConsumer &Consumer,
513513
///
514514
/// \param CurrDC the DeclContext from which the lookup is done.
515515
void lookupVisibleMemberDecls(VisibleDeclConsumer &Consumer,
516-
Type BaseTy,
516+
Type BaseTy, SourceLoc loc,
517517
const DeclContext *CurrDC,
518518
bool includeInstanceMembers,
519519
bool includeDerivedRequirements,

lib/IDE/CompletionLookup.cpp

+10-9
Original file line numberDiff line numberDiff line change
@@ -2262,7 +2262,7 @@ bool CompletionLookup::tryUnwrappedCompletions(Type ExprType, bool isIUO) {
22622262
// unforced IUO.
22632263
if (isIUO) {
22642264
if (Type Unwrapped = ExprType->getOptionalObjectType()) {
2265-
lookupVisibleMemberDecls(*this, Unwrapped, CurrDeclContext,
2265+
lookupVisibleMemberDecls(*this, Unwrapped, DotLoc, CurrDeclContext,
22662266
IncludeInstanceMembers,
22672267
/*includeDerivedRequirements*/ false,
22682268
/*includeProtocolExtensionMembers*/ true);
@@ -2289,7 +2289,8 @@ bool CompletionLookup::tryUnwrappedCompletions(Type ExprType, bool isIUO) {
22892289
if (NumBytesToEraseForOptionalUnwrap <=
22902290
CodeCompletionResult::MaxNumBytesToErase) {
22912291
if (!tryTupleExprCompletions(Unwrapped)) {
2292-
lookupVisibleMemberDecls(*this, Unwrapped, CurrDeclContext,
2292+
lookupVisibleMemberDecls(*this, Unwrapped, DotLoc,
2293+
CurrDeclContext,
22932294
IncludeInstanceMembers,
22942295
/*includeDerivedRequirements*/ false,
22952296
/*includeProtocolExtensionMembers*/ true);
@@ -2370,7 +2371,7 @@ void CompletionLookup::getValueExprCompletions(Type ExprType, ValueDecl *VD) {
23702371
// Don't check/return so we still add the members of Optional itself below
23712372
tryUnwrappedCompletions(ExprType, isIUO);
23722373

2373-
lookupVisibleMemberDecls(*this, ExprType, CurrDeclContext,
2374+
lookupVisibleMemberDecls(*this, ExprType, DotLoc, CurrDeclContext,
23742375
IncludeInstanceMembers,
23752376
/*includeDerivedRequirements*/ false,
23762377
/*includeProtocolExtensionMembers*/ true);
@@ -2833,7 +2834,7 @@ void CompletionLookup::getUnresolvedMemberCompletions(Type T) {
28332834
llvm::SaveAndRestore<LookupKind> SaveLook(Kind, LookupKind::ValueExpr);
28342835
llvm::SaveAndRestore<Type> SaveType(ExprType, baseType);
28352836
llvm::SaveAndRestore<bool> SaveUnresolved(IsUnresolvedMember, true);
2836-
lookupVisibleMemberDecls(consumer, baseType, CurrDeclContext,
2837+
lookupVisibleMemberDecls(consumer, baseType, DotLoc, CurrDeclContext,
28372838
/*includeInstanceMembers=*/false,
28382839
/*includeDerivedRequirements*/ false,
28392840
/*includeProtocolExtensionMembers*/ true);
@@ -2847,7 +2848,7 @@ void CompletionLookup::getEnumElementPatternCompletions(Type T) {
28472848
llvm::SaveAndRestore<LookupKind> SaveLook(Kind, LookupKind::EnumElement);
28482849
llvm::SaveAndRestore<Type> SaveType(ExprType, baseType);
28492850
llvm::SaveAndRestore<bool> SaveUnresolved(IsUnresolvedMember, true);
2850-
lookupVisibleMemberDecls(*this, baseType, CurrDeclContext,
2851+
lookupVisibleMemberDecls(*this, baseType, DotLoc, CurrDeclContext,
28512852
/*includeInstanceMembers=*/false,
28522853
/*includeDerivedRequirements=*/false,
28532854
/*includeProtocolExtensionMembers=*/true);
@@ -2915,8 +2916,8 @@ void CompletionLookup::getTypeCompletions(Type BaseType) {
29152916
Kind = LookupKind::Type;
29162917
this->BaseType = BaseType;
29172918
NeedLeadingDot = !HaveDot;
2918-
lookupVisibleMemberDecls(*this, MetatypeType::get(BaseType), CurrDeclContext,
2919-
IncludeInstanceMembers,
2919+
lookupVisibleMemberDecls(*this, MetatypeType::get(BaseType), DotLoc,
2920+
CurrDeclContext, IncludeInstanceMembers,
29202921
/*includeDerivedRequirements*/ false,
29212922
/*includeProtocolExtensionMembers*/ false);
29222923
if (BaseType->isAnyExistentialType()) {
@@ -2951,8 +2952,8 @@ void CompletionLookup::getGenericRequirementCompletions(
29512952
Kind = LookupKind::GenericRequirement;
29522953
this->BaseType = selfTy;
29532954
NeedLeadingDot = false;
2954-
lookupVisibleMemberDecls(*this, MetatypeType::get(selfTy), CurrDeclContext,
2955-
IncludeInstanceMembers,
2955+
lookupVisibleMemberDecls(*this, MetatypeType::get(selfTy), DotLoc,
2956+
CurrDeclContext, IncludeInstanceMembers,
29562957
/*includeDerivedRequirements*/ false,
29572958
/*includeProtocolExtensionMembers*/ true);
29582959
// We not only allow referencing nested types/typealiases directly, but also

lib/IDE/CompletionOverrideLookup.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -541,7 +541,7 @@ void CompletionOverrideLookup::getOverrideCompletions(SourceLoc Loc) {
541541
if (CurrTy && !CurrTy->is<ErrorType>()) {
542542
// Look for overridable static members too.
543543
Type Meta = MetatypeType::get(CurrTy);
544-
lookupVisibleMemberDecls(*this, Meta, CurrDeclContext,
544+
lookupVisibleMemberDecls(*this, Meta, introducerLoc, CurrDeclContext,
545545
/*includeInstanceMembers=*/true,
546546
/*includeDerivedRequirements*/ true,
547547
/*includeProtocolExtensionMembers*/ false);

lib/IDE/ConformingMethodList.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,8 @@ void ConformingMethodListCallbacks::getMatchingMethods(
166166

167167
} LocalConsumer(CurDeclContext, T, expectedTypes, result);
168168

169-
lookupVisibleMemberDecls(LocalConsumer, MetatypeType::get(T), CurDeclContext,
169+
lookupVisibleMemberDecls(LocalConsumer, MetatypeType::get(T),
170+
Loc, CurDeclContext,
170171
/*includeInstanceMembers=*/false,
171172
/*includeDerivedRequirements*/false,
172173
/*includeProtocolExtensionMembers*/true);

lib/IDE/TypeContextInfo.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,8 @@ void ContextInfoCallbacks::getImplicitMembers(
194194

195195
} LocalConsumer(CurDeclContext, T, Result);
196196

197-
lookupVisibleMemberDecls(LocalConsumer, MetatypeType::get(T), CurDeclContext,
197+
lookupVisibleMemberDecls(LocalConsumer, MetatypeType::get(T),
198+
Loc, CurDeclContext,
198199
/*includeInstanceMembers=*/false,
199200
/*includeDerivedRequirements*/false,
200201
/*includeProtocolExtensionMembers*/true);

lib/Sema/LookupVisibleDecls.cpp

+18-17
Original file line numberDiff line numberDiff line change
@@ -1143,7 +1143,7 @@ struct KeyPathDynamicMemberConsumer : public VisibleDeclConsumer {
11431143
} // end anonymous namespace
11441144

11451145
static void lookupVisibleDynamicMemberLookupDecls(
1146-
Type baseType, KeyPathDynamicMemberConsumer &consumer,
1146+
Type baseType, SourceLoc loc, KeyPathDynamicMemberConsumer &consumer,
11471147
const DeclContext *dc, LookupState LS, DeclVisibilityKind reason,
11481148
GenericSignature Sig, VisitedSet &visited,
11491149
llvm::DenseSet<TypeBase *> &seenDynamicLookup);
@@ -1154,13 +1154,14 @@ static void lookupVisibleDynamicMemberLookupDecls(
11541154
/// \note This is an implementation detail of \c lookupVisibleMemberDecls and
11551155
/// exists to create the correct recursion for dynamic member lookup.
11561156
static void lookupVisibleMemberAndDynamicMemberDecls(
1157-
Type baseType, VisibleDeclConsumer &consumer,
1157+
Type baseType, SourceLoc loc, VisibleDeclConsumer &consumer,
11581158
KeyPathDynamicMemberConsumer &dynamicMemberConsumer, const DeclContext *DC,
11591159
LookupState LS, DeclVisibilityKind reason, GenericSignature Sig,
11601160
VisitedSet &visited, llvm::DenseSet<TypeBase *> &seenDynamicLookup) {
11611161
lookupVisibleMemberDeclsImpl(baseType, consumer, DC, LS, reason, Sig, visited);
1162-
lookupVisibleDynamicMemberLookupDecls(baseType, dynamicMemberConsumer, DC, LS,
1163-
reason, Sig, visited, seenDynamicLookup);
1162+
lookupVisibleDynamicMemberLookupDecls(baseType, loc, dynamicMemberConsumer,
1163+
DC, LS, reason, Sig, visited,
1164+
seenDynamicLookup);
11641165
}
11651166

11661167
/// Enumerates all keypath dynamic members of \c baseType, as seen from the
@@ -1170,7 +1171,7 @@ static void lookupVisibleMemberAndDynamicMemberDecls(
11701171
/// dynamic member subscripts and looks up the members of the keypath's root
11711172
/// type.
11721173
static void lookupVisibleDynamicMemberLookupDecls(
1173-
Type baseType, KeyPathDynamicMemberConsumer &consumer,
1174+
Type baseType, SourceLoc loc, KeyPathDynamicMemberConsumer &consumer,
11741175
const DeclContext *dc, LookupState LS, DeclVisibilityKind reason,
11751176
GenericSignature Sig, VisitedSet &visited,
11761177
llvm::DenseSet<TypeBase *> &seenDynamicLookup) {
@@ -1187,8 +1188,7 @@ static void lookupVisibleDynamicMemberLookupDecls(
11871188
{ ctx, DeclBaseName::createSubscript(), { ctx.Id_dynamicMember} });
11881189

11891190
SmallVector<ValueDecl *, 2> subscripts;
1190-
dc->lookupQualified(baseType, subscriptName,
1191-
baseType->getAnyNominal()->getLoc(),
1191+
dc->lookupQualified(baseType, subscriptName, loc,
11921192
NL_QualifiedDefault | NL_ProtocolMembers, subscripts);
11931193

11941194
for (ValueDecl *VD : subscripts) {
@@ -1210,9 +1210,9 @@ static void lookupVisibleDynamicMemberLookupDecls(
12101210
KeyPathDynamicMemberConsumer::SubscriptChange sub(consumer, subscript,
12111211
baseType);
12121212

1213-
lookupVisibleMemberAndDynamicMemberDecls(memberType, consumer, consumer, dc,
1214-
LS, reason, Sig, visited,
1215-
seenDynamicLookup);
1213+
lookupVisibleMemberAndDynamicMemberDecls(memberType, loc, consumer,
1214+
consumer, dc, LS, reason, Sig,
1215+
visited, seenDynamicLookup);
12161216
}
12171217
}
12181218

@@ -1223,8 +1223,9 @@ static void lookupVisibleDynamicMemberLookupDecls(
12231223
/// where 'self' is the type of 'a'. This operation is only valid after name
12241224
/// binding.
12251225
static void lookupVisibleMemberDecls(
1226-
Type BaseTy, VisibleDeclConsumer &Consumer, const DeclContext *CurrDC,
1227-
LookupState LS, DeclVisibilityKind Reason, GenericSignature Sig) {
1226+
Type BaseTy, SourceLoc loc, VisibleDeclConsumer &Consumer,
1227+
const DeclContext *CurrDC, LookupState LS,
1228+
DeclVisibilityKind Reason, GenericSignature Sig) {
12281229
OverrideFilteringConsumer overrideConsumer(BaseTy, CurrDC);
12291230
KeyPathDynamicMemberConsumer dynamicConsumer(
12301231
Consumer,
@@ -1233,7 +1234,7 @@ static void lookupVisibleMemberDecls(
12331234
VisitedSet Visited;
12341235
llvm::DenseSet<TypeBase *> seenDynamicLookup;
12351236
lookupVisibleMemberAndDynamicMemberDecls(
1236-
BaseTy, overrideConsumer, dynamicConsumer, CurrDC, LS, Reason,
1237+
BaseTy, loc, overrideConsumer, dynamicConsumer, CurrDC, LS, Reason,
12371238
Sig, Visited, seenDynamicLookup);
12381239

12391240
// Report the declarations we found to the real consumer.
@@ -1347,8 +1348,8 @@ static void lookupVisibleDeclsImpl(VisibleDeclConsumer &Consumer,
13471348
}
13481349

13491350
if (ExtendedType) {
1350-
::lookupVisibleMemberDecls(ExtendedType, Consumer, DC, LS, MemberReason,
1351-
nullptr);
1351+
::lookupVisibleMemberDecls(ExtendedType, Loc, Consumer, DC, LS,
1352+
MemberReason, nullptr);
13521353

13531354
// Going outside the current type context.
13541355
MemberReason = DeclVisibilityKind::MemberOfOutsideNominal;
@@ -1404,7 +1405,7 @@ void swift::lookupVisibleDecls(VisibleDeclConsumer &Consumer,
14041405
}
14051406

14061407
void swift::lookupVisibleMemberDecls(VisibleDeclConsumer &Consumer, Type BaseTy,
1407-
const DeclContext *CurrDC,
1408+
SourceLoc loc, const DeclContext *CurrDC,
14081409
bool includeInstanceMembers,
14091410
bool includeDerivedRequirements,
14101411
bool includeProtocolExtensionMembers,
@@ -1421,7 +1422,7 @@ void swift::lookupVisibleMemberDecls(VisibleDeclConsumer &Consumer, Type BaseTy,
14211422
ls = ls.withIncludeProtocolExtensionMembers();
14221423
}
14231424

1424-
::lookupVisibleMemberDecls(BaseTy, Consumer, CurrDC, ls,
1425+
::lookupVisibleMemberDecls(BaseTy, loc, Consumer, CurrDC, ls,
14251426
DeclVisibilityKind::MemberOfCurrentNominal,
14261427
Sig);
14271428
}

lib/Sema/TypeCheckNameLookup.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -617,7 +617,7 @@ void TypeChecker::performTypoCorrection(DeclContext *DC, DeclRefKind refKind,
617617
});
618618

619619
if (baseTypeOrNull) {
620-
lookupVisibleMemberDecls(consumer, baseTypeOrNull, DC,
620+
lookupVisibleMemberDecls(consumer, baseTypeOrNull, SourceLoc(), DC,
621621
/*includeInstanceMembers*/true,
622622
/*includeDerivedRequirements*/false,
623623
/*includeProtocolExtensionMembers*/true,

0 commit comments

Comments
 (0)