diff options
Diffstat (limited to 'crates/ra_db/src/fixture.rs')
-rw-r--r-- | crates/ra_db/src/fixture.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/crates/ra_db/src/fixture.rs b/crates/ra_db/src/fixture.rs new file mode 100644 index 000000000..469251fe9 --- /dev/null +++ b/crates/ra_db/src/fixture.rs | |||
@@ -0,0 +1,40 @@ | |||
1 | //! FIXME: write short doc here | ||
2 | |||
3 | use std::sync::Arc; | ||
4 | |||
5 | use ra_cfg::CfgOptions; | ||
6 | |||
7 | use crate::{ | ||
8 | CrateGraph, Edition, FileId, RelativePathBuf, SourceDatabaseExt, SourceRoot, SourceRootId, | ||
9 | }; | ||
10 | |||
11 | pub const WORKSPACE: SourceRootId = SourceRootId(0); | ||
12 | |||
13 | pub trait WithFixture: Default + SourceDatabaseExt + 'static { | ||
14 | fn with_single_file(text: &str) -> (Self, FileId) { | ||
15 | let mut db = Self::default(); | ||
16 | let file_id = with_single_file(&mut db, text); | ||
17 | (db, file_id) | ||
18 | } | ||
19 | } | ||
20 | |||
21 | impl<DB: SourceDatabaseExt + Default + 'static> WithFixture for DB {} | ||
22 | |||
23 | fn with_single_file(db: &mut dyn SourceDatabaseExt, text: &str) -> FileId { | ||
24 | let file_id = FileId(0); | ||
25 | let rel_path: RelativePathBuf = "/main.rs".into(); | ||
26 | |||
27 | let mut source_root = SourceRoot::default(); | ||
28 | source_root.insert_file(rel_path.clone(), file_id); | ||
29 | |||
30 | let mut crate_graph = CrateGraph::default(); | ||
31 | crate_graph.add_crate_root(file_id, Edition::Edition2018, CfgOptions::default()); | ||
32 | |||
33 | db.set_file_text(file_id, Arc::new(text.to_string())); | ||
34 | db.set_file_relative_path(file_id, rel_path); | ||
35 | db.set_file_source_root(file_id, WORKSPACE); | ||
36 | db.set_source_root(WORKSPACE, Arc::new(source_root)); | ||
37 | db.set_crate_graph(Arc::new(crate_graph)); | ||
38 | |||
39 | file_id | ||
40 | } | ||