Skip to content

Commit bbb40d7

Browse files
committed
Minimize FileLoader interface
1 parent 9c52f52 commit bbb40d7

File tree

6 files changed

+35
-79
lines changed

6 files changed

+35
-79
lines changed

crates/ra_db/src/lib.rs

Lines changed: 24 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,13 @@ pub const DEFAULT_LRU_CAP: usize = 128;
8989
pub trait FileLoader {
9090
/// Text of the file.
9191
fn file_text(&self, file_id: FileId) -> Arc<String>;
92+
/// Note that we intentionally accept a `&str` and not a `&Path` here. This
93+
/// method exists to handle `#[path = "/some/path.rs"] mod foo;` and such,
94+
/// so the input is guaranteed to be utf-8 string. We might introduce
95+
/// `struct StrPath(str)` for clarity some day, but it's a bit messy, so we
96+
/// get by with a `&str` for the time being.
9297
fn resolve_path(&self, anchor: FileId, path: &str) -> Option<FileId>;
9398
fn relevant_crates(&self, file_id: FileId) -> Arc<Vec<CrateId>>;
94-
95-
fn resolve_extern_path(
96-
&self,
97-
extern_id: ExternSourceId,
98-
relative_path: &RelativePath,
99-
) -> Option<FileId>;
10099
}
101100

102101
/// Database which stores all significant input facts: source code and project
@@ -154,34 +153,30 @@ impl<T: SourceDatabaseExt> FileLoader for FileLoaderDelegate<&'_ T> {
154153
fn file_text(&self, file_id: FileId) -> Arc<String> {
155154
SourceDatabaseExt::file_text(self.0, file_id)
156155
}
157-
/// Note that we intentionally accept a `&str` and not a `&Path` here. This
158-
/// method exists to handle `#[path = "/some/path.rs"] mod foo;` and such,
159-
/// so the input is guaranteed to be utf-8 string. We might introduce
160-
/// `struct StrPath(str)` for clarity some day, but it's a bit messy, so we
161-
/// get by with a `&str` for the time being.
162156
fn resolve_path(&self, anchor: FileId, path: &str) -> Option<FileId> {
163-
let rel_path = {
164-
let mut rel_path = self.0.file_relative_path(anchor);
165-
assert!(rel_path.pop());
166-
rel_path.push(path);
167-
rel_path.normalize()
168-
};
169-
let source_root = self.0.file_source_root(anchor);
170-
let source_root = self.0.source_root(source_root);
171-
source_root.file_by_relative_path(&rel_path)
157+
// FIXME: this *somehow* should be platform agnostic...
158+
if std::path::Path::new(path).is_absolute() {
159+
let krate = *self.relevant_crates(anchor).get(0)?;
160+
let (extern_source_id, relative_file) =
161+
self.0.crate_graph()[krate].extern_source.extern_path(path)?;
162+
163+
let source_root = self.0.source_root(SourceRootId(extern_source_id.0));
164+
source_root.file_by_relative_path(&relative_file)
165+
} else {
166+
let rel_path = {
167+
let mut rel_path = self.0.file_relative_path(anchor);
168+
assert!(rel_path.pop());
169+
rel_path.push(path);
170+
rel_path.normalize()
171+
};
172+
let source_root = self.0.file_source_root(anchor);
173+
let source_root = self.0.source_root(source_root);
174+
source_root.file_by_relative_path(&rel_path)
175+
}
172176
}
173177

174178
fn relevant_crates(&self, file_id: FileId) -> Arc<Vec<CrateId>> {
175179
let source_root = self.0.file_source_root(file_id);
176180
self.0.source_root_crates(source_root)
177181
}
178-
179-
fn resolve_extern_path(
180-
&self,
181-
extern_id: ExternSourceId,
182-
relative_path: &RelativePath,
183-
) -> Option<FileId> {
184-
let source_root = self.0.source_root(SourceRootId(extern_id.0));
185-
source_root.file_by_relative_path(&relative_path)
186-
}
187182
}

crates/ra_hir_def/src/test_db.rs

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@ use std::{
66
};
77

88
use hir_expand::db::AstDatabase;
9-
use ra_db::{
10-
salsa, CrateId, ExternSourceId, FileId, FileLoader, FileLoaderDelegate, RelativePath, Upcast,
11-
};
9+
use ra_db::{salsa, CrateId, FileId, FileLoader, FileLoaderDelegate, Upcast};
1210

1311
use crate::db::DefDatabase;
1412

@@ -64,14 +62,6 @@ impl FileLoader for TestDB {
6462
fn relevant_crates(&self, file_id: FileId) -> Arc<Vec<CrateId>> {
6563
FileLoaderDelegate(self).relevant_crates(file_id)
6664
}
67-
68-
fn resolve_extern_path(
69-
&self,
70-
extern_id: ExternSourceId,
71-
relative_path: &RelativePath,
72-
) -> Option<FileId> {
73-
FileLoaderDelegate(self).resolve_extern_path(extern_id, relative_path)
74-
}
7565
}
7666

7767
impl TestDB {

crates/ra_hir_expand/src/builtin_macro.rs

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -295,19 +295,13 @@ fn concat_expand(
295295

296296
fn relative_file(db: &dyn AstDatabase, call_id: MacroCallId, path: &str) -> Option<FileId> {
297297
let call_site = call_id.as_file().original_file(db);
298-
299-
// Handle trivial case
300-
if let Some(res) = db.resolve_path(call_site, path) {
301-
// Prevent include itself
302-
return if res == call_site { None } else { Some(res) };
298+
let res = db.resolve_path(call_site, path)?;
299+
// Prevent include itself
300+
if res == call_site {
301+
None
302+
} else {
303+
Some(res)
303304
}
304-
305-
// Extern paths ?
306-
let krate = *db.relevant_crates(call_site).get(0)?;
307-
let (extern_source_id, relative_file) =
308-
db.crate_graph()[krate].extern_source.extern_path(path)?;
309-
310-
db.resolve_extern_path(extern_source_id, &relative_file)
311305
}
312306

313307
fn parse_string(tt: &tt::Subtree) -> Result<String, mbe::ExpandError> {

crates/ra_hir_expand/src/test_db.rs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std::{
55
sync::{Arc, Mutex},
66
};
77

8-
use ra_db::{salsa, CrateId, ExternSourceId, FileId, FileLoader, FileLoaderDelegate, RelativePath};
8+
use ra_db::{salsa, CrateId, FileId, FileLoader, FileLoaderDelegate};
99

1010
#[salsa::database(
1111
ra_db::SourceDatabaseExtStorage,
@@ -47,11 +47,4 @@ impl FileLoader for TestDB {
4747
fn relevant_crates(&self, file_id: FileId) -> Arc<Vec<CrateId>> {
4848
FileLoaderDelegate(self).relevant_crates(file_id)
4949
}
50-
fn resolve_extern_path(
51-
&self,
52-
anchor: ExternSourceId,
53-
relative_path: &RelativePath,
54-
) -> Option<FileId> {
55-
FileLoaderDelegate(self).resolve_extern_path(anchor, relative_path)
56-
}
5750
}

crates/ra_hir_ty/src/test_db.rs

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@ use std::{
77

88
use hir_def::{db::DefDatabase, AssocItemId, ModuleDefId, ModuleId};
99
use hir_expand::{db::AstDatabase, diagnostics::DiagnosticSink};
10-
use ra_db::{
11-
salsa, CrateId, FileId, FileLoader, FileLoaderDelegate, RelativePath, SourceDatabase, Upcast,
12-
};
10+
use ra_db::{salsa, CrateId, FileId, FileLoader, FileLoaderDelegate, SourceDatabase, Upcast};
1311
use stdx::format_to;
1412

1513
use crate::{db::HirDatabase, diagnostics::Diagnostic, expr::ExprValidator};
@@ -78,13 +76,6 @@ impl FileLoader for TestDB {
7876
fn relevant_crates(&self, file_id: FileId) -> Arc<Vec<CrateId>> {
7977
FileLoaderDelegate(self).relevant_crates(file_id)
8078
}
81-
fn resolve_extern_path(
82-
&self,
83-
extern_id: ra_db::ExternSourceId,
84-
relative_path: &RelativePath,
85-
) -> Option<FileId> {
86-
FileLoaderDelegate(self).resolve_extern_path(extern_id, relative_path)
87-
}
8879
}
8980

9081
impl TestDB {

crates/ra_ide_db/src/lib.rs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ use std::sync::Arc;
1616
use hir::db::{AstDatabase, DefDatabase};
1717
use ra_db::{
1818
salsa::{self, Database, Durability},
19-
Canceled, CheckCanceled, CrateId, FileId, FileLoader, FileLoaderDelegate, RelativePath,
20-
SourceDatabase, SourceRootId, Upcast,
19+
Canceled, CheckCanceled, CrateId, FileId, FileLoader, FileLoaderDelegate, SourceDatabase,
20+
SourceRootId, Upcast,
2121
};
2222
use rustc_hash::FxHashMap;
2323

@@ -63,13 +63,6 @@ impl FileLoader for RootDatabase {
6363
fn relevant_crates(&self, file_id: FileId) -> Arc<Vec<CrateId>> {
6464
FileLoaderDelegate(self).relevant_crates(file_id)
6565
}
66-
fn resolve_extern_path(
67-
&self,
68-
extern_id: ra_db::ExternSourceId,
69-
relative_path: &RelativePath,
70-
) -> Option<FileId> {
71-
FileLoaderDelegate(self).resolve_extern_path(extern_id, relative_path)
72-
}
7366
}
7467

7568
impl salsa::Database for RootDatabase {

0 commit comments

Comments
 (0)