[clangd] Use the index-based API to do the header-source switch.
Summary:
If the file heuristic fails, we try to use the index&AST to do the
header/source inference.
Reviewers: kadircet
Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, usaxena95, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D68211
llvm-svn: 373320
diff --git a/clang-tools-extra/clangd/ClangdLSPServer.cpp b/clang-tools-extra/clangd/ClangdLSPServer.cpp
index fd5b344..4ac4d95 100644
--- a/clang-tools-extra/clangd/ClangdLSPServer.cpp
+++ b/clang-tools-extra/clangd/ClangdLSPServer.cpp
@@ -1038,10 +1038,16 @@
void ClangdLSPServer::onSwitchSourceHeader(
const TextDocumentIdentifier &Params,
Callback<llvm::Optional<URIForFile>> Reply) {
- if (auto Result = Server->switchSourceHeader(Params.uri.file()))
- Reply(URIForFile::canonicalize(*Result, Params.uri.file()));
- else
- Reply(llvm::None);
+ Server->switchSourceHeader(
+ Params.uri.file(),
+ [Reply = std::move(Reply),
+ Params](llvm::Expected<llvm::Optional<clangd::Path>> Path) mutable {
+ if (!Path)
+ return Reply(Path.takeError());
+ if (*Path)
+ Reply(URIForFile::canonicalize(**Path, Params.uri.file()));
+ return Reply(llvm::None);
+ });
}
void ClangdLSPServer::onDocumentHighlight(