[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
This commit is contained in:
Haojian Wu 2021-02-17 08:39:52 +01:00
parent 4e127bce2d
commit e030de7e5a
2 changed files with 8 additions and 4 deletions

View File

@ -112,9 +112,11 @@ void MemIndex::relations(
llvm::unique_function<IndexContents(llvm::StringRef) const>
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;

View File

@ -316,9 +316,11 @@ void Dex::relations(
llvm::unique_function<IndexContents(llvm::StringRef) const>
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;