From 22f064cca7651eaf2980fcfa27618d99c633a589 Mon Sep 17 00:00:00 2001 From: Edwin Cheng Date: Tue, 10 Mar 2020 22:00:31 +0800 Subject: Add resolve_extern_path in DB --- crates/ra_db/src/lib.rs | 18 +++++++++++++++++- crates/ra_hir_def/src/test_db.rs | 10 +++++++++- crates/ra_hir_expand/src/test_db.rs | 9 ++++++++- crates/ra_hir_ty/src/test_db.rs | 7 +++++++ crates/ra_ide_db/src/lib.rs | 7 +++++++ 5 files changed, 48 insertions(+), 3 deletions(-) diff --git a/crates/ra_db/src/lib.rs b/crates/ra_db/src/lib.rs index fb002d717..9bf3fe248 100644 --- a/crates/ra_db/src/lib.rs +++ b/crates/ra_db/src/lib.rs @@ -11,7 +11,8 @@ use ra_syntax::{ast, Parse, SourceFile, TextRange, TextUnit}; pub use crate::{ cancellation::Canceled, input::{ - CrateGraph, CrateId, CrateName, Dependency, Edition, Env, FileId, SourceRoot, SourceRootId, + CrateGraph, CrateId, CrateName, Dependency, Edition, Env, ExternSourceId, FileId, + SourceRoot, SourceRootId, }, }; pub use relative_path::{RelativePath, RelativePathBuf}; @@ -87,6 +88,12 @@ pub trait FileLoader { fn resolve_relative_path(&self, anchor: FileId, relative_path: &RelativePath) -> Option; fn relevant_crates(&self, file_id: FileId) -> Arc>; + + fn resolve_extern_path( + &self, + extern_id: ExternSourceId, + relative_path: &RelativePath, + ) -> Option; } /// Database which stores all significant input facts: source code and project @@ -164,4 +171,13 @@ impl FileLoader for FileLoaderDelegate<&'_ T> { let source_root = self.0.file_source_root(file_id); self.0.source_root_crates(source_root) } + + fn resolve_extern_path( + &self, + extern_id: ExternSourceId, + relative_path: &RelativePath, + ) -> Option { + let source_root = self.0.source_root(SourceRootId(extern_id.0)); + source_root.file_by_relative_path(&relative_path) + } } diff --git a/crates/ra_hir_def/src/test_db.rs b/crates/ra_hir_def/src/test_db.rs index 1568820e9..0756916a8 100644 --- a/crates/ra_hir_def/src/test_db.rs +++ b/crates/ra_hir_def/src/test_db.rs @@ -6,7 +6,7 @@ use std::{ }; use crate::db::DefDatabase; -use ra_db::{salsa, CrateId, FileId, FileLoader, FileLoaderDelegate, RelativePath}; +use ra_db::{salsa, CrateId, ExternSourceId, FileId, FileLoader, FileLoaderDelegate, RelativePath}; #[salsa::database( ra_db::SourceDatabaseExtStorage, @@ -52,6 +52,14 @@ impl FileLoader for TestDB { fn relevant_crates(&self, file_id: FileId) -> Arc> { FileLoaderDelegate(self).relevant_crates(file_id) } + + fn resolve_extern_path( + &self, + extern_id: ExternSourceId, + relative_path: &RelativePath, + ) -> Option { + FileLoaderDelegate(self).resolve_extern_path(extern_id, relative_path) + } } impl TestDB { diff --git a/crates/ra_hir_expand/src/test_db.rs b/crates/ra_hir_expand/src/test_db.rs index 918736e2a..c1fb762de 100644 --- a/crates/ra_hir_expand/src/test_db.rs +++ b/crates/ra_hir_expand/src/test_db.rs @@ -5,7 +5,7 @@ use std::{ sync::{Arc, Mutex}, }; -use ra_db::{salsa, CrateId, FileId, FileLoader, FileLoaderDelegate, RelativePath}; +use ra_db::{salsa, CrateId, ExternSourceId, FileId, FileLoader, FileLoaderDelegate, RelativePath}; #[salsa::database( ra_db::SourceDatabaseExtStorage, @@ -51,4 +51,11 @@ impl FileLoader for TestDB { fn relevant_crates(&self, file_id: FileId) -> Arc> { FileLoaderDelegate(self).relevant_crates(file_id) } + fn resolve_extern_path( + &self, + anchor: ExternSourceId, + relative_path: &RelativePath, + ) -> Option { + FileLoaderDelegate(self).resolve_extern_path(anchor, relative_path) + } } diff --git a/crates/ra_hir_ty/src/test_db.rs b/crates/ra_hir_ty/src/test_db.rs index c794f7b84..0be2fea4b 100644 --- a/crates/ra_hir_ty/src/test_db.rs +++ b/crates/ra_hir_ty/src/test_db.rs @@ -67,6 +67,13 @@ impl FileLoader for TestDB { fn relevant_crates(&self, file_id: FileId) -> Arc> { FileLoaderDelegate(self).relevant_crates(file_id) } + fn resolve_extern_path( + &self, + extern_id: ra_db::ExternSourceId, + relative_path: &RelativePath, + ) -> Option { + FileLoaderDelegate(self).resolve_extern_path(extern_id, relative_path) + } } impl TestDB { diff --git a/crates/ra_ide_db/src/lib.rs b/crates/ra_ide_db/src/lib.rs index a105c7556..74408d3d7 100644 --- a/crates/ra_ide_db/src/lib.rs +++ b/crates/ra_ide_db/src/lib.rs @@ -57,6 +57,13 @@ impl FileLoader for RootDatabase { fn relevant_crates(&self, file_id: FileId) -> Arc> { FileLoaderDelegate(self).relevant_crates(file_id) } + fn resolve_extern_path( + &self, + extern_id: ra_db::ExternSourceId, + relative_path: &RelativePath, + ) -> Option { + FileLoaderDelegate(self).resolve_extern_path(extern_id, relative_path) + } } impl salsa::Database for RootDatabase { -- cgit v1.2.3