Skip to content

Commit 9923383

Browse files
committed
add graph fixture
1 parent dced2f4 commit 9923383

File tree

3 files changed

+81
-71
lines changed

3 files changed

+81
-71
lines changed

crates/ra_hir/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ macro_rules! impl_froms {
1818
}
1919

2020
pub mod db;
21+
#[macro_use]
2122
pub mod mock;
2223
mod query_definitions;
2324
mod path;

crates/ra_hir/src/mock.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,24 @@ impl MockDatabase {
5555
}
5656
}
5757

58+
pub fn set_crate_graph_from_fixture(&mut self, graph: CrateGraphFixture) {
59+
let mut ids = FxHashMap::default();
60+
let mut crate_graph = CrateGraph::default();
61+
for (crate_name, (crate_root, _)) in graph.0.iter() {
62+
let crate_root = self.file_id_of(&crate_root);
63+
let crate_id = crate_graph.add_crate_root(crate_root);
64+
ids.insert(crate_name, crate_id);
65+
}
66+
for (crate_name, (_, deps)) in graph.0.iter() {
67+
let from = ids[crate_name];
68+
for dep in deps {
69+
let to = ids[dep];
70+
crate_graph.add_dep(from, dep.as_str().into(), to).unwrap();
71+
}
72+
}
73+
self.set_crate_graph(Arc::new(crate_graph))
74+
}
75+
5876
fn from_fixture(fixture: &str) -> (MockDatabase, Option<FilePosition>) {
5977
let mut db = MockDatabase::default();
6078

@@ -212,3 +230,20 @@ impl MockDatabase {
212230
.collect()
213231
}
214232
}
233+
234+
#[derive(Default)]
235+
pub struct CrateGraphFixture(pub FxHashMap<String, (String, Vec<String>)>);
236+
237+
#[macro_export]
238+
macro_rules! crate_graph {
239+
($($crate_name:literal: ($crate_path:literal, [$($dep:literal),*]),)*) => {{
240+
let mut res = $crate::mock::CrateGraphFixture::default();
241+
$(
242+
res.0.insert(
243+
$crate_name.to_string(),
244+
($crate_path.to_string(), vec![$($dep.to_string()),*])
245+
);
246+
)*
247+
res
248+
}}
249+
}

crates/ra_hir/src/nameres/tests.rs

Lines changed: 45 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::sync::Arc;
22

3-
use ra_db::{CrateGraph, SourceDatabase};
3+
use ra_db::SourceDatabase;
44
use test_utils::{assert_eq_text, covers};
55

66
use crate::{
@@ -19,20 +19,6 @@ fn item_map(fixture: &str) -> (Arc<ItemMap>, ModuleId) {
1919
(db.item_map(krate), module_id)
2020
}
2121

22-
/// Sets the crate root to the file of the cursor marker
23-
fn item_map_custom_crate_root(fixture: &str) -> (Arc<ItemMap>, ModuleId) {
24-
let (mut db, pos) = MockDatabase::with_position(fixture);
25-
26-
let mut crate_graph = CrateGraph::default();
27-
crate_graph.add_crate_root(pos.file_id);
28-
db.set_crate_graph(Arc::new(crate_graph));
29-
30-
let module = crate::source_binder::module_from_position(&db, pos).unwrap();
31-
let krate = module.krate(&db).unwrap();
32-
let module_id = module.module_id;
33-
(db.item_map(krate), module_id)
34-
}
35-
3622
fn check_module_item_map(map: &ItemMap, module_id: ModuleId, expected: &str) {
3723
let mut lines = map[module_id]
3824
.items
@@ -258,17 +244,13 @@ fn glob_across_crates() {
258244
259245
//- /lib.rs
260246
pub struct Baz;
261-
",
247+
",
262248
);
249+
db.set_crate_graph_from_fixture(crate_graph! {
250+
"main": ("/main.rs", ["test_crate"]),
251+
"test_crate": ("/lib.rs", []),
252+
});
263253
let main_id = db.file_id_of("/main.rs");
264-
let lib_id = db.file_id_of("/lib.rs");
265-
266-
let mut crate_graph = CrateGraph::default();
267-
let main_crate = crate_graph.add_crate_root(main_id);
268-
let lib_crate = crate_graph.add_crate_root(lib_id);
269-
crate_graph.add_dep(main_crate, "test_crate".into(), lib_crate).unwrap();
270-
271-
db.set_crate_graph(Arc::new(crate_graph));
272254

273255
let module = crate::source_binder::module_from_file_id(&db, main_id).unwrap();
274256
let krate = module.krate(&db).unwrap();
@@ -285,22 +267,31 @@ fn glob_across_crates() {
285267

286268
#[test]
287269
fn module_resolution_works_for_non_standard_filenames() {
288-
let (item_map, module_id) = item_map_custom_crate_root(
270+
let mut db = MockDatabase::with_files(
289271
"
290272
//- /my_library.rs
291273
mod foo;
292274
use self::foo::Bar;
293-
<|>
275+
294276
//- /foo/mod.rs
295277
pub struct Bar;
296-
",
278+
",
297279
);
280+
db.set_crate_graph_from_fixture(crate_graph! {
281+
"my_library": ("/my_library.rs", []),
282+
});
283+
let file_id = db.file_id_of("/my_library.rs");
284+
285+
let module = crate::source_binder::module_from_file_id(&db, file_id).unwrap();
286+
let krate = module.krate(&db).unwrap();
287+
let module_id = module.module_id;
288+
let item_map = db.item_map(krate);
298289
check_module_item_map(
299290
&item_map,
300291
module_id,
301292
"
302-
Bar: t v
303-
foo: t
293+
Bar: t v
294+
foo: t
304295
",
305296
);
306297
}
@@ -417,17 +408,13 @@ fn item_map_across_crates() {
417408
418409
//- /lib.rs
419410
pub struct Baz;
420-
",
411+
",
421412
);
413+
db.set_crate_graph_from_fixture(crate_graph! {
414+
"main": ("/main.rs", ["test_crate"]),
415+
"test_crate": ("/lib.rs", []),
416+
});
422417
let main_id = db.file_id_of("/main.rs");
423-
let lib_id = db.file_id_of("/lib.rs");
424-
425-
let mut crate_graph = CrateGraph::default();
426-
let main_crate = crate_graph.add_crate_root(main_id);
427-
let lib_crate = crate_graph.add_crate_root(lib_id);
428-
crate_graph.add_dep(main_crate, "test_crate".into(), lib_crate).unwrap();
429-
430-
db.set_crate_graph(Arc::new(crate_graph));
431418

432419
let module = crate::source_binder::module_from_file_id(&db, main_id).unwrap();
433420
let krate = module.krate(&db).unwrap();
@@ -437,7 +424,7 @@ fn item_map_across_crates() {
437424
&item_map,
438425
module.module_id,
439426
"
440-
Baz: t v
427+
Baz: t v
441428
",
442429
);
443430
}
@@ -457,18 +444,13 @@ fn extern_crate_rename() {
457444
458445
//- /lib.rs
459446
struct Arc;
460-
",
447+
",
461448
);
462-
let main_id = db.file_id_of("/main.rs");
449+
db.set_crate_graph_from_fixture(crate_graph! {
450+
"main": ("/main.rs", ["alloc"]),
451+
"alloc": ("/lib.rs", []),
452+
});
463453
let sync_id = db.file_id_of("/sync.rs");
464-
let lib_id = db.file_id_of("/lib.rs");
465-
466-
let mut crate_graph = CrateGraph::default();
467-
let main_crate = crate_graph.add_crate_root(main_id);
468-
let lib_crate = crate_graph.add_crate_root(lib_id);
469-
crate_graph.add_dep(main_crate, "alloc".into(), lib_crate).unwrap();
470-
471-
db.set_crate_graph(Arc::new(crate_graph));
472454

473455
let module = crate::source_binder::module_from_file_id(&db, sync_id).unwrap();
474456
let krate = module.krate(&db).unwrap();
@@ -478,7 +460,7 @@ fn extern_crate_rename() {
478460
&item_map,
479461
module.module_id,
480462
"
481-
Arc: t v
463+
Arc: t v
482464
",
483465
);
484466
}
@@ -494,21 +476,17 @@ fn import_across_source_roots() {
494476
}
495477
}
496478
497-
//- root /test_crate/
479+
//- root /main/
498480
499-
//- /test_crate/main.rs
481+
//- /main/main.rs
500482
use test_crate::a::b::C;
501483
",
502484
);
503-
let lib_id = db.file_id_of("/lib.rs");
504-
let main_id = db.file_id_of("/test_crate/main.rs");
505-
506-
let mut crate_graph = CrateGraph::default();
507-
let main_crate = crate_graph.add_crate_root(main_id);
508-
let lib_crate = crate_graph.add_crate_root(lib_id);
509-
crate_graph.add_dep(main_crate, "test_crate".into(), lib_crate).unwrap();
510-
511-
db.set_crate_graph(Arc::new(crate_graph));
485+
db.set_crate_graph_from_fixture(crate_graph! {
486+
"main": ("/main/main.rs", ["test_crate"]),
487+
"test_crate": ("/lib.rs", []),
488+
});
489+
let main_id = db.file_id_of("/main/main.rs");
512490

513491
let module = crate::source_binder::module_from_file_id(&db, main_id).unwrap();
514492
let krate = module.krate(&db).unwrap();
@@ -537,17 +515,13 @@ fn reexport_across_crates() {
537515
538516
//- /foo.rs
539517
pub struct Baz;
540-
",
518+
",
541519
);
520+
db.set_crate_graph_from_fixture(crate_graph! {
521+
"main": ("/main.rs", ["test_crate"]),
522+
"test_crate": ("/lib.rs", []),
523+
});
542524
let main_id = db.file_id_of("/main.rs");
543-
let lib_id = db.file_id_of("/lib.rs");
544-
545-
let mut crate_graph = CrateGraph::default();
546-
let main_crate = crate_graph.add_crate_root(main_id);
547-
let lib_crate = crate_graph.add_crate_root(lib_id);
548-
crate_graph.add_dep(main_crate, "test_crate".into(), lib_crate).unwrap();
549-
550-
db.set_crate_graph(Arc::new(crate_graph));
551525

552526
let module = crate::source_binder::module_from_file_id(&db, main_id).unwrap();
553527
let krate = module.krate(&db).unwrap();
@@ -557,7 +531,7 @@ fn reexport_across_crates() {
557531
&item_map,
558532
module.module_id,
559533
"
560-
Baz: t v
534+
Baz: t v
561535
",
562536
);
563537
}

0 commit comments

Comments
 (0)