Skip to content

Commit b59f1e0

Browse files
committed
[SourceKit] Refactor RelatedIdentsInfo
Remove unnecessary `ArrayRef` wrapping and introduce a struct instead of a `std::pair`.
1 parent 0946bce commit b59f1e0

File tree

4 files changed

+29
-24
lines changed

4 files changed

+29
-24
lines changed

tools/SourceKit/include/SourceKit/Core/LangSupport.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -781,9 +781,9 @@ struct SemanticRefactoringInfo {
781781
StringRef PreferredName;
782782
};
783783

784-
struct RelatedIdentsInfo {
785-
/// (Offset,Length) pairs.
786-
ArrayRef<std::pair<unsigned, unsigned>> Ranges;
784+
struct RelatedIdentInfo {
785+
unsigned Offset;
786+
unsigned Length;
787787
};
788788

789789
/// Represent one branch of an if config.
@@ -1170,7 +1170,7 @@ class LangSupport {
11701170
StringRef PrimaryFilePath, StringRef InputBufferName, unsigned Offset,
11711171
bool CancelOnSubsequentRequest, ArrayRef<const char *> Args,
11721172
SourceKitCancellationToken CancellationToken,
1173-
std::function<void(const RequestResult<RelatedIdentsInfo> &)>
1173+
std::function<void(const RequestResult<ArrayRef<RelatedIdentInfo>> &)>
11741174
Receiver) = 0;
11751175

11761176
virtual void findActiveRegionsInFile(

tools/SourceKit/lib/SwiftLang/SwiftLangSupport.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -684,8 +684,8 @@ class SwiftLangSupport : public LangSupport {
684684
StringRef PrimaryFilePath, StringRef InputBufferName, unsigned Offset,
685685
bool CancelOnSubsequentRequest, ArrayRef<const char *> Args,
686686
SourceKitCancellationToken CancellationToken,
687-
std::function<void(const RequestResult<RelatedIdentsInfo> &)> Receiver)
688-
override;
687+
std::function<void(const RequestResult<ArrayRef<RelatedIdentInfo>> &)>
688+
Receiver) override;
689689

690690
void findActiveRegionsInFile(
691691
StringRef PrimaryFilePath, StringRef InputBufferName,

tools/SourceKit/lib/SwiftLang/SwiftSourceDocInfo.cpp

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2493,27 +2493,30 @@ void SwiftLangSupport::findRelatedIdentifiersInFile(
24932493
StringRef PrimaryFilePath, StringRef InputBufferName, unsigned Offset,
24942494
bool CancelOnSubsequentRequest, ArrayRef<const char *> Args,
24952495
SourceKitCancellationToken CancellationToken,
2496-
std::function<void(const RequestResult<RelatedIdentsInfo> &)> Receiver) {
2496+
std::function<void(const RequestResult<ArrayRef<RelatedIdentInfo>> &)>
2497+
Receiver) {
24972498

24982499
std::string Error;
24992500
SwiftInvocationRef Invok =
25002501
ASTMgr->getTypecheckInvocation(Args, PrimaryFilePath, Error);
25012502
if (!Invok) {
25022503
LOG_WARN_FUNC("failed to create an ASTInvocation: " << Error);
2503-
Receiver(RequestResult<RelatedIdentsInfo>::fromError(Error));
2504+
Receiver(RequestResult<ArrayRef<RelatedIdentInfo>>::fromError(Error));
25042505
return;
25052506
}
25062507

25072508
class RelatedIdConsumer : public SwiftASTConsumer {
25082509
std::string InputFile;
25092510
unsigned Offset;
2510-
std::function<void(const RequestResult<RelatedIdentsInfo> &)> Receiver;
2511+
std::function<void(const RequestResult<ArrayRef<RelatedIdentInfo>> &)>
2512+
Receiver;
25112513
SwiftInvocationRef Invok;
25122514

25132515
public:
25142516
RelatedIdConsumer(
25152517
StringRef InputFile, unsigned Offset,
2516-
std::function<void(const RequestResult<RelatedIdentsInfo> &)> Receiver,
2518+
std::function<void(const RequestResult<ArrayRef<RelatedIdentInfo>> &)>
2519+
Receiver,
25172520
SwiftInvocationRef Invok)
25182521
: InputFile(InputFile.str()), Offset(Offset),
25192522
Receiver(std::move(Receiver)), Invok(Invok) {}
@@ -2528,12 +2531,12 @@ void SwiftLangSupport::findRelatedIdentifiersInFile(
25282531

25292532
auto *SrcFile = retrieveInputFile(InputFile, CompInst);
25302533
if (!SrcFile) {
2531-
Receiver(RequestResult<RelatedIdentsInfo>::fromError(
2534+
Receiver(RequestResult<ArrayRef<RelatedIdentInfo>>::fromError(
25322535
"Unable to find input file"));
25332536
return;
25342537
}
25352538

2536-
SmallVector<std::pair<unsigned, unsigned>, 8> Ranges;
2539+
SmallVector<RelatedIdentInfo, 8> Ranges;
25372540

25382541
auto Action = [&]() {
25392542
unsigned BufferID = SrcFile->getBufferID().value();
@@ -2583,29 +2586,30 @@ void SwiftLangSupport::findRelatedIdentifiersInFile(
25832586
std::vector<ResolvedLoc> ResolvedLocs = resolveRenameLocations(
25842587
Locs.getLocations(), /*NewName=*/StringRef(), *SrcFile, Diags);
25852588

2586-
for (auto ResolvedLoc : ResolvedLocs) {
2589+
assert(ResolvedLocs.size() == Locs.getLocations().size());
2590+
for (size_t index = 0; index < ResolvedLocs.size(); ++index) {
2591+
auto RenameLoc = Locs.getLocations()[index];
2592+
auto ResolvedLoc = ResolvedLocs[index];
25872593
if (ResolvedLoc.range.isInvalid()) {
25882594
continue;
25892595
}
25902596
unsigned Offset = SrcMgr.getLocOffsetInBuffer(
25912597
ResolvedLoc.range.getStart(), BufferID);
2592-
Ranges.emplace_back(Offset, ResolvedLoc.range.getByteLength());
2598+
Ranges.push_back({Offset, ResolvedLoc.range.getByteLength()});
25932599
}
25942600
};
25952601
Action();
2596-
RelatedIdentsInfo Info;
2597-
Info.Ranges = Ranges;
2598-
Receiver(RequestResult<RelatedIdentsInfo>::fromResult(Info));
2602+
Receiver(RequestResult<ArrayRef<RelatedIdentInfo>>::fromResult(Ranges));
25992603
#endif
26002604
}
26012605

26022606
void cancelled() override {
2603-
Receiver(RequestResult<RelatedIdentsInfo>::cancelled());
2607+
Receiver(RequestResult<ArrayRef<RelatedIdentInfo>>::cancelled());
26042608
}
26052609

26062610
void failed(StringRef Error) override {
26072611
LOG_WARN_FUNC("related idents failed: " << Error);
2608-
Receiver(RequestResult<RelatedIdentsInfo>::fromError(Error));
2612+
Receiver(RequestResult<ArrayRef<RelatedIdentInfo>>::fromError(Error));
26092613
}
26102614

26112615
static CaseStmt *getCaseStmtOfCanonicalVar(Decl *D) {

tools/SourceKit/tools/sourcekitd/lib/Service/Requests.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2867,20 +2867,21 @@ static void findRelatedIdents(StringRef PrimaryFilePath,
28672867
LangSupport &Lang = getGlobalContext().getSwiftLangSupport();
28682868
Lang.findRelatedIdentifiersInFile(
28692869
PrimaryFilePath, InputBufferName, Offset, CancelOnSubsequentRequest, Args,
2870-
CancellationToken, [Rec](const RequestResult<RelatedIdentsInfo> &Result) {
2870+
CancellationToken,
2871+
[Rec](const RequestResult<ArrayRef<RelatedIdentInfo>> &Result) {
28712872
if (Result.isCancelled())
28722873
return Rec(createErrorRequestCancelled());
28732874
if (Result.isError())
28742875
return Rec(createErrorRequestFailed(Result.getError()));
28752876

2876-
const RelatedIdentsInfo &Info = Result.value();
2877+
const ArrayRef<RelatedIdentInfo> &Info = Result.value();
28772878

28782879
ResponseBuilder RespBuilder;
28792880
auto Arr = RespBuilder.getDictionary().setArray(KeyResults);
2880-
for (auto R : Info.Ranges) {
2881+
for (auto R : Info) {
28812882
auto Elem = Arr.appendDictionary();
2882-
Elem.set(KeyOffset, R.first);
2883-
Elem.set(KeyLength, R.second);
2883+
Elem.set(KeyOffset, R.Offset);
2884+
Elem.set(KeyLength, R.Length);
28842885
}
28852886

28862887
Rec(RespBuilder.createResponse());

0 commit comments

Comments
 (0)