Skip to content

Commit d06df2c

Browse files
bors[bot]matklad
andauthored
Merge #4756
4756: Cleanup resolution of file paths r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>
2 parents f98d057 + cb9d904 commit d06df2c

File tree

8 files changed

+36
-90
lines changed

8 files changed

+36
-90
lines changed

crates/ra_db/src/lib.rs

+13-13
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,7 @@ 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-
fn resolve_relative_path(&self, anchor: FileId, relative_path: &RelativePath)
93-
-> Option<FileId>;
92+
fn resolve_path(&self, anchor: FileId, path: &str) -> Option<FileId>;
9493
fn relevant_crates(&self, file_id: FileId) -> Arc<Vec<CrateId>>;
9594

9695
fn resolve_extern_path(
@@ -155,20 +154,21 @@ impl<T: SourceDatabaseExt> FileLoader for FileLoaderDelegate<&'_ T> {
155154
fn file_text(&self, file_id: FileId) -> Arc<String> {
156155
SourceDatabaseExt::file_text(self.0, file_id)
157156
}
158-
fn resolve_relative_path(
159-
&self,
160-
anchor: FileId,
161-
relative_path: &RelativePath,
162-
) -> Option<FileId> {
163-
let path = {
164-
let mut path = self.0.file_relative_path(anchor);
165-
assert!(path.pop());
166-
path.push(relative_path);
167-
path.normalize()
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.
162+
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()
168168
};
169169
let source_root = self.0.file_source_root(anchor);
170170
let source_root = self.0.source_root(source_root);
171-
source_root.file_by_relative_path(&path)
171+
source_root.file_by_relative_path(&rel_path)
172172
}
173173

174174
fn relevant_crates(&self, file_id: FileId) -> Arc<Vec<CrateId>> {

crates/ra_hir_def/src/nameres/mod_resolution.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ impl ModDir {
6161
};
6262

6363
for candidate in candidate_files.iter() {
64-
if let Some(file_id) = db.resolve_relative_path(file_id, candidate) {
64+
if let Some(file_id) = db.resolve_path(file_id, candidate.as_str()) {
6565
let mut root_non_dir_owner = false;
6666
let mut mod_path = RelativePathBuf::new();
6767
if !(candidate.ends_with("mod.rs") || attr_path.is_some()) {

crates/ra_hir_def/src/test_db.rs

+2-6
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,8 @@ impl FileLoader for TestDB {
5858
fn file_text(&self, file_id: FileId) -> Arc<String> {
5959
FileLoaderDelegate(self).file_text(file_id)
6060
}
61-
fn resolve_relative_path(
62-
&self,
63-
anchor: FileId,
64-
relative_path: &RelativePath,
65-
) -> Option<FileId> {
66-
FileLoaderDelegate(self).resolve_relative_path(anchor, relative_path)
61+
fn resolve_path(&self, anchor: FileId, path: &str) -> Option<FileId> {
62+
FileLoaderDelegate(self).resolve_path(anchor, path)
6763
}
6864
fn relevant_crates(&self, file_id: FileId) -> Arc<Vec<CrateId>> {
6965
FileLoaderDelegate(self).relevant_crates(file_id)

crates/ra_hir_expand/src/builtin_macro.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use crate::{
88
use crate::{quote, EagerMacroId, LazyMacroId, MacroCallId};
99
use either::Either;
1010
use mbe::parse_to_token_tree;
11-
use ra_db::{FileId, RelativePath};
11+
use ra_db::FileId;
1212
use ra_parser::FragmentKind;
1313

1414
macro_rules! register_builtin {
@@ -297,7 +297,7 @@ fn relative_file(db: &dyn AstDatabase, call_id: MacroCallId, path: &str) -> Opti
297297
let call_site = call_id.as_file().original_file(db);
298298

299299
// Handle trivial case
300-
if let Some(res) = db.resolve_relative_path(call_site, &RelativePath::new(&path)) {
300+
if let Some(res) = db.resolve_path(call_site, path) {
301301
// Prevent include itself
302302
return if res == call_site { None } else { Some(res) };
303303
}

crates/ra_hir_expand/src/test_db.rs

+2-6
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,8 @@ impl FileLoader for TestDB {
4141
fn file_text(&self, file_id: FileId) -> Arc<String> {
4242
FileLoaderDelegate(self).file_text(file_id)
4343
}
44-
fn resolve_relative_path(
45-
&self,
46-
anchor: FileId,
47-
relative_path: &RelativePath,
48-
) -> Option<FileId> {
49-
FileLoaderDelegate(self).resolve_relative_path(anchor, relative_path)
44+
fn resolve_path(&self, anchor: FileId, path: &str) -> Option<FileId> {
45+
FileLoaderDelegate(self).resolve_path(anchor, path)
5046
}
5147
fn relevant_crates(&self, file_id: FileId) -> Arc<Vec<CrateId>> {
5248
FileLoaderDelegate(self).relevant_crates(file_id)

crates/ra_hir_ty/src/test_db.rs

+2-6
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,8 @@ impl FileLoader for TestDB {
7272
fn file_text(&self, file_id: FileId) -> Arc<String> {
7373
FileLoaderDelegate(self).file_text(file_id)
7474
}
75-
fn resolve_relative_path(
76-
&self,
77-
anchor: FileId,
78-
relative_path: &RelativePath,
79-
) -> Option<FileId> {
80-
FileLoaderDelegate(self).resolve_relative_path(anchor, relative_path)
75+
fn resolve_path(&self, anchor: FileId, path: &str) -> Option<FileId> {
76+
FileLoaderDelegate(self).resolve_path(anchor, path)
8177
}
8278
fn relevant_crates(&self, file_id: FileId) -> Arc<Vec<CrateId>> {
8379
FileLoaderDelegate(self).relevant_crates(file_id)

crates/ra_ide_db/src/lib.rs

+2-6
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,8 @@ impl FileLoader for RootDatabase {
5757
fn file_text(&self, file_id: FileId) -> Arc<String> {
5858
FileLoaderDelegate(self).file_text(file_id)
5959
}
60-
fn resolve_relative_path(
61-
&self,
62-
anchor: FileId,
63-
relative_path: &RelativePath,
64-
) -> Option<FileId> {
65-
FileLoaderDelegate(self).resolve_relative_path(anchor, relative_path)
60+
fn resolve_path(&self, anchor: FileId, path: &str) -> Option<FileId> {
61+
FileLoaderDelegate(self).resolve_path(anchor, path)
6662
}
6763
fn relevant_crates(&self, file_id: FileId) -> Arc<Vec<CrateId>> {
6864
FileLoaderDelegate(self).relevant_crates(file_id)

crates/rust-analyzer/tests/heavy_tests/main.rs

+12-50
Original file line numberDiff line numberDiff line change
@@ -523,8 +523,6 @@ fn main() {
523523
let vb = B;
524524
message();
525525
}
526-
527-
fn main() { message(); }
528526
"###,
529527
)
530528
.with_config(|config| {
@@ -552,34 +550,16 @@ fn main() { message(); }
552550
},
553551
json!([{
554552
"originSelectionRange": {
555-
"end": {
556-
"character": 10,
557-
"line": 12
558-
},
559-
"start": {
560-
"character": 8,
561-
"line": 12
562-
}
553+
"end": { "character": 10, "line": 12 },
554+
"start": { "character": 8, "line": 12 }
563555
},
564556
"targetRange": {
565-
"end": {
566-
"character": 9,
567-
"line": 3
568-
},
569-
"start": {
570-
"character": 0,
571-
"line": 2
572-
}
557+
"end": { "character": 9, "line": 3 },
558+
"start": { "character": 0, "line": 2 }
573559
},
574560
"targetSelectionRange": {
575-
"end": {
576-
"character": 8,
577-
"line": 3
578-
},
579-
"start": {
580-
"character": 7,
581-
"line": 3
582-
}
561+
"end": { "character": 8, "line": 3 },
562+
"start": { "character": 7, "line": 3 }
583563
},
584564
"targetUri": "file:///[..]src/main.rs"
585565
}]),
@@ -595,34 +575,16 @@ fn main() { message(); }
595575
},
596576
json!([{
597577
"originSelectionRange": {
598-
"end": {
599-
"character": 10,
600-
"line": 13
601-
},
602-
"start": {
603-
"character": 8,
604-
"line":13
605-
}
578+
"end": { "character": 10, "line": 13 },
579+
"start": { "character": 8, "line":13 }
606580
},
607581
"targetRange": {
608-
"end": {
609-
"character": 9,
610-
"line": 7
611-
},
612-
"start": {
613-
"character": 0,
614-
"line":6
615-
}
582+
"end": { "character": 9, "line": 7 },
583+
"start": { "character": 0, "line":6 }
616584
},
617585
"targetSelectionRange": {
618-
"end": {
619-
"character": 8,
620-
"line": 7
621-
},
622-
"start": {
623-
"character": 7,
624-
"line": 7
625-
}
586+
"end": { "character": 8, "line": 7 },
587+
"start": { "character": 7, "line": 7 }
626588
},
627589
"targetUri": "file:///[..]src/main.rs"
628590
}]),

0 commit comments

Comments
 (0)