[clang-tools-extra] Revert "[clangd] Support outgoing calls in call hierarchy (#77556)" (PR #117668)
Nathan Ridge via cfe-commits
cfe-commits at lists.llvm.org
Mon Nov 25 21:08:25 PST 2024
https://github.com/HighCommander4 created https://github.com/llvm/llvm-project/pull/117668
This reverts commit ca184cfc088a843e545e5f04b48813e6f9bfba77.
>From 08003a8cc09ad8a6afab582be0d90078d84e617b Mon Sep 17 00:00:00 2001
From: Nathan Ridge <zeratul976 at hotmail.com>
Date: Tue, 26 Nov 2024 00:07:31 -0500
Subject: [PATCH] Revert "[clangd] Support outgoing calls in call hierarchy
(#77556)"
This reverts commit ca184cfc088a843e545e5f04b48813e6f9bfba77.
---
clang-tools-extra/clangd/ClangdLSPServer.cpp | 7 -
clang-tools-extra/clangd/ClangdLSPServer.h | 3 -
clang-tools-extra/clangd/ClangdServer.cpp | 9 -
clang-tools-extra/clangd/ClangdServer.h | 4 -
clang-tools-extra/clangd/XRefs.cpp | 59 ----
clang-tools-extra/clangd/XRefs.h | 3 -
clang-tools-extra/clangd/index/Index.cpp | 5 -
clang-tools-extra/clangd/index/Index.h | 35 ---
clang-tools-extra/clangd/index/MemIndex.cpp | 20 --
clang-tools-extra/clangd/index/MemIndex.h | 4 -
clang-tools-extra/clangd/index/Merge.cpp | 34 ---
clang-tools-extra/clangd/index/Merge.h | 3 -
.../clangd/index/ProjectAware.cpp | 13 -
clang-tools-extra/clangd/index/Ref.h | 3 -
.../clangd/index/SymbolCollector.cpp | 20 +-
.../clangd/index/SymbolCollector.h | 1 -
clang-tools-extra/clangd/index/dex/Dex.cpp | 42 ---
clang-tools-extra/clangd/index/dex/Dex.h | 20 --
.../clangd/test/type-hierarchy-ext.test | 2 -
.../clangd/test/type-hierarchy.test | 2 -
.../clangd/unittests/CallHierarchyTests.cpp | 271 +++++-------------
.../clangd/unittests/CodeCompleteTests.cpp | 6 -
.../clangd/unittests/RenameTests.cpp | 12 -
23 files changed, 73 insertions(+), 505 deletions(-)
diff --git a/clang-tools-extra/clangd/ClangdLSPServer.cpp b/clang-tools-extra/clangd/ClangdLSPServer.cpp
index 1391dcaa0c81a4..05dd313d0a0d35 100644
--- a/clang-tools-extra/clangd/ClangdLSPServer.cpp
+++ b/clang-tools-extra/clangd/ClangdLSPServer.cpp
@@ -1415,12 +1415,6 @@ void ClangdLSPServer::onInlayHint(const InlayHintsParams &Params,
std::move(Reply));
}
-void ClangdLSPServer::onCallHierarchyOutgoingCalls(
- const CallHierarchyOutgoingCallsParams &Params,
- Callback<std::vector<CallHierarchyOutgoingCall>> Reply) {
- Server->outgoingCalls(Params.item, std::move(Reply));
-}
-
void ClangdLSPServer::applyConfiguration(
const ConfigurationSettings &Settings) {
// Per-file update to the compilation database.
@@ -1699,7 +1693,6 @@ void ClangdLSPServer::bindMethods(LSPBinder &Bind,
Bind.method("typeHierarchy/subtypes", this, &ClangdLSPServer::onSubTypes);
Bind.method("textDocument/prepareCallHierarchy", this, &ClangdLSPServer::onPrepareCallHierarchy);
Bind.method("callHierarchy/incomingCalls", this, &ClangdLSPServer::onCallHierarchyIncomingCalls);
- Bind.method("callHierarchy/outgoingCalls", this, &ClangdLSPServer::onCallHierarchyOutgoingCalls);
Bind.method("textDocument/selectionRange", this, &ClangdLSPServer::onSelectionRange);
Bind.method("textDocument/documentLink", this, &ClangdLSPServer::onDocumentLink);
Bind.method("textDocument/semanticTokens/full", this, &ClangdLSPServer::onSemanticTokens);
diff --git a/clang-tools-extra/clangd/ClangdLSPServer.h b/clang-tools-extra/clangd/ClangdLSPServer.h
index 597fd9de7ff688..0b8e4720f53236 100644
--- a/clang-tools-extra/clangd/ClangdLSPServer.h
+++ b/clang-tools-extra/clangd/ClangdLSPServer.h
@@ -156,9 +156,6 @@ class ClangdLSPServer : private ClangdServer::Callbacks,
void onCallHierarchyIncomingCalls(
const CallHierarchyIncomingCallsParams &,
Callback<std::vector<CallHierarchyIncomingCall>>);
- void onCallHierarchyOutgoingCalls(
- const CallHierarchyOutgoingCallsParams &,
- Callback<std::vector<CallHierarchyOutgoingCall>>);
void onClangdInlayHints(const InlayHintsParams &,
Callback<llvm::json::Value>);
void onInlayHint(const InlayHintsParams &, Callback<std::vector<InlayHint>>);
diff --git a/clang-tools-extra/clangd/ClangdServer.cpp b/clang-tools-extra/clangd/ClangdServer.cpp
index 63f83bc36f0c69..9b38be04e7ddd7 100644
--- a/clang-tools-extra/clangd/ClangdServer.cpp
+++ b/clang-tools-extra/clangd/ClangdServer.cpp
@@ -912,15 +912,6 @@ void ClangdServer::inlayHints(PathRef File, std::optional<Range> RestrictRange,
WorkScheduler->runWithAST("InlayHints", File, std::move(Action), Transient);
}
-void ClangdServer::outgoingCalls(
- const CallHierarchyItem &Item,
- Callback<std::vector<CallHierarchyOutgoingCall>> CB) {
- WorkScheduler->run("Outgoing Calls", "",
- [CB = std::move(CB), Item, this]() mutable {
- CB(clangd::outgoingCalls(Item, Index));
- });
-}
-
void ClangdServer::onFileEvent(const DidChangeWatchedFilesParams &Params) {
// FIXME: Do nothing for now. This will be used for indexing and potentially
// invalidating other caches.
diff --git a/clang-tools-extra/clangd/ClangdServer.h b/clang-tools-extra/clangd/ClangdServer.h
index 8b6618cf96ccfc..a653cdb56b751b 100644
--- a/clang-tools-extra/clangd/ClangdServer.h
+++ b/clang-tools-extra/clangd/ClangdServer.h
@@ -292,10 +292,6 @@ class ClangdServer {
void incomingCalls(const CallHierarchyItem &Item,
Callback<std::vector<CallHierarchyIncomingCall>>);
- /// Resolve outgoing calls for a given call hierarchy item.
- void outgoingCalls(const CallHierarchyItem &Item,
- Callback<std::vector<CallHierarchyOutgoingCall>>);
-
/// Resolve inlay hints for a given document.
void inlayHints(PathRef File, std::optional<Range> RestrictRange,
Callback<std::vector<InlayHint>>);
diff --git a/clang-tools-extra/clangd/XRefs.cpp b/clang-tools-extra/clangd/XRefs.cpp
index d237d95b3eb655..61fa66180376cd 100644
--- a/clang-tools-extra/clangd/XRefs.cpp
+++ b/clang-tools-extra/clangd/XRefs.cpp
@@ -1702,7 +1702,6 @@ declToHierarchyItem(const NamedDecl &ND, llvm::StringRef TUPath) {
HierarchyItem HI;
HI.name = printName(Ctx, ND);
- // FIXME: Populate HI.detail the way we do in symbolToHierarchyItem?
HI.kind = SK;
HI.range = Range{sourceLocToPosition(SM, DeclRange->getBegin()),
sourceLocToPosition(SM, DeclRange->getEnd())};
@@ -1754,7 +1753,6 @@ static std::optional<HierarchyItem> symbolToHierarchyItem(const Symbol &S,
}
HierarchyItem HI;
HI.name = std::string(S.Name);
- HI.detail = (S.Scope + S.Name).str();
HI.kind = indexSymbolKindToSymbolKind(S.SymInfo.Kind);
HI.selectionRange = Loc->range;
// FIXME: Populate 'range' correctly
@@ -2321,63 +2319,6 @@ incomingCalls(const CallHierarchyItem &Item, const SymbolIndex *Index) {
return Results;
}
-std::vector<CallHierarchyOutgoingCall>
-outgoingCalls(const CallHierarchyItem &Item, const SymbolIndex *Index) {
- std::vector<CallHierarchyOutgoingCall> Results;
- if (!Index || Item.data.empty())
- return Results;
- auto ID = SymbolID::fromStr(Item.data);
- if (!ID) {
- elog("outgoingCalls failed to find symbol: {0}", ID.takeError());
- return Results;
- }
- // In this function, we find outgoing calls based on the index only.
- ContainedRefsRequest Request;
- Request.ID = *ID;
- // Initially store the ranges in a map keyed by SymbolID of the callee.
- // This allows us to group different calls to the same function
- // into the same CallHierarchyOutgoingCall.
- llvm::DenseMap<SymbolID, std::vector<Range>> CallsOut;
- // We can populate the ranges based on a refs request only. As we do so, we
- // also accumulate the callee IDs into a lookup request.
- LookupRequest CallsOutLookup;
- Index->containedRefs(Request, [&](const auto &R) {
- auto Loc = indexToLSPLocation(R.Location, Item.uri.file());
- if (!Loc) {
- elog("outgoingCalls failed to convert location: {0}", Loc.takeError());
- return;
- }
- auto It = CallsOut.try_emplace(R.Symbol, std::vector<Range>{}).first;
- It->second.push_back(Loc->range);
-
- CallsOutLookup.IDs.insert(R.Symbol);
- });
- // Perform the lookup request and combine its results with CallsOut to
- // get complete CallHierarchyOutgoingCall objects.
- Index->lookup(CallsOutLookup, [&](const Symbol &Callee) {
- // The containedRefs request should only return symbols which are
- // function-like, i.e. symbols for which references to them can be "calls".
- using SK = index::SymbolKind;
- auto Kind = Callee.SymInfo.Kind;
- assert(Kind == SK::Function || Kind == SK::InstanceMethod ||
- Kind == SK::ClassMethod || Kind == SK::StaticMethod ||
- Kind == SK::Constructor || Kind == SK::Destructor ||
- Kind == SK::ConversionFunction);
-
- auto It = CallsOut.find(Callee.ID);
- assert(It != CallsOut.end());
- if (auto CHI = symbolToCallHierarchyItem(Callee, Item.uri.file()))
- Results.push_back(
- CallHierarchyOutgoingCall{std::move(*CHI), std::move(It->second)});
- });
- // Sort results by name of the callee.
- llvm::sort(Results, [](const CallHierarchyOutgoingCall &A,
- const CallHierarchyOutgoingCall &B) {
- return A.to.name < B.to.name;
- });
- return Results;
-}
-
llvm::DenseSet<const Decl *> getNonLocalDeclRefs(ParsedAST &AST,
const FunctionDecl *FD) {
if (!FD->hasBody())
diff --git a/clang-tools-extra/clangd/XRefs.h b/clang-tools-extra/clangd/XRefs.h
index 247e52314c3f94..df91dd15303c18 100644
--- a/clang-tools-extra/clangd/XRefs.h
+++ b/clang-tools-extra/clangd/XRefs.h
@@ -150,9 +150,6 @@ prepareCallHierarchy(ParsedAST &AST, Position Pos, PathRef TUPath);
std::vector<CallHierarchyIncomingCall>
incomingCalls(const CallHierarchyItem &Item, const SymbolIndex *Index);
-std::vector<CallHierarchyOutgoingCall>
-outgoingCalls(const CallHierarchyItem &Item, const SymbolIndex *Index);
-
/// Returns all decls that are referenced in the \p FD except local symbols.
llvm::DenseSet<const Decl *> getNonLocalDeclRefs(ParsedAST &AST,
const FunctionDecl *FD);
diff --git a/clang-tools-extra/clangd/index/Index.cpp b/clang-tools-extra/clangd/index/Index.cpp
index 86dc6ed7633449..7a0c23287db225 100644
--- a/clang-tools-extra/clangd/index/Index.cpp
+++ b/clang-tools-extra/clangd/index/Index.cpp
@@ -66,11 +66,6 @@ bool SwapIndex::refs(const RefsRequest &R,
llvm::function_ref<void(const Ref &)> CB) const {
return snapshot()->refs(R, CB);
}
-bool SwapIndex::containedRefs(
- const ContainedRefsRequest &R,
- llvm::function_ref<void(const ContainedRefsResult &)> CB) const {
- return snapshot()->containedRefs(R, CB);
-}
void SwapIndex::relations(
const RelationsRequest &R,
llvm::function_ref<void(const SymbolID &, const Symbol &)> CB) const {
diff --git a/clang-tools-extra/clangd/index/Index.h b/clang-tools-extra/clangd/index/Index.h
index a193b1a191216a..047ce08e93e3ab 100644
--- a/clang-tools-extra/clangd/index/Index.h
+++ b/clang-tools-extra/clangd/index/Index.h
@@ -77,19 +77,6 @@ struct RefsRequest {
bool WantContainer = false;
};
-struct ContainedRefsRequest {
- /// Note that RefKind::Call just restricts the matched SymbolKind to
- /// functions, not the form of the reference (e.g. address-of-function,
- /// which can indicate an indirect call, should still be caught).
- static const RefKind SupportedRefKinds = RefKind::Call;
-
- SymbolID ID;
- /// If set, limit the number of refers returned from the index. The index may
- /// choose to return less than this, e.g. it tries to avoid returning stale
- /// results.
- std::optional<uint32_t> Limit;
-};
-
struct RelationsRequest {
llvm::DenseSet<SymbolID> Subjects;
RelationKind Predicate;
@@ -97,14 +84,6 @@ struct RelationsRequest {
std::optional<uint32_t> Limit;
};
-struct ContainedRefsResult {
- /// The source location where the symbol is named.
- SymbolLocation Location;
- RefKind Kind = RefKind::Unknown;
- /// The ID of the symbol which is referred to
- SymbolID Symbol;
-};
-
/// Describes what data is covered by an index.
///
/// Indexes may contain symbols but not references from a file, etc.
@@ -162,17 +141,6 @@ class SymbolIndex {
virtual bool refs(const RefsRequest &Req,
llvm::function_ref<void(const Ref &)> Callback) const = 0;
- /// Find all symbols that are referenced by a symbol and apply
- /// \p Callback on each result.
- ///
- /// Results should be returned in arbitrary order.
- /// The returned result must be deep-copied if it's used outside Callback.
- ///
- /// Returns true if there will be more results (limited by Req.Limit);
- virtual bool containedRefs(
- const ContainedRefsRequest &Req,
- llvm::function_ref<void(const ContainedRefsResult &)> Callback) const = 0;
-
/// Finds all relations (S, P, O) stored in the index such that S is among
/// Req.Subjects and P is Req.Predicate, and invokes \p Callback for (S, O) in
/// each.
@@ -207,9 +175,6 @@ class SwapIndex : public SymbolIndex {
llvm::function_ref<void(const Symbol &)>) const override;
bool refs(const RefsRequest &,
llvm::function_ref<void(const Ref &)>) const override;
- bool containedRefs(
- const ContainedRefsRequest &,
- llvm::function_ref<void(const ContainedRefsResult &)>) const override;
void relations(const RelationsRequest &,
llvm::function_ref<void(const SymbolID &, const Symbol &)>)
const override;
diff --git a/clang-tools-extra/clangd/index/MemIndex.cpp b/clang-tools-extra/clangd/index/MemIndex.cpp
index 9c9d3942bdee63..2665d46b97d839 100644
--- a/clang-tools-extra/clangd/index/MemIndex.cpp
+++ b/clang-tools-extra/clangd/index/MemIndex.cpp
@@ -9,7 +9,6 @@
#include "MemIndex.h"
#include "FuzzyMatch.h"
#include "Quality.h"
-#include "index/Index.h"
#include "support/Trace.h"
namespace clang {
@@ -86,25 +85,6 @@ bool MemIndex::refs(const RefsRequest &Req,
return false; // We reported all refs.
}
-bool MemIndex::containedRefs(
- const ContainedRefsRequest &Req,
- llvm::function_ref<void(const ContainedRefsResult &)> Callback) const {
- trace::Span Tracer("MemIndex refersTo");
- uint32_t Remaining = Req.Limit.value_or(std::numeric_limits<uint32_t>::max());
- for (const auto &Pair : Refs) {
- for (const auto &R : Pair.second) {
- if (!static_cast<int>(ContainedRefsRequest::SupportedRefKinds & R.Kind) ||
- Req.ID != R.Container)
- continue;
- if (Remaining == 0)
- return true; // More refs were available.
- --Remaining;
- Callback({R.Location, R.Kind, Pair.first});
- }
- }
- return false; // We reported all refs.
-}
-
void MemIndex::relations(
const RelationsRequest &Req,
llvm::function_ref<void(const SymbolID &, const Symbol &)> Callback) const {
diff --git a/clang-tools-extra/clangd/index/MemIndex.h b/clang-tools-extra/clangd/index/MemIndex.h
index 8f390c5028dc4d..fba2c1a7120a2b 100644
--- a/clang-tools-extra/clangd/index/MemIndex.h
+++ b/clang-tools-extra/clangd/index/MemIndex.h
@@ -72,10 +72,6 @@ class MemIndex : public SymbolIndex {
bool refs(const RefsRequest &Req,
llvm::function_ref<void(const Ref &)> Callback) const override;
- bool containedRefs(const ContainedRefsRequest &Req,
- llvm::function_ref<void(const ContainedRefsResult &)>
- Callback) const override;
-
void relations(const RelationsRequest &Req,
llvm::function_ref<void(const SymbolID &, const Symbol &)>
Callback) const override;
diff --git a/clang-tools-extra/clangd/index/Merge.cpp b/clang-tools-extra/clangd/index/Merge.cpp
index aecca38a885b66..8221d4b1f44405 100644
--- a/clang-tools-extra/clangd/index/Merge.cpp
+++ b/clang-tools-extra/clangd/index/Merge.cpp
@@ -155,40 +155,6 @@ bool MergedIndex::refs(const RefsRequest &Req,
return More || StaticHadMore;
}
-bool MergedIndex::containedRefs(
- const ContainedRefsRequest &Req,
- llvm::function_ref<void(const ContainedRefsResult &)> Callback) const {
- trace::Span Tracer("MergedIndex refersTo");
- bool More = false;
- uint32_t Remaining = Req.Limit.value_or(std::numeric_limits<uint32_t>::max());
- // We don't want duplicated refs from the static/dynamic indexes,
- // and we can't reliably deduplicate them because offsets may differ slightly.
- // We consider the dynamic index authoritative and report all its refs,
- // and only report static index refs from other files.
- More |= Dynamic->containedRefs(Req, [&](const auto &O) {
- Callback(O);
- assert(Remaining != 0);
- --Remaining;
- });
- if (Remaining == 0 && More)
- return More;
- auto DynamicContainsFile = Dynamic->indexedFiles();
- // We return less than Req.Limit if static index returns more refs for dirty
- // files.
- bool StaticHadMore = Static->containedRefs(Req, [&](const auto &O) {
- if ((DynamicContainsFile(O.Location.FileURI) & IndexContents::References) !=
- IndexContents::None)
- return; // ignore refs that have been seen from dynamic index.
- if (Remaining == 0) {
- More = true;
- return;
- }
- --Remaining;
- Callback(O);
- });
- return More || StaticHadMore;
-}
-
llvm::unique_function<IndexContents(llvm::StringRef) const>
MergedIndex::indexedFiles() const {
return [DynamicContainsFile{Dynamic->indexedFiles()},
diff --git a/clang-tools-extra/clangd/index/Merge.h b/clang-tools-extra/clangd/index/Merge.h
index 7441be6e57e854..b8a562b0df5d92 100644
--- a/clang-tools-extra/clangd/index/Merge.h
+++ b/clang-tools-extra/clangd/index/Merge.h
@@ -38,9 +38,6 @@ class MergedIndex : public SymbolIndex {
llvm::function_ref<void(const Symbol &)>) const override;
bool refs(const RefsRequest &,
llvm::function_ref<void(const Ref &)>) const override;
- bool containedRefs(
- const ContainedRefsRequest &,
- llvm::function_ref<void(const ContainedRefsResult &)>) const override;
void relations(const RelationsRequest &,
llvm::function_ref<void(const SymbolID &, const Symbol &)>)
const override;
diff --git a/clang-tools-extra/clangd/index/ProjectAware.cpp b/clang-tools-extra/clangd/index/ProjectAware.cpp
index 9836f0130362a0..2c6f8273b35d0e 100644
--- a/clang-tools-extra/clangd/index/ProjectAware.cpp
+++ b/clang-tools-extra/clangd/index/ProjectAware.cpp
@@ -35,10 +35,6 @@ class ProjectAwareIndex : public SymbolIndex {
/// Query all indexes while prioritizing the associated one (if any).
bool refs(const RefsRequest &Req,
llvm::function_ref<void(const Ref &)> Callback) const override;
- /// Query all indexes while prioritizing the associated one (if any).
- bool containedRefs(const ContainedRefsRequest &Req,
- llvm::function_ref<void(const ContainedRefsResult &)>
- Callback) const override;
/// Queries only the associates index when Req.RestrictForCodeCompletion is
/// set, otherwise queries all.
@@ -98,15 +94,6 @@ bool ProjectAwareIndex::refs(
return false;
}
-bool ProjectAwareIndex::containedRefs(
- const ContainedRefsRequest &Req,
- llvm::function_ref<void(const ContainedRefsResult &)> Callback) const {
- trace::Span Tracer("ProjectAwareIndex::refersTo");
- if (auto *Idx = getIndex())
- return Idx->containedRefs(Req, Callback);
- return false;
-}
-
bool ProjectAwareIndex::fuzzyFind(
const FuzzyFindRequest &Req,
llvm::function_ref<void(const Symbol &)> Callback) const {
diff --git a/clang-tools-extra/clangd/index/Ref.h b/clang-tools-extra/clangd/index/Ref.h
index 870f77f56e6cb3..6e383e2ade3d25 100644
--- a/clang-tools-extra/clangd/index/Ref.h
+++ b/clang-tools-extra/clangd/index/Ref.h
@@ -63,9 +63,6 @@ enum class RefKind : uint8_t {
// ^ this references Foo, but does not explicitly spell out its name
// };
Spelled = 1 << 3,
- // A reference which is a call. Used as a filter for which references
- // to store in data structures used for computing outgoing calls.
- Call = 1 << 4,
All = Declaration | Definition | Reference | Spelled,
};
diff --git a/clang-tools-extra/clangd/index/SymbolCollector.cpp b/clang-tools-extra/clangd/index/SymbolCollector.cpp
index 81125dbb1aeafc..91ae9d3003a971 100644
--- a/clang-tools-extra/clangd/index/SymbolCollector.cpp
+++ b/clang-tools-extra/clangd/index/SymbolCollector.cpp
@@ -18,7 +18,6 @@
#include "clang-include-cleaner/Record.h"
#include "clang-include-cleaner/Types.h"
#include "index/CanonicalIncludes.h"
-#include "index/Ref.h"
#include "index/Relation.h"
#include "index/Symbol.h"
#include "index/SymbolID.h"
@@ -661,7 +660,7 @@ bool SymbolCollector::handleDeclOccurrence(
auto FileLoc = SM.getFileLoc(Loc);
auto FID = SM.getFileID(FileLoc);
if (Opts.RefsInHeaders || FID == SM.getMainFileID()) {
- addRef(ID, SymbolRef{FileLoc, FID, Roles, index::getSymbolInfo(ND).Kind,
+ addRef(ID, SymbolRef{FileLoc, FID, Roles,
getRefContainer(ASTNode.Parent, Opts),
isSpelled(FileLoc, *ND)});
}
@@ -775,10 +774,8 @@ bool SymbolCollector::handleMacroOccurrence(const IdentifierInfo *Name,
// FIXME: Populate container information for macro references.
// FIXME: All MacroRefs are marked as Spelled now, but this should be
// checked.
- addRef(ID,
- SymbolRef{Loc, SM.getFileID(Loc), Roles, index::SymbolKind::Macro,
- /*Container=*/nullptr,
- /*Spelled=*/true});
+ addRef(ID, SymbolRef{Loc, SM.getFileID(Loc), Roles, /*Container=*/nullptr,
+ /*Spelled=*/true});
}
// Collect symbols.
@@ -1169,14 +1166,6 @@ bool SymbolCollector::shouldIndexFile(FileID FID) {
return I.first->second;
}
-static bool refIsCall(index::SymbolKind Kind) {
- using SK = index::SymbolKind;
- return Kind == SK::Function || Kind == SK::InstanceMethod ||
- Kind == SK::ClassMethod || Kind == SK::StaticMethod ||
- Kind == SK::Constructor || Kind == SK::Destructor ||
- Kind == SK::ConversionFunction;
-}
-
void SymbolCollector::addRef(SymbolID ID, const SymbolRef &SR) {
const auto &SM = ASTCtx->getSourceManager();
// FIXME: use the result to filter out references.
@@ -1188,9 +1177,6 @@ void SymbolCollector::addRef(SymbolID ID, const SymbolRef &SR) {
R.Location.End = Range.second;
R.Location.FileURI = HeaderFileURIs->toURI(*FE).c_str();
R.Kind = toRefKind(SR.Roles, SR.Spelled);
- if (refIsCall(SR.Kind)) {
- R.Kind |= RefKind::Call;
- }
R.Container = getSymbolIDCached(SR.Container);
Refs.insert(ID, R);
}
diff --git a/clang-tools-extra/clangd/index/SymbolCollector.h b/clang-tools-extra/clangd/index/SymbolCollector.h
index e9eb27fd0f6648..6ff7a0145ff874 100644
--- a/clang-tools-extra/clangd/index/SymbolCollector.h
+++ b/clang-tools-extra/clangd/index/SymbolCollector.h
@@ -209,7 +209,6 @@ class SymbolCollector : public index::IndexDataConsumer {
SourceLocation Loc;
FileID FID;
index::SymbolRoleSet Roles;
- index::SymbolKind Kind;
const Decl *Container;
bool Spelled;
};
diff --git a/clang-tools-extra/clangd/index/dex/Dex.cpp b/clang-tools-extra/clangd/index/dex/Dex.cpp
index 9c02e88900b07d..b7d3063e19b499 100644
--- a/clang-tools-extra/clangd/index/dex/Dex.cpp
+++ b/clang-tools-extra/clangd/index/dex/Dex.cpp
@@ -147,17 +147,6 @@ void Dex::buildIndex() {
for (DocID SymbolRank = 0; SymbolRank < Symbols.size(); ++SymbolRank)
Builder.add(*Symbols[SymbolRank], SymbolRank);
InvertedIndex = std::move(Builder).build();
-
- // Build RevRefs
- for (const auto &[ID, RefList] : Refs)
- for (const auto &R : RefList)
- if ((R.Kind & ContainedRefsRequest::SupportedRefKinds) !=
- RefKind::Unknown)
- RevRefs.emplace_back(R, ID);
- // Sort by container ID so we can use binary search for lookup.
- llvm::sort(RevRefs, [](const RevRef &A, const RevRef &B) {
- return A.ref().Container < B.ref().Container;
- });
}
std::unique_ptr<Iterator> Dex::iterator(const Token &Tok) const {
@@ -325,36 +314,6 @@ bool Dex::refs(const RefsRequest &Req,
return false; // We reported all refs.
}
-llvm::iterator_range<std::vector<Dex::RevRef>::const_iterator>
-Dex::lookupRevRefs(const SymbolID &Container) const {
- // equal_range() requires an element of the same type as the elements of the
- // range, so construct a dummy RevRef with the container of interest.
- Ref QueryRef;
- QueryRef.Container = Container;
- RevRef Query(QueryRef, SymbolID{});
-
- auto ItPair = std::equal_range(RevRefs.cbegin(), RevRefs.cend(), Query,
- [](const RevRef &A, const RevRef &B) {
- return A.ref().Container < B.ref().Container;
- });
- return {ItPair.first, ItPair.second};
-}
-
-bool Dex::containedRefs(
- const ContainedRefsRequest &Req,
- llvm::function_ref<void(const ContainedRefsResult &)> Callback) const {
- trace::Span Tracer("Dex reversed refs");
- uint32_t Remaining = Req.Limit.value_or(std::numeric_limits<uint32_t>::max());
- for (const auto &Rev : lookupRevRefs(Req.ID)) {
- // RevRefs are already filtered to ContainedRefsRequest::SupportedRefKinds
- if (Remaining == 0)
- return true; // More refs were available.
- --Remaining;
- Callback(Rev.containedRefsResult());
- }
- return false; // We reported all refs.
-}
-
void Dex::relations(
const RelationsRequest &Req,
llvm::function_ref<void(const SymbolID &, const Symbol &)> Callback) const {
@@ -391,7 +350,6 @@ size_t Dex::estimateMemoryUsage() const {
for (const auto &TokenToPostingList : InvertedIndex)
Bytes += TokenToPostingList.second.bytes();
Bytes += Refs.getMemorySize();
- Bytes += RevRefs.size() * sizeof(RevRef);
Bytes += Relations.getMemorySize();
return Bytes + BackingDataSize;
}
diff --git a/clang-tools-extra/clangd/index/dex/Dex.h b/clang-tools-extra/clangd/index/dex/Dex.h
index b0799ec9bae34e..69e161d51135b6 100644
--- a/clang-tools-extra/clangd/index/dex/Dex.h
+++ b/clang-tools-extra/clangd/index/dex/Dex.h
@@ -85,10 +85,6 @@ class Dex : public SymbolIndex {
bool refs(const RefsRequest &Req,
llvm::function_ref<void(const Ref &)> Callback) const override;
- bool containedRefs(const ContainedRefsRequest &Req,
- llvm::function_ref<void(const ContainedRefsResult &)>
- Callback) const override;
-
void relations(const RelationsRequest &Req,
llvm::function_ref<void(const SymbolID &, const Symbol &)>
Callback) const override;
@@ -99,22 +95,7 @@ class Dex : public SymbolIndex {
size_t estimateMemoryUsage() const override;
private:
- class RevRef {
- const Ref *Reference;
- SymbolID Target;
-
- public:
- RevRef(const Ref &Reference, SymbolID Target)
- : Reference(&Reference), Target(Target) {}
- const Ref &ref() const { return *Reference; }
- ContainedRefsResult containedRefsResult() const {
- return {ref().Location, ref().Kind, Target};
- }
- };
-
void buildIndex();
- llvm::iterator_range<std::vector<RevRef>::const_iterator>
- lookupRevRefs(const SymbolID &Container) const;
std::unique_ptr<Iterator> iterator(const Token &Tok) const;
std::unique_ptr<Iterator>
createFileProximityIterator(llvm::ArrayRef<std::string> ProximityPaths) const;
@@ -135,7 +116,6 @@ class Dex : public SymbolIndex {
llvm::DenseMap<Token, PostingList> InvertedIndex;
dex::Corpus Corpus;
llvm::DenseMap<SymbolID, llvm::ArrayRef<Ref>> Refs;
- std::vector<RevRef> RevRefs; // sorted by container ID
static_assert(sizeof(RelationKind) == sizeof(uint8_t),
"RelationKind should be of same size as a uint8_t");
llvm::DenseMap<std::pair<SymbolID, uint8_t>, std::vector<SymbolID>> Relations;
diff --git a/clang-tools-extra/clangd/test/type-hierarchy-ext.test b/clang-tools-extra/clangd/test/type-hierarchy-ext.test
index 8d1a5dc31da0f1..ddb9a014be0c72 100644
--- a/clang-tools-extra/clangd/test/type-hierarchy-ext.test
+++ b/clang-tools-extra/clangd/test/type-hierarchy-ext.test
@@ -12,7 +12,6 @@
# CHECK-NEXT: "data": {
# CHECK-NEXT: "symbolID": "A6576FE083F2949A"
# CHECK-NEXT: },
-# CHECK-NEXT: "detail": "Child3",
# CHECK-NEXT: "kind": 23,
# CHECK-NEXT: "name": "Child3",
# CHECK-NEXT: "range": {
@@ -154,7 +153,6 @@
# CHECK-NEXT: "data": {
# CHECK-NEXT: "symbolID": "5705B382DFC77CBC"
# CHECK-NEXT: },
-# CHECK-NEXT: "detail": "Child4",
# CHECK-NEXT: "kind": 23,
# CHECK-NEXT: "name": "Child4",
# CHECK-NEXT: "range": {
diff --git a/clang-tools-extra/clangd/test/type-hierarchy.test b/clang-tools-extra/clangd/test/type-hierarchy.test
index a5f13ab13d0b3f..69751000a7c6c0 100644
--- a/clang-tools-extra/clangd/test/type-hierarchy.test
+++ b/clang-tools-extra/clangd/test/type-hierarchy.test
@@ -62,7 +62,6 @@
# CHECK-NEXT: ],
# CHECK-NEXT: "symbolID": "ECDC0C46D75120F4"
# CHECK-NEXT: },
-# CHECK-NEXT: "detail": "Child1",
# CHECK-NEXT: "kind": 23,
# CHECK-NEXT: "name": "Child1",
# CHECK-NEXT: "range": {
@@ -113,7 +112,6 @@
# CHECK-NEXT: ],
# CHECK-NEXT: "symbolID": "A6576FE083F2949A"
# CHECK-NEXT: },
-# CHECK-NEXT: "detail": "Child3",
# CHECK-NEXT: "kind": 23,
# CHECK-NEXT: "name": "Child3",
# CHECK-NEXT: "range": {
diff --git a/clang-tools-extra/clangd/unittests/CallHierarchyTests.cpp b/clang-tools-extra/clangd/unittests/CallHierarchyTests.cpp
index e086e3a6ce3caa..8821d3aad9c784 100644
--- a/clang-tools-extra/clangd/unittests/CallHierarchyTests.cpp
+++ b/clang-tools-extra/clangd/unittests/CallHierarchyTests.cpp
@@ -44,27 +44,17 @@ using ::testing::UnorderedElementsAre;
// Helpers for matching call hierarchy data structures.
MATCHER_P(withName, N, "") { return arg.name == N; }
-MATCHER_P(withDetail, N, "") { return arg.detail == N; }
MATCHER_P(withSelectionRange, R, "") { return arg.selectionRange == R; }
template <class ItemMatcher>
::testing::Matcher<CallHierarchyIncomingCall> from(ItemMatcher M) {
return Field(&CallHierarchyIncomingCall::from, M);
}
-template <class ItemMatcher>
-::testing::Matcher<CallHierarchyOutgoingCall> to(ItemMatcher M) {
- return Field(&CallHierarchyOutgoingCall::to, M);
-}
template <class... RangeMatchers>
-::testing::Matcher<CallHierarchyIncomingCall> iFromRanges(RangeMatchers... M) {
+::testing::Matcher<CallHierarchyIncomingCall> fromRanges(RangeMatchers... M) {
return Field(&CallHierarchyIncomingCall::fromRanges,
UnorderedElementsAre(M...));
}
-template <class... RangeMatchers>
-::testing::Matcher<CallHierarchyOutgoingCall> oFromRanges(RangeMatchers... M) {
- return Field(&CallHierarchyOutgoingCall::fromRanges,
- UnorderedElementsAre(M...));
-}
TEST(CallHierarchy, IncomingOneFileCpp) {
Annotations Source(R"cpp(
@@ -89,24 +79,21 @@ TEST(CallHierarchy, IncomingOneFileCpp) {
prepareCallHierarchy(AST, Source.point(), testPath(TU.Filename));
ASSERT_THAT(Items, ElementsAre(withName("callee")));
auto IncomingLevel1 = incomingCalls(Items[0], Index.get());
- ASSERT_THAT(
- IncomingLevel1,
- ElementsAre(AllOf(from(AllOf(withName("caller1"), withDetail("caller1"))),
- iFromRanges(Source.range("Callee")))));
+ ASSERT_THAT(IncomingLevel1,
+ ElementsAre(AllOf(from(withName("caller1")),
+ fromRanges(Source.range("Callee")))));
auto IncomingLevel2 = incomingCalls(IncomingLevel1[0].from, Index.get());
- ASSERT_THAT(
- IncomingLevel2,
- ElementsAre(AllOf(from(AllOf(withName("caller2"), withDetail("caller2"))),
- iFromRanges(Source.range("Caller1A"),
- Source.range("Caller1B"))),
- AllOf(from(AllOf(withName("caller3"), withDetail("caller3"))),
- iFromRanges(Source.range("Caller1C")))));
+ ASSERT_THAT(IncomingLevel2,
+ ElementsAre(AllOf(from(withName("caller2")),
+ fromRanges(Source.range("Caller1A"),
+ Source.range("Caller1B"))),
+ AllOf(from(withName("caller3")),
+ fromRanges(Source.range("Caller1C")))));
auto IncomingLevel3 = incomingCalls(IncomingLevel2[0].from, Index.get());
- ASSERT_THAT(
- IncomingLevel3,
- ElementsAre(AllOf(from(AllOf(withName("caller3"), withDetail("caller3"))),
- iFromRanges(Source.range("Caller2")))));
+ ASSERT_THAT(IncomingLevel3,
+ ElementsAre(AllOf(from(withName("caller3")),
+ fromRanges(Source.range("Caller2")))));
auto IncomingLevel4 = incomingCalls(IncomingLevel3[0].from, Index.get());
EXPECT_THAT(IncomingLevel4, IsEmpty());
@@ -138,24 +125,20 @@ TEST(CallHierarchy, IncomingOneFileObjC) {
ASSERT_THAT(Items, ElementsAre(withName("callee")));
auto IncomingLevel1 = incomingCalls(Items[0], Index.get());
ASSERT_THAT(IncomingLevel1,
- ElementsAre(AllOf(from(AllOf(withName("caller1"),
- withDetail("MyClass::caller1"))),
- iFromRanges(Source.range("Callee")))));
+ ElementsAre(AllOf(from(withName("caller1")),
+ fromRanges(Source.range("Callee")))));
auto IncomingLevel2 = incomingCalls(IncomingLevel1[0].from, Index.get());
ASSERT_THAT(IncomingLevel2,
- ElementsAre(AllOf(from(AllOf(withName("caller2"),
- withDetail("MyClass::caller2"))),
- iFromRanges(Source.range("Caller1A"),
- Source.range("Caller1B"))),
- AllOf(from(AllOf(withName("caller3"),
- withDetail("MyClass::caller3"))),
- iFromRanges(Source.range("Caller1C")))));
+ ElementsAre(AllOf(from(withName("caller2")),
+ fromRanges(Source.range("Caller1A"),
+ Source.range("Caller1B"))),
+ AllOf(from(withName("caller3")),
+ fromRanges(Source.range("Caller1C")))));
auto IncomingLevel3 = incomingCalls(IncomingLevel2[0].from, Index.get());
ASSERT_THAT(IncomingLevel3,
- ElementsAre(AllOf(from(AllOf(withName("caller3"),
- withDetail("MyClass::caller3"))),
- iFromRanges(Source.range("Caller2")))));
+ ElementsAre(AllOf(from(withName("caller3")),
+ fromRanges(Source.range("Caller2")))));
auto IncomingLevel4 = incomingCalls(IncomingLevel3[0].from, Index.get());
EXPECT_THAT(IncomingLevel4, IsEmpty());
@@ -184,16 +167,14 @@ TEST(CallHierarchy, MainFileOnlyRef) {
prepareCallHierarchy(AST, Source.point(), testPath(TU.Filename));
ASSERT_THAT(Items, ElementsAre(withName("callee")));
auto IncomingLevel1 = incomingCalls(Items[0], Index.get());
- ASSERT_THAT(
- IncomingLevel1,
- ElementsAre(AllOf(from(AllOf(withName("caller1"), withDetail("caller1"))),
- iFromRanges(Source.range("Callee")))));
+ ASSERT_THAT(IncomingLevel1,
+ ElementsAre(AllOf(from(withName("caller1")),
+ fromRanges(Source.range("Callee")))));
auto IncomingLevel2 = incomingCalls(IncomingLevel1[0].from, Index.get());
- EXPECT_THAT(
- IncomingLevel2,
- ElementsAre(AllOf(from(AllOf(withName("caller2"), withDetail("caller2"))),
- iFromRanges(Source.range("Caller1")))));
+ EXPECT_THAT(IncomingLevel2,
+ ElementsAre(AllOf(from(withName("caller2")),
+ fromRanges(Source.range("Caller1")))));
}
TEST(CallHierarchy, IncomingQualified) {
@@ -219,72 +200,14 @@ TEST(CallHierarchy, IncomingQualified) {
prepareCallHierarchy(AST, Source.point(), testPath(TU.Filename));
ASSERT_THAT(Items, ElementsAre(withName("Waldo::find")));
auto Incoming = incomingCalls(Items[0], Index.get());
- EXPECT_THAT(
- Incoming,
- ElementsAre(
- AllOf(from(AllOf(withName("caller1"), withDetail("ns::caller1"))),
- iFromRanges(Source.range("Caller1"))),
- AllOf(from(AllOf(withName("caller2"), withDetail("ns::caller2"))),
- iFromRanges(Source.range("Caller2")))));
-}
-
-TEST(CallHierarchy, OutgoingOneFile) {
- // Test outgoing call on the main file, with namespaces and methods
- Annotations Source(R"cpp(
- void callee(int);
- namespace ns {
- struct Foo {
- void caller1();
- };
- void Foo::caller1() {
- $Callee[[callee]](42);
- }
- }
- namespace {
- void caller2(ns::Foo& F) {
- F.$Caller1A[[caller1]]();
- F.$Caller1B[[caller1]]();
- }
- }
- void call^er3(ns::Foo& F) {
- F.$Caller1C[[caller1]]();
- $Caller2[[caller2]](F);
- }
- )cpp");
- TestTU TU = TestTU::withCode(Source.code());
- auto AST = TU.build();
- auto Index = TU.index();
-
- std::vector<CallHierarchyItem> Items =
- prepareCallHierarchy(AST, Source.point(), testPath(TU.Filename));
- ASSERT_THAT(Items, ElementsAre(withName("caller3")));
- auto OugoingLevel1 = outgoingCalls(Items[0], Index.get());
- ASSERT_THAT(
- OugoingLevel1,
- ElementsAre(
- AllOf(to(AllOf(withName("caller1"), withDetail("ns::Foo::caller1"))),
- oFromRanges(Source.range("Caller1C"))),
- AllOf(to(AllOf(withName("caller2"), withDetail("caller2"))),
- oFromRanges(Source.range("Caller2")))));
-
- auto OutgoingLevel2 = outgoingCalls(OugoingLevel1[1].to, Index.get());
- ASSERT_THAT(
- OutgoingLevel2,
- ElementsAre(AllOf(
- to(AllOf(withName("caller1"), withDetail("ns::Foo::caller1"))),
- oFromRanges(Source.range("Caller1A"), Source.range("Caller1B")))));
-
- auto OutgoingLevel3 = outgoingCalls(OutgoingLevel2[0].to, Index.get());
- ASSERT_THAT(
- OutgoingLevel3,
- ElementsAre(AllOf(to(AllOf(withName("callee"), withDetail("callee"))),
- oFromRanges(Source.range("Callee")))));
-
- auto OutgoingLevel4 = outgoingCalls(OutgoingLevel3[0].to, Index.get());
- EXPECT_THAT(OutgoingLevel4, IsEmpty());
+ EXPECT_THAT(Incoming,
+ ElementsAre(AllOf(from(withName("caller1")),
+ fromRanges(Source.range("Caller1"))),
+ AllOf(from(withName("caller2")),
+ fromRanges(Source.range("Caller2")))));
}
-TEST(CallHierarchy, MultiFileCpp) {
+TEST(CallHierarchy, IncomingMultiFileCpp) {
// The test uses a .hh suffix for header files to get clang
// to parse them in C++ mode. .h files are parsed in C mode
// by default, which causes problems because e.g. symbol
@@ -298,47 +221,32 @@ TEST(CallHierarchy, MultiFileCpp) {
void calle^e(int) {}
)cpp");
Annotations Caller1H(R"cpp(
- namespace nsa {
- void caller1();
- }
+ void caller1();
)cpp");
Annotations Caller1C(R"cpp(
#include "callee.hh"
#include "caller1.hh"
- namespace nsa {
- void caller1() {
- [[calle^e]](42);
- }
+ void caller1() {
+ [[calle^e]](42);
}
)cpp");
Annotations Caller2H(R"cpp(
- namespace nsb {
- void caller2();
- }
+ void caller2();
)cpp");
Annotations Caller2C(R"cpp(
#include "caller1.hh"
#include "caller2.hh"
- namespace nsb {
- void caller2() {
- nsa::$A[[caller1]]();
- nsa::$B[[caller1]]();
- }
- }
- )cpp");
- Annotations Caller3H(R"cpp(
- namespace nsa {
- void call^er3();
+ void caller2() {
+ $A[[caller1]]();
+ $B[[caller1]]();
}
)cpp");
Annotations Caller3C(R"cpp(
#include "caller1.hh"
#include "caller2.hh"
- namespace nsa {
- void call^er3() {
- $Caller1[[caller1]]();
- nsb::$Caller2[[caller2]]();
- }
+ void caller3() {
+ $Caller1[[caller1]]();
+ $Caller2[[caller2]]();
}
)cpp");
@@ -346,7 +254,6 @@ TEST(CallHierarchy, MultiFileCpp) {
Workspace.addSource("callee.hh", CalleeH.code());
Workspace.addSource("caller1.hh", Caller1H.code());
Workspace.addSource("caller2.hh", Caller2H.code());
- Workspace.addSource("caller3.hh", Caller3H.code());
Workspace.addMainFile("callee.cc", CalleeC.code());
Workspace.addMainFile("caller1.cc", Caller1C.code());
Workspace.addMainFile("caller2.cc", Caller2C.code());
@@ -354,84 +261,46 @@ TEST(CallHierarchy, MultiFileCpp) {
auto Index = Workspace.index();
- auto CheckIncomingCalls = [&](ParsedAST &AST, Position Pos, PathRef TUPath) {
+ auto CheckCallHierarchy = [&](ParsedAST &AST, Position Pos, PathRef TUPath) {
std::vector<CallHierarchyItem> Items =
prepareCallHierarchy(AST, Pos, TUPath);
ASSERT_THAT(Items, ElementsAre(withName("callee")));
auto IncomingLevel1 = incomingCalls(Items[0], Index.get());
ASSERT_THAT(IncomingLevel1,
- ElementsAre(AllOf(from(AllOf(withName("caller1"),
- withDetail("nsa::caller1"))),
- iFromRanges(Caller1C.range()))));
+ ElementsAre(AllOf(from(withName("caller1")),
+ fromRanges(Caller1C.range()))));
auto IncomingLevel2 = incomingCalls(IncomingLevel1[0].from, Index.get());
ASSERT_THAT(
IncomingLevel2,
- ElementsAre(
- AllOf(from(AllOf(withName("caller2"), withDetail("nsb::caller2"))),
- iFromRanges(Caller2C.range("A"), Caller2C.range("B"))),
- AllOf(from(AllOf(withName("caller3"), withDetail("nsa::caller3"))),
- iFromRanges(Caller3C.range("Caller1")))));
+ ElementsAre(AllOf(from(withName("caller2")),
+ fromRanges(Caller2C.range("A"), Caller2C.range("B"))),
+ AllOf(from(withName("caller3")),
+ fromRanges(Caller3C.range("Caller1")))));
auto IncomingLevel3 = incomingCalls(IncomingLevel2[0].from, Index.get());
ASSERT_THAT(IncomingLevel3,
- ElementsAre(AllOf(from(AllOf(withName("caller3"),
- withDetail("nsa::caller3"))),
- iFromRanges(Caller3C.range("Caller2")))));
+ ElementsAre(AllOf(from(withName("caller3")),
+ fromRanges(Caller3C.range("Caller2")))));
auto IncomingLevel4 = incomingCalls(IncomingLevel3[0].from, Index.get());
EXPECT_THAT(IncomingLevel4, IsEmpty());
};
- auto CheckOutgoingCalls = [&](ParsedAST &AST, Position Pos, PathRef TUPath) {
- std::vector<CallHierarchyItem> Items =
- prepareCallHierarchy(AST, Pos, TUPath);
- ASSERT_THAT(Items, ElementsAre(withName("caller3")));
- auto OutgoingLevel1 = outgoingCalls(Items[0], Index.get());
- ASSERT_THAT(
- OutgoingLevel1,
- ElementsAre(
- AllOf(to(AllOf(withName("caller1"), withDetail("nsa::caller1"))),
- oFromRanges(Caller3C.range("Caller1"))),
- AllOf(to(AllOf(withName("caller2"), withDetail("nsb::caller2"))),
- oFromRanges(Caller3C.range("Caller2")))));
-
- auto OutgoingLevel2 = outgoingCalls(OutgoingLevel1[1].to, Index.get());
- ASSERT_THAT(OutgoingLevel2,
- ElementsAre(AllOf(
- to(AllOf(withName("caller1"), withDetail("nsa::caller1"))),
- oFromRanges(Caller2C.range("A"), Caller2C.range("B")))));
-
- auto OutgoingLevel3 = outgoingCalls(OutgoingLevel2[0].to, Index.get());
- ASSERT_THAT(
- OutgoingLevel3,
- ElementsAre(AllOf(to(AllOf(withName("callee"), withDetail("callee"))),
- oFromRanges(Caller1C.range()))));
-
- auto OutgoingLevel4 = outgoingCalls(OutgoingLevel3[0].to, Index.get());
- EXPECT_THAT(OutgoingLevel4, IsEmpty());
- };
-
// Check that invoking from a call site works.
auto AST = Workspace.openFile("caller1.cc");
ASSERT_TRUE(bool(AST));
- CheckIncomingCalls(*AST, Caller1C.point(), testPath("caller1.cc"));
+ CheckCallHierarchy(*AST, Caller1C.point(), testPath("caller1.cc"));
// Check that invoking from the declaration site works.
AST = Workspace.openFile("callee.hh");
ASSERT_TRUE(bool(AST));
- CheckIncomingCalls(*AST, CalleeH.point(), testPath("callee.hh"));
- AST = Workspace.openFile("caller3.hh");
- ASSERT_TRUE(bool(AST));
- CheckOutgoingCalls(*AST, Caller3H.point(), testPath("caller3.hh"));
+ CheckCallHierarchy(*AST, CalleeH.point(), testPath("callee.hh"));
// Check that invoking from the definition site works.
AST = Workspace.openFile("callee.cc");
ASSERT_TRUE(bool(AST));
- CheckIncomingCalls(*AST, CalleeC.point(), testPath("callee.cc"));
- AST = Workspace.openFile("caller3.cc");
- ASSERT_TRUE(bool(AST));
- CheckOutgoingCalls(*AST, Caller3C.point(), testPath("caller3.cc"));
+ CheckCallHierarchy(*AST, CalleeC.point(), testPath("callee.cc"));
}
TEST(CallHierarchy, IncomingMultiFileObjC) {
@@ -508,20 +377,20 @@ TEST(CallHierarchy, IncomingMultiFileObjC) {
auto IncomingLevel1 = incomingCalls(Items[0], Index.get());
ASSERT_THAT(IncomingLevel1,
ElementsAre(AllOf(from(withName("caller1")),
- iFromRanges(Caller1C.range()))));
+ fromRanges(Caller1C.range()))));
auto IncomingLevel2 = incomingCalls(IncomingLevel1[0].from, Index.get());
- ASSERT_THAT(IncomingLevel2,
- ElementsAre(AllOf(from(withName("caller2")),
- iFromRanges(Caller2C.range("A"),
- Caller2C.range("B"))),
- AllOf(from(withName("caller3")),
- iFromRanges(Caller3C.range("Caller1")))));
+ ASSERT_THAT(
+ IncomingLevel2,
+ ElementsAre(AllOf(from(withName("caller2")),
+ fromRanges(Caller2C.range("A"), Caller2C.range("B"))),
+ AllOf(from(withName("caller3")),
+ fromRanges(Caller3C.range("Caller1")))));
auto IncomingLevel3 = incomingCalls(IncomingLevel2[0].from, Index.get());
ASSERT_THAT(IncomingLevel3,
ElementsAre(AllOf(from(withName("caller3")),
- iFromRanges(Caller3C.range("Caller2")))));
+ fromRanges(Caller3C.range("Caller2")))));
auto IncomingLevel4 = incomingCalls(IncomingLevel3[0].from, Index.get());
EXPECT_THAT(IncomingLevel4, IsEmpty());
@@ -569,12 +438,12 @@ TEST(CallHierarchy, CallInLocalVarDecl) {
ASSERT_THAT(Items, ElementsAre(withName("callee")));
auto Incoming = incomingCalls(Items[0], Index.get());
- ASSERT_THAT(Incoming, ElementsAre(AllOf(from(withName("caller1")),
- iFromRanges(Source.range("call1"))),
- AllOf(from(withName("caller2")),
- iFromRanges(Source.range("call2"))),
- AllOf(from(withName("caller3")),
- iFromRanges(Source.range("call3")))));
+ ASSERT_THAT(
+ Incoming,
+ ElementsAre(
+ AllOf(from(withName("caller1")), fromRanges(Source.range("call1"))),
+ AllOf(from(withName("caller2")), fromRanges(Source.range("call2"))),
+ AllOf(from(withName("caller3")), fromRanges(Source.range("call3")))));
}
TEST(CallHierarchy, HierarchyOnField) {
diff --git a/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp b/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
index 3acacf496e77f9..a89f4997362265 100644
--- a/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
+++ b/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
@@ -1703,12 +1703,6 @@ class IndexRequestCollector : public SymbolIndex {
return false;
}
- bool containedRefs(
- const ContainedRefsRequest &,
- llvm::function_ref<void(const ContainedRefsResult &)>) const override {
- return false;
- }
-
void relations(const RelationsRequest &,
llvm::function_ref<void(const SymbolID &, const Symbol &)>)
const override {}
diff --git a/clang-tools-extra/clangd/unittests/RenameTests.cpp b/clang-tools-extra/clangd/unittests/RenameTests.cpp
index a3aa4542bdf751..7d9252110b27df 100644
--- a/clang-tools-extra/clangd/unittests/RenameTests.cpp
+++ b/clang-tools-extra/clangd/unittests/RenameTests.cpp
@@ -1601,12 +1601,6 @@ TEST(CrossFileRenameTests, DirtyBuffer) {
return true; // has more references
}
- bool containedRefs(const ContainedRefsRequest &Req,
- llvm::function_ref<void(const ContainedRefsResult &)>
- Callback) const override {
- return false;
- }
-
bool fuzzyFind(
const FuzzyFindRequest &Req,
llvm::function_ref<void(const Symbol &)> Callback) const override {
@@ -1658,12 +1652,6 @@ TEST(CrossFileRenameTests, DeduplicateRefsFromIndex) {
return false;
}
- bool containedRefs(const ContainedRefsRequest &Req,
- llvm::function_ref<void(const ContainedRefsResult &)>
- Callback) const override {
- return false;
- }
-
bool fuzzyFind(const FuzzyFindRequest &,
llvm::function_ref<void(const Symbol &)>) const override {
return false;
More information about the cfe-commits
mailing list