aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/mock.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/mock.rs')
-rw-r--r--crates/ra_hir/src/mock.rs48
1 files changed, 2 insertions, 46 deletions
diff --git a/crates/ra_hir/src/mock.rs b/crates/ra_hir/src/mock.rs
index 48723fa02..94aff93de 100644
--- a/crates/ra_hir/src/mock.rs
+++ b/crates/ra_hir/src/mock.rs
@@ -5,10 +5,9 @@ use std::{panic, sync::Arc};
5use hir_def::{db::DefDatabase2, ModuleId}; 5use hir_def::{db::DefDatabase2, ModuleId};
6use hir_expand::diagnostics::DiagnosticSink; 6use hir_expand::diagnostics::DiagnosticSink;
7use parking_lot::Mutex; 7use parking_lot::Mutex;
8use ra_cfg::CfgOptions;
9use ra_db::{ 8use ra_db::{
10 salsa, CrateGraph, CrateId, Edition, FileId, FileLoader, FileLoaderDelegate, RelativePath, 9 salsa, CrateId, FileId, FileLoader, FileLoaderDelegate, RelativePath, SourceDatabase,
11 RelativePathBuf, SourceDatabase, SourceDatabaseExt, SourceRoot, SourceRootId, 10 SourceRootId,
12}; 11};
13use rustc_hash::FxHashMap; 12use rustc_hash::FxHashMap;
14 13
@@ -63,14 +62,6 @@ impl HirDebugHelper for MockDatabase {
63} 62}
64 63
65impl MockDatabase { 64impl MockDatabase {
66 pub fn with_single_file(text: &str) -> (MockDatabase, SourceRoot, FileId) {
67 let mut db = MockDatabase::default();
68 let mut source_root = SourceRoot::default();
69 let file_id = db.add_file(WORKSPACE, "/", &mut source_root, "/main.rs", text);
70 db.set_source_root(WORKSPACE, Arc::new(source_root.clone()));
71 (db, source_root, file_id)
72 }
73
74 pub fn file_id_of(&self, path: &str) -> FileId { 65 pub fn file_id_of(&self, path: &str) -> FileId {
75 match self.files.get(path) { 66 match self.files.get(path) {
76 Some(it) => *it, 67 Some(it) => *it,
@@ -96,41 +87,6 @@ impl MockDatabase {
96 } 87 }
97 buf 88 buf
98 } 89 }
99
100 fn add_file(
101 &mut self,
102 source_root_id: SourceRootId,
103 source_root_prefix: &str,
104 source_root: &mut SourceRoot,
105 path: &str,
106 text: &str,
107 ) -> FileId {
108 assert!(source_root_prefix.starts_with('/'));
109 assert!(source_root_prefix.ends_with('/'));
110 assert!(path.starts_with(source_root_prefix));
111 let rel_path = RelativePathBuf::from_path(&path[source_root_prefix.len()..]).unwrap();
112
113 let is_crate_root = rel_path == "lib.rs" || rel_path == "/main.rs";
114
115 let file_id = FileId(self.files.len() as u32);
116
117 let prev = self.files.insert(path.to_string(), file_id);
118 assert!(prev.is_none(), "duplicate files in the text fixture");
119 Arc::make_mut(&mut self.file_paths).insert(file_id, path.to_string());
120
121 let text = Arc::new(text.to_string());
122 self.set_file_text(file_id, text);
123 self.set_file_relative_path(file_id, rel_path.clone());
124 self.set_file_source_root(file_id, source_root_id);
125 source_root.insert_file(rel_path, file_id);
126
127 if is_crate_root {
128 let mut crate_graph = CrateGraph::default();
129 crate_graph.add_crate_root(file_id, Edition::Edition2018, CfgOptions::default());
130 self.set_crate_graph(Arc::new(crate_graph));
131 }
132 file_id
133 }
134} 90}
135 91
136impl salsa::Database for MockDatabase { 92impl salsa::Database for MockDatabase {