summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clangd/ClangdServer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clangd/ClangdServer.cpp')
-rw-r--r--clang-tools-extra/clangd/ClangdServer.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/clang-tools-extra/clangd/ClangdServer.cpp b/clang-tools-extra/clangd/ClangdServer.cpp
index 2203c92e2e3..ef88fbe8d75 100644
--- a/clang-tools-extra/clangd/ClangdServer.cpp
+++ b/clang-tools-extra/clangd/ClangdServer.cpp
@@ -491,6 +491,29 @@ void ClangdServer::findDocumentHighlights(
WorkScheduler.runWithAST(File, BindWithForward(Action, std::move(Callback)));
}
+void ClangdServer::findHover(
+ PathRef File, Position Pos,
+ UniqueFunction<void(llvm::Expected<Tagged<Hover>>)> Callback) {
+ Hover FinalHover;
+ auto FileContents = DraftMgr.getDraft(File);
+ if (!FileContents.Draft)
+ return Callback(llvm::make_error<llvm::StringError>(
+ "findHover called on non-added file", llvm::errc::invalid_argument));
+
+ auto TaggedFS = FSProvider.getTaggedFileSystem(File);
+
+ auto Action = [Pos, TaggedFS](decltype(Callback) Callback,
+ llvm::Expected<InputsAndAST> InpAST) {
+ if (!InpAST)
+ return Callback(InpAST.takeError());
+
+ Hover Result = clangd::getHover(InpAST->AST, Pos);
+ Callback(make_tagged(std::move(Result), TaggedFS.Tag));
+ };
+
+ WorkScheduler.runWithAST(File, BindWithForward(Action, std::move(Callback)));
+}
+
void ClangdServer::scheduleReparseAndDiags(
PathRef File, VersionedDraft Contents,
Tagged<IntrusiveRefCntPtr<vfs::FileSystem>> TaggedFS) {
OpenPOWER on IntegriCloud