mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-30 22:01:37 +00:00
Add resolve_extern_path in DB
This commit is contained in:
parent
8153a0b3ef
commit
22f064cca7
5 changed files with 48 additions and 3 deletions
|
@ -11,7 +11,8 @@ use ra_syntax::{ast, Parse, SourceFile, TextRange, TextUnit};
|
||||||
pub use crate::{
|
pub use crate::{
|
||||||
cancellation::Canceled,
|
cancellation::Canceled,
|
||||||
input::{
|
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};
|
pub use relative_path::{RelativePath, RelativePathBuf};
|
||||||
|
@ -87,6 +88,12 @@ pub trait FileLoader {
|
||||||
fn resolve_relative_path(&self, anchor: FileId, relative_path: &RelativePath)
|
fn resolve_relative_path(&self, anchor: FileId, relative_path: &RelativePath)
|
||||||
-> Option<FileId>;
|
-> Option<FileId>;
|
||||||
fn relevant_crates(&self, file_id: FileId) -> Arc<Vec<CrateId>>;
|
fn relevant_crates(&self, file_id: FileId) -> Arc<Vec<CrateId>>;
|
||||||
|
|
||||||
|
fn resolve_extern_path(
|
||||||
|
&self,
|
||||||
|
extern_id: ExternSourceId,
|
||||||
|
relative_path: &RelativePath,
|
||||||
|
) -> Option<FileId>;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Database which stores all significant input facts: source code and project
|
/// Database which stores all significant input facts: source code and project
|
||||||
|
@ -164,4 +171,13 @@ impl<T: SourceDatabaseExt> FileLoader for FileLoaderDelegate<&'_ T> {
|
||||||
let source_root = self.0.file_source_root(file_id);
|
let source_root = self.0.file_source_root(file_id);
|
||||||
self.0.source_root_crates(source_root)
|
self.0.source_root_crates(source_root)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn resolve_extern_path(
|
||||||
|
&self,
|
||||||
|
extern_id: ExternSourceId,
|
||||||
|
relative_path: &RelativePath,
|
||||||
|
) -> Option<FileId> {
|
||||||
|
let source_root = self.0.source_root(SourceRootId(extern_id.0));
|
||||||
|
source_root.file_by_relative_path(&relative_path)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@ use std::{
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::db::DefDatabase;
|
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(
|
#[salsa::database(
|
||||||
ra_db::SourceDatabaseExtStorage,
|
ra_db::SourceDatabaseExtStorage,
|
||||||
|
@ -52,6 +52,14 @@ impl FileLoader for TestDB {
|
||||||
fn relevant_crates(&self, file_id: FileId) -> Arc<Vec<CrateId>> {
|
fn relevant_crates(&self, file_id: FileId) -> Arc<Vec<CrateId>> {
|
||||||
FileLoaderDelegate(self).relevant_crates(file_id)
|
FileLoaderDelegate(self).relevant_crates(file_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn resolve_extern_path(
|
||||||
|
&self,
|
||||||
|
extern_id: ExternSourceId,
|
||||||
|
relative_path: &RelativePath,
|
||||||
|
) -> Option<FileId> {
|
||||||
|
FileLoaderDelegate(self).resolve_extern_path(extern_id, relative_path)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TestDB {
|
impl TestDB {
|
||||||
|
|
|
@ -5,7 +5,7 @@ use std::{
|
||||||
sync::{Arc, Mutex},
|
sync::{Arc, Mutex},
|
||||||
};
|
};
|
||||||
|
|
||||||
use ra_db::{salsa, CrateId, FileId, FileLoader, FileLoaderDelegate, RelativePath};
|
use ra_db::{salsa, CrateId, ExternSourceId, FileId, FileLoader, FileLoaderDelegate, RelativePath};
|
||||||
|
|
||||||
#[salsa::database(
|
#[salsa::database(
|
||||||
ra_db::SourceDatabaseExtStorage,
|
ra_db::SourceDatabaseExtStorage,
|
||||||
|
@ -51,4 +51,11 @@ impl FileLoader for TestDB {
|
||||||
fn relevant_crates(&self, file_id: FileId) -> Arc<Vec<CrateId>> {
|
fn relevant_crates(&self, file_id: FileId) -> Arc<Vec<CrateId>> {
|
||||||
FileLoaderDelegate(self).relevant_crates(file_id)
|
FileLoaderDelegate(self).relevant_crates(file_id)
|
||||||
}
|
}
|
||||||
|
fn resolve_extern_path(
|
||||||
|
&self,
|
||||||
|
anchor: ExternSourceId,
|
||||||
|
relative_path: &RelativePath,
|
||||||
|
) -> Option<FileId> {
|
||||||
|
FileLoaderDelegate(self).resolve_extern_path(anchor, relative_path)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,6 +67,13 @@ impl FileLoader for TestDB {
|
||||||
fn relevant_crates(&self, file_id: FileId) -> Arc<Vec<CrateId>> {
|
fn relevant_crates(&self, file_id: FileId) -> Arc<Vec<CrateId>> {
|
||||||
FileLoaderDelegate(self).relevant_crates(file_id)
|
FileLoaderDelegate(self).relevant_crates(file_id)
|
||||||
}
|
}
|
||||||
|
fn resolve_extern_path(
|
||||||
|
&self,
|
||||||
|
extern_id: ra_db::ExternSourceId,
|
||||||
|
relative_path: &RelativePath,
|
||||||
|
) -> Option<FileId> {
|
||||||
|
FileLoaderDelegate(self).resolve_extern_path(extern_id, relative_path)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TestDB {
|
impl TestDB {
|
||||||
|
|
|
@ -57,6 +57,13 @@ impl FileLoader for RootDatabase {
|
||||||
fn relevant_crates(&self, file_id: FileId) -> Arc<Vec<CrateId>> {
|
fn relevant_crates(&self, file_id: FileId) -> Arc<Vec<CrateId>> {
|
||||||
FileLoaderDelegate(self).relevant_crates(file_id)
|
FileLoaderDelegate(self).relevant_crates(file_id)
|
||||||
}
|
}
|
||||||
|
fn resolve_extern_path(
|
||||||
|
&self,
|
||||||
|
extern_id: ra_db::ExternSourceId,
|
||||||
|
relative_path: &RelativePath,
|
||||||
|
) -> Option<FileId> {
|
||||||
|
FileLoaderDelegate(self).resolve_extern_path(extern_id, relative_path)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl salsa::Database for RootDatabase {
|
impl salsa::Database for RootDatabase {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue