From e030de7e5a28de1bcc337ede445600f8d282d252 Mon Sep 17 00:00:00 2001 From: Haojian Wu Date: Wed, 17 Feb 2021 08:39:52 +0100 Subject: [PATCH] [clangd] Pass file when possible to resolve URI. Some URI scheme needs the hint path to do a correct resolution, we pass one of the open files as hint path. This is not perfect, and it might not work for opening files across project, but it would fix a bug with our internal scheme. in the long run, removing URIs from all the index internals is a more proper fix. Differential Revision: https://reviews.llvm.org/D96844 --- clang-tools-extra/clangd/index/MemIndex.cpp | 6 ++++-- clang-tools-extra/clangd/index/dex/Dex.cpp | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/clang-tools-extra/clangd/index/MemIndex.cpp b/clang-tools-extra/clangd/index/MemIndex.cpp index a578ed2da140..e2a8eb7f8e3f 100644 --- a/clang-tools-extra/clangd/index/MemIndex.cpp +++ b/clang-tools-extra/clangd/index/MemIndex.cpp @@ -112,9 +112,11 @@ void MemIndex::relations( llvm::unique_function MemIndex::indexedFiles() const { return [this](llvm::StringRef FileURI) { - auto Path = URI::resolve(FileURI); + if (Files.empty()) + return IndexContents::None; + auto Path = URI::resolve(FileURI, Files.begin()->first()); if (!Path) { - llvm::consumeError(Path.takeError()); + vlog("Failed to resolve the URI {0} : {1}", FileURI, Path.takeError()); return IndexContents::None; } return Files.contains(*Path) ? IdxContents : IndexContents::None; diff --git a/clang-tools-extra/clangd/index/dex/Dex.cpp b/clang-tools-extra/clangd/index/dex/Dex.cpp index 8552fa3b5174..a6a8f23cab4c 100644 --- a/clang-tools-extra/clangd/index/dex/Dex.cpp +++ b/clang-tools-extra/clangd/index/dex/Dex.cpp @@ -316,9 +316,11 @@ void Dex::relations( llvm::unique_function Dex::indexedFiles() const { return [this](llvm::StringRef FileURI) { - auto Path = URI::resolve(FileURI); + if (Files.empty()) + return IndexContents::None; + auto Path = URI::resolve(FileURI, Files.begin()->first()); if (!Path) { - llvm::consumeError(Path.takeError()); + vlog("Failed to resolve the URI {0} : {1}", FileURI, Path.takeError()); return IndexContents::None; } return Files.contains(*Path) ? IdxContents : IndexContents::None;