Skip to content

Commit 161f672

Browse files
committed
Merge remote-tracking branch 'origin/main' into rebranch
2 parents d1ee673 + 021cdd4 commit 161f672

File tree

10 files changed

+95
-88
lines changed

10 files changed

+95
-88
lines changed

include/swift/IDE/SourceEntityWalker.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ class SourceEntityWalker {
140140
/// refers to.
141141
/// \param ExtTyRef this is set when the entity is a reference to a type loc
142142
/// in \c ExtensionDecl.
143-
virtual bool visitDeclReference(ValueDecl *D, CharSourceRange Range,
143+
virtual bool visitDeclReference(ValueDecl *D, SourceRange Range,
144144
TypeDecl *CtorTyRef, ExtensionDecl *ExtTyRef,
145145
Type T, ReferenceMetaData Data);
146146

@@ -156,7 +156,7 @@ class SourceEntityWalker {
156156
/// \param Data whether this is a read, write or read/write access, etc.
157157
/// \param IsOpenBracket this is \c true when the method is called on an
158158
/// open bracket.
159-
virtual bool visitSubscriptReference(ValueDecl *D, CharSourceRange Range,
159+
virtual bool visitSubscriptReference(ValueDecl *D, SourceRange Range,
160160
ReferenceMetaData Data,
161161
bool IsOpenBracket);
162162

@@ -167,7 +167,7 @@ class SourceEntityWalker {
167167
/// \param D the referenced decl.
168168
/// \param Range the source range of the source reference.
169169
/// \param Data whether this is a read, write or read/write access, etc.
170-
virtual bool visitCallAsFunctionReference(ValueDecl *D, CharSourceRange Range,
170+
virtual bool visitCallAsFunctionReference(ValueDecl *D, SourceRange Range,
171171
ReferenceMetaData Data);
172172

173173
/// This method is called for each keyword argument in a call expression.

lib/FrontendTool/LoadedModuleTrace.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -829,9 +829,9 @@ bool swift::emitLoadedModuleTraceIfNeeded(ModuleDecl *mainModule,
829829
class ObjcMethodReferenceCollector: public SourceEntityWalker {
830830
unsigned CurrentFileID;
831831
llvm::DenseMap<const clang::ObjCMethodDecl*, unsigned> results;
832-
bool visitDeclReference(ValueDecl *D, CharSourceRange Range,
833-
TypeDecl *CtorTyRef, ExtensionDecl *ExtTyRef,
834-
Type T, ReferenceMetaData Data) override {
832+
bool visitDeclReference(ValueDecl *D, SourceRange Range, TypeDecl *CtorTyRef,
833+
ExtensionDecl *ExtTyRef, Type T,
834+
ReferenceMetaData Data) override {
835835
if (!Range.isValid())
836836
return true;
837837
if (auto *clangD = dyn_cast_or_null<clang::ObjCMethodDecl>(D->getClangDecl()))

lib/IDE/IDERequests.cpp

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ class CursorInfoResolver : public SourceEntityWalker {
8989
bool walkToDeclPost(Decl *D) override;
9090
bool walkToStmtPre(Stmt *S) override;
9191
bool walkToStmtPost(Stmt *S) override;
92-
bool visitDeclReference(ValueDecl *D, CharSourceRange Range,
93-
TypeDecl *CtorTyRef, ExtensionDecl *ExtTyRef, Type T,
92+
bool visitDeclReference(ValueDecl *D, SourceRange Range, TypeDecl *CtorTyRef,
93+
ExtensionDecl *ExtTyRef, Type T,
9494
ReferenceMetaData Data) override;
9595
bool visitCallArgName(Identifier Name, CharSourceRange Range,
9696
ValueDecl *D) override;
@@ -105,7 +105,7 @@ class CursorInfoResolver : public SourceEntityWalker {
105105
std::optional<ReferenceMetaData> Data = std::nullopt);
106106
bool tryResolve(ModuleEntity Mod, SourceLoc Loc);
107107
bool tryResolve(Stmt *St);
108-
bool visitSubscriptReference(ValueDecl *D, CharSourceRange Range,
108+
bool visitSubscriptReference(ValueDecl *D, SourceRange Range,
109109
ReferenceMetaData Data,
110110
bool IsOpenBracket) override;
111111
};
@@ -210,7 +210,7 @@ bool CursorInfoResolver::tryResolve(Stmt *St) {
210210
}
211211

212212
bool CursorInfoResolver::visitSubscriptReference(ValueDecl *D,
213-
CharSourceRange Range,
213+
SourceRange Range,
214214
ReferenceMetaData Data,
215215
bool IsOpenBracket) {
216216
// We should treat both open and close brackets equally
@@ -301,16 +301,16 @@ bool CursorInfoResolver::walkToStmtPost(Stmt *S) {
301301
return true;
302302
}
303303

304-
bool CursorInfoResolver::visitDeclReference(ValueDecl *D,
305-
CharSourceRange Range,
304+
bool CursorInfoResolver::visitDeclReference(ValueDecl *D, SourceRange Range,
306305
TypeDecl *CtorTyRef,
307306
ExtensionDecl *ExtTyRef, Type T,
308307
ReferenceMetaData Data) {
309308
if (isDone())
310309
return false;
311310
if (Data.isImplicit || !Range.isValid())
312311
return true;
313-
return !tryResolve(D, CtorTyRef, ExtTyRef, Range.getStart(), /*IsRef=*/true, T, Data);
312+
return !tryResolve(D, CtorTyRef, ExtTyRef, Range.Start, /*IsRef=*/true, T,
313+
Data);
314314
}
315315

316316
static bool isCursorOn(Expr *E, SourceLoc Loc) {
@@ -461,8 +461,8 @@ class RangeResolver : public SourceEntityWalker {
461461
bool walkToStmtPost(Stmt *S) override;
462462
bool walkToDeclPre(Decl *D, CharSourceRange Range) override;
463463
bool walkToDeclPost(Decl *D) override;
464-
bool visitDeclReference(ValueDecl *D, CharSourceRange Range,
465-
TypeDecl *CtorTyRef, ExtensionDecl *ExtTyRef, Type T,
464+
bool visitDeclReference(ValueDecl *D, SourceRange Range, TypeDecl *CtorTyRef,
465+
ExtensionDecl *ExtTyRef, Type T,
466466
ReferenceMetaData Data) override;
467467
ResolvedRangeInfo moveArrayToASTContext(ResolvedRangeInfo Info);
468468
public:
@@ -799,12 +799,13 @@ struct RangeResolver::Implementation {
799799
Impl->analyzeDecl(D);
800800
return true;
801801
}
802-
bool visitDeclReference(ValueDecl *D, CharSourceRange Range,
803-
TypeDecl *CtorTyRef, ExtensionDecl *ExtTyRef, Type T,
804-
ReferenceMetaData Data) override {
805-
Impl->analyzeDeclRef(D, Range.getStart(), T, Data);
802+
bool visitDeclReference(ValueDecl *D, SourceRange Range,
803+
TypeDecl *CtorTyRef, ExtensionDecl *ExtTyRef,
804+
Type T, ReferenceMetaData Data) override {
805+
Impl->analyzeDeclRef(D, Range.Start, T, Data);
806806
return true;
807807
}
808+
808809
public:
809810
CompleteWalker(Implementation *Impl) : Impl(Impl) {}
810811
};
@@ -813,11 +814,11 @@ struct RangeResolver::Implementation {
813814
/// decls in the range is referenced after it.
814815
class FurtherReferenceWalker : public SourceEntityWalker {
815816
Implementation *Impl;
816-
bool visitDeclReference(ValueDecl *D, CharSourceRange Range,
817-
TypeDecl *CtorTyRef, ExtensionDecl *ExtTyRef, Type T,
818-
ReferenceMetaData Data) override {
817+
bool visitDeclReference(ValueDecl *D, SourceRange Range,
818+
TypeDecl *CtorTyRef, ExtensionDecl *ExtTyRef,
819+
Type T, ReferenceMetaData Data) override {
819820
// If the reference is after the given range, continue logic.
820-
if (!Impl->SM.isBeforeInBuffer(Impl->End, Range.getStart()))
821+
if (!Impl->SM.isBeforeInBuffer(Impl->End, Range.Start))
821822
return true;
822823

823824
// If the referenced decl is declared in the range, than the declared decl
@@ -829,6 +830,7 @@ struct RangeResolver::Implementation {
829830
}
830831
return true;
831832
}
833+
832834
public:
833835
FurtherReferenceWalker(Implementation *Impl) : Impl(Impl) {}
834836
};
@@ -1140,11 +1142,11 @@ bool RangeResolver::walkToDeclPost(Decl *D) {
11401142
return !Impl->hasResult();
11411143
}
11421144

1143-
1144-
bool RangeResolver::
1145-
visitDeclReference(ValueDecl *D, CharSourceRange Range, TypeDecl *CtorTyRef,
1146-
ExtensionDecl *ExtTyRef, Type T, ReferenceMetaData Data) {
1147-
Impl->analyzeDeclRef(D, Range.getStart(), T, Data);
1145+
bool RangeResolver::visitDeclReference(ValueDecl *D, SourceRange Range,
1146+
TypeDecl *CtorTyRef,
1147+
ExtensionDecl *ExtTyRef, Type T,
1148+
ReferenceMetaData Data) {
1149+
Impl->analyzeDeclRef(D, Range.Start, T, Data);
11481150
return true;
11491151
}
11501152

lib/IDE/SourceEntityWalker.cpp

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -851,28 +851,19 @@ bool SemaAnnotator::passModulePathElements(
851851
bool SemaAnnotator::passSubscriptReference(ValueDecl *D, SourceLoc Loc,
852852
ReferenceMetaData Data,
853853
bool IsOpenBracket) {
854-
CharSourceRange Range = Loc.isValid()
855-
? CharSourceRange(Loc, 1)
856-
: CharSourceRange();
857-
858-
return SEWalker.visitSubscriptReference(D, Range, Data, IsOpenBracket);
854+
return SEWalker.visitSubscriptReference(D, Loc, Data, IsOpenBracket);
859855
}
860856

861857
bool SemaAnnotator::passCallAsFunctionReference(ValueDecl *D, SourceLoc Loc,
862858
ReferenceMetaData Data) {
863-
CharSourceRange Range =
864-
Loc.isValid() ? CharSourceRange(Loc, 1) : CharSourceRange();
865-
866-
return SEWalker.visitCallAsFunctionReference(D, Range, Data);
859+
return SEWalker.visitCallAsFunctionReference(D, Loc, Data);
867860
}
868861

869862
bool SemaAnnotator::
870863
passReference(ValueDecl *D, Type Ty, DeclNameLoc Loc, ReferenceMetaData Data) {
871864
SourceManager &SM = D->getASTContext().SourceMgr;
872865
SourceLoc BaseStart = Loc.getBaseNameLoc(), BaseEnd = BaseStart;
873-
if (BaseStart.isValid() && SM.extractText({BaseStart, 1}) == "`")
874-
BaseEnd = Lexer::getLocForEndOfToken(SM, BaseStart.getAdvancedLoc(1));
875-
return passReference(D, Ty, BaseStart, {BaseStart, BaseEnd}, Data);
866+
return passReference(D, Ty, Loc.getBaseNameLoc(), Loc.getSourceRange(), Data);
876867
}
877868

878869
bool SemaAnnotator::
@@ -917,12 +908,7 @@ passReference(ValueDecl *D, Type Ty, SourceLoc BaseNameLoc, SourceRange Range,
917908
}
918909
}
919910

920-
CharSourceRange CharRange =
921-
Lexer::getCharSourceRangeFromSourceRange(D->getASTContext().SourceMgr,
922-
Range);
923-
924-
return SEWalker.visitDeclReference(D, CharRange, CtorTyRef, ExtDecl, Ty,
925-
Data);
911+
return SEWalker.visitDeclReference(D, Range, CtorTyRef, ExtDecl, Ty, Data);
926912
}
927913

928914
bool SemaAnnotator::passReference(ModuleEntity Mod,
@@ -1023,15 +1009,15 @@ bool SourceEntityWalker::walk(ASTNode N) {
10231009
llvm_unreachable("unsupported AST node");
10241010
}
10251011

1026-
bool SourceEntityWalker::visitDeclReference(ValueDecl *D, CharSourceRange Range,
1012+
bool SourceEntityWalker::visitDeclReference(ValueDecl *D, SourceRange Range,
10271013
TypeDecl *CtorTyRef,
10281014
ExtensionDecl *ExtTyRef, Type T,
10291015
ReferenceMetaData Data) {
10301016
return true;
10311017
}
10321018

10331019
bool SourceEntityWalker::visitSubscriptReference(ValueDecl *D,
1034-
CharSourceRange Range,
1020+
SourceRange Range,
10351021
ReferenceMetaData Data,
10361022
bool IsOpenBracket) {
10371023
// Most of the clients treat subscript reference the same way as a
@@ -1043,7 +1029,7 @@ bool SourceEntityWalker::visitSubscriptReference(ValueDecl *D,
10431029
}
10441030

10451031
bool SourceEntityWalker::visitCallAsFunctionReference(ValueDecl *D,
1046-
CharSourceRange Range,
1032+
SourceRange Range,
10471033
ReferenceMetaData Data) {
10481034
return true;
10491035
}

lib/Index/Index.cpp

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#include "swift/IDE/SourceEntityWalker.h"
3434
#include "swift/IDE/Utils.h"
3535
#include "swift/Markup/Markup.h"
36+
#include "swift/Parse/Lexer.h"
3637
#include "swift/Sema/IDETypeChecking.h"
3738
#include "llvm/ADT/APInt.h"
3839
#include "llvm/ADT/SmallVector.h"
@@ -875,10 +876,10 @@ class IndexSwiftASTWalker : public SourceEntityWalker {
875876
llvm_unreachable("Can't find the generic parameter in the extended type");
876877
}
877878

878-
bool visitDeclReference(ValueDecl *D, CharSourceRange Range,
879-
TypeDecl *CtorTyRef, ExtensionDecl *ExtTyRef, Type T,
879+
bool visitDeclReference(ValueDecl *D, SourceRange Range, TypeDecl *CtorTyRef,
880+
ExtensionDecl *ExtTyRef, Type T,
880881
ReferenceMetaData Data) override {
881-
SourceLoc Loc = Range.getStart();
882+
SourceLoc Loc = Range.Start;
882883

883884
if (Loc.isInvalid() || isSuppressed(Loc))
884885
return true;
@@ -918,15 +919,18 @@ class IndexSwiftASTWalker : public SourceEntityWalker {
918919
// report an occurrence of `foo` in `_foo` and '$foo').
919920
if (auto *VD = dyn_cast<VarDecl>(D)) {
920921
if (auto *Wrapped = VD->getOriginalWrappedProperty()) {
921-
assert(Range.getByteLength() > 1);
922-
if (Range.str().front() == '`') {
923-
assert(Range.getByteLength() > 3);
924-
assert(Range.str().starts_with("`_") ||
925-
Range.str().starts_with("`$"));
922+
CharSourceRange CharRange = Lexer::getCharSourceRangeFromSourceRange(
923+
D->getASTContext().SourceMgr, Range);
924+
assert(CharRange.getByteLength() > 1);
925+
if (CharRange.str().front() == '`') {
926+
assert(CharRange.getByteLength() > 3);
927+
assert(CharRange.str().starts_with("`_") ||
928+
CharRange.str().starts_with("`$"));
926929
auto AfterBacktick = Loc.getAdvancedLoc(2);
927930
reportRef(Wrapped, AfterBacktick, Info, std::nullopt);
928931
} else {
929-
assert(Range.str().front() == '_' || Range.str().front() == '$');
932+
assert(CharRange.str().front() == '_' ||
933+
CharRange.str().front() == '$');
930934
auto AfterDollar = Loc.getAdvancedLoc(1);
931935
reportRef(Wrapped, AfterDollar, Info, std::nullopt);
932936
}
@@ -960,7 +964,7 @@ class IndexSwiftASTWalker : public SourceEntityWalker {
960964
return finishSourceEntity(Info.symInfo, Info.roles);
961965
}
962966

963-
bool visitCallAsFunctionReference(ValueDecl *D, CharSourceRange Range,
967+
bool visitCallAsFunctionReference(ValueDecl *D, SourceRange Range,
964968
ReferenceMetaData Data) override {
965969
// Index implicit callAsFunction reference.
966970
return visitDeclReference(D, Range, /*CtorTyRef*/ nullptr,

lib/Migrator/APIDiffMigratorPass.cpp

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -468,16 +468,18 @@ struct APIDiffMigratorPass : public ASTMigratorPass, public SourceEntityWalker {
468468
}
469469
}
470470

471-
bool visitDeclReference(ValueDecl *D, CharSourceRange Range,
472-
TypeDecl *CtorTyRef, ExtensionDecl *ExtTyRef,
473-
Type T, ReferenceMetaData Data) override {
471+
bool visitDeclReference(ValueDecl *D, SourceRange Range, TypeDecl *CtorTyRef,
472+
ExtensionDecl *ExtTyRef, Type T,
473+
ReferenceMetaData Data) override {
474+
CharSourceRange CharRange = Lexer::getCharSourceRangeFromSourceRange(
475+
D->getASTContext().SourceMgr, Range);
474476
if (Data.isImplicit)
475477
return true;
476478

477479
for (auto *Item: getRelatedDiffItems(CtorTyRef ? CtorTyRef: D)) {
478480
std::string RepText;
479-
if (isSimpleReplacement(Item, isDotMember(Range), RepText)) {
480-
Editor.replace(Range, RepText);
481+
if (isSimpleReplacement(Item, isDotMember(CharRange), RepText)) {
482+
Editor.replace(CharRange, RepText);
481483
return true;
482484
}
483485
}
@@ -488,11 +490,12 @@ struct APIDiffMigratorPass : public ASTMigratorPass, public SourceEntityWalker {
488490
ValueDecl *Target;
489491
CharSourceRange Result;
490492
ReferenceCollector(ValueDecl* Target) : Target(Target) {}
491-
bool visitDeclReference(ValueDecl *D, CharSourceRange Range,
493+
bool visitDeclReference(ValueDecl *D, SourceRange Range,
492494
TypeDecl *CtorTyRef, ExtensionDecl *ExtTyRef,
493495
Type T, ReferenceMetaData Data) override {
494496
if (D == Target && !Data.isImplicit && Range.isValid()) {
495-
Result = Range;
497+
Result = Lexer::getCharSourceRangeFromSourceRange(
498+
D->getASTContext().SourceMgr, Range);
496499
return false;
497500
}
498501
return true;

lib/Refactoring/ExtractExprBase.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ struct ReferenceCollector : public SourceEntityWalker {
2626
SmallVector<ValueDecl *, 4> References;
2727

2828
ReferenceCollector(Expr *E) { walk(E); }
29-
bool visitDeclReference(ValueDecl *D, CharSourceRange Range,
30-
TypeDecl *CtorTyRef, ExtensionDecl *ExtTyRef, Type T,
29+
bool visitDeclReference(ValueDecl *D, SourceRange Range, TypeDecl *CtorTyRef,
30+
ExtensionDecl *ExtTyRef, Type T,
3131
ReferenceMetaData Data) override {
3232
References.emplace_back(D);
3333
return true;

tools/SourceKit/lib/SwiftLang/SwiftDocSupport.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1203,21 +1203,24 @@ class SourceDocASTWalker : public SourceEntityWalker {
12031203
return true;
12041204
}
12051205

1206-
bool visitDeclReference(ValueDecl *D, CharSourceRange Range,
1207-
TypeDecl *CtorTyRef, ExtensionDecl *ExtTyRef, Type Ty,
1206+
bool visitDeclReference(ValueDecl *D, SourceRange Range, TypeDecl *CtorTyRef,
1207+
ExtensionDecl *ExtTyRef, Type Ty,
12081208
ReferenceMetaData Data) override {
12091209
if (Data.isImplicit || !Range.isValid())
12101210
return true;
12111211
// Ignore things that don't come from this buffer.
1212-
if (!SM.getRangeForBuffer(BufferID).contains(Range.getStart()))
1212+
if (!SM.getRangeForBuffer(BufferID).contains(Range.Start))
12131213
return true;
12141214

1215-
unsigned StartOffset = getOffset(Range.getStart());
1216-
References.emplace_back(D, StartOffset, Range.getByteLength(), Ty);
1215+
CharSourceRange CharRange = Lexer::getCharSourceRangeFromSourceRange(
1216+
D->getASTContext().SourceMgr, Range);
1217+
1218+
unsigned StartOffset = getOffset(CharRange.getStart());
1219+
References.emplace_back(D, StartOffset, CharRange.getByteLength(), Ty);
12171220
return true;
12181221
}
12191222

1220-
bool visitSubscriptReference(ValueDecl *D, CharSourceRange Range,
1223+
bool visitSubscriptReference(ValueDecl *D, SourceRange Range,
12211224
ReferenceMetaData Data,
12221225
bool IsOpenBracket) override {
12231226
// Treat both open and close brackets equally

0 commit comments

Comments
 (0)