Author: Nathan Ridge Date: 2020-11-23T20:43:41-05:00 New Revision: 4cb976e014db80efd20dfca45ba218c3a69aac42
URL: https://github.com/llvm/llvm-project/commit/4cb976e014db80efd20dfca45ba218c3a69aac42 DIFF: https://github.com/llvm/llvm-project/commit/4cb976e014db80efd20dfca45ba218c3a69aac42.diff LOG: [clangd] Call hierarchy (ClangdServer layer) Differential Revision: https://reviews.llvm.org/D91123 Added: Modified: clang-tools-extra/clangd/ClangdServer.cpp clang-tools-extra/clangd/ClangdServer.h Removed: ################################################################################ diff --git a/clang-tools-extra/clangd/ClangdServer.cpp b/clang-tools-extra/clangd/ClangdServer.cpp index 889d2cbcf280..523931d9cc7b 100644 --- a/clang-tools-extra/clangd/ClangdServer.cpp +++ b/clang-tools-extra/clangd/ClangdServer.cpp @@ -678,6 +678,26 @@ void ClangdServer::resolveTypeHierarchy( CB(Item); } +void ClangdServer::prepareCallHierarchy( + PathRef File, Position Pos, Callback<std::vector<CallHierarchyItem>> CB) { + auto Action = [File = File.str(), Pos, + CB = std::move(CB)](Expected<InputsAndAST> InpAST) mutable { + if (!InpAST) + return CB(InpAST.takeError()); + CB(clangd::prepareCallHierarchy(InpAST->AST, Pos, File)); + }; + WorkScheduler.runWithAST("Call Hierarchy", File, std::move(Action)); +} + +void ClangdServer::incomingCalls( + const CallHierarchyItem &Item, + Callback<std::vector<CallHierarchyIncomingCall>> CB) { + WorkScheduler.run("Incoming Calls", "", + [CB = std::move(CB), Item, this]() mutable { + CB(clangd::incomingCalls(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 1ccb4c5899f8..18c35e701e5b 100644 --- a/clang-tools-extra/clangd/ClangdServer.h +++ b/clang-tools-extra/clangd/ClangdServer.h @@ -242,6 +242,14 @@ class ClangdServer { TypeHierarchyDirection Direction, Callback<llvm::Optional<TypeHierarchyItem>> CB); + /// Get information about call hierarchy for a given position. + void prepareCallHierarchy(PathRef File, Position Pos, + Callback<std::vector<CallHierarchyItem>> CB); + + /// Resolve incoming calls for a given call hierarchy item. + void incomingCalls(const CallHierarchyItem &Item, + Callback<std::vector<CallHierarchyIncomingCall>>); + /// Retrieve the top symbols from the workspace matching a query. void workspaceSymbols(StringRef Query, int Limit, Callback<std::vector<SymbolInformation>> CB); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits