diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2020-06-23 16:53:56 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2020-06-23 16:53:56 +0100 |
commit | 0c12c4f9609ee72487af9b55a558b01af73ffe3e (patch) | |
tree | 29be52a980b4cae72f46a48c48135a15e31641e0 /crates/ra_db/src/fixture.rs | |
parent | 7aa66371ee3e8b31217513204c8b4f683584419d (diff) | |
parent | dad1333b48c38bc7a5628fc0ff5304d003776a85 (diff) |
Merge #4976
4976: New VFS r=matklad a=matklad
Still a draft, but mostly working already.
Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates/ra_db/src/fixture.rs')
-rw-r--r-- | crates/ra_db/src/fixture.rs | 32 |
1 files changed, 13 insertions, 19 deletions
diff --git a/crates/ra_db/src/fixture.rs b/crates/ra_db/src/fixture.rs index af8fe11ec..f7d9118a9 100644 --- a/crates/ra_db/src/fixture.rs +++ b/crates/ra_db/src/fixture.rs | |||
@@ -57,17 +57,16 @@ | |||
57 | //! fn insert_source_code_here() {} | 57 | //! fn insert_source_code_here() {} |
58 | //! " | 58 | //! " |
59 | //! ``` | 59 | //! ``` |
60 | 60 | use std::{str::FromStr, sync::Arc}; | |
61 | use std::str::FromStr; | ||
62 | use std::sync::Arc; | ||
63 | 61 | ||
64 | use ra_cfg::CfgOptions; | 62 | use ra_cfg::CfgOptions; |
65 | use rustc_hash::FxHashMap; | 63 | use rustc_hash::FxHashMap; |
66 | use test_utils::{extract_offset, parse_fixture, parse_single_fixture, FixtureMeta, CURSOR_MARKER}; | 64 | use test_utils::{extract_offset, parse_fixture, parse_single_fixture, FixtureMeta, CURSOR_MARKER}; |
65 | use vfs::{file_set::FileSet, VfsPath}; | ||
67 | 66 | ||
68 | use crate::{ | 67 | use crate::{ |
69 | input::CrateName, CrateGraph, CrateId, Edition, Env, FileId, FilePosition, RelativePathBuf, | 68 | input::CrateName, CrateGraph, CrateId, Edition, Env, FileId, FilePosition, SourceDatabaseExt, |
70 | SourceDatabaseExt, SourceRoot, SourceRootId, | 69 | SourceRoot, SourceRootId, |
71 | }; | 70 | }; |
72 | 71 | ||
73 | pub const WORKSPACE: SourceRootId = SourceRootId(0); | 72 | pub const WORKSPACE: SourceRootId = SourceRootId(0); |
@@ -105,10 +104,10 @@ impl<DB: SourceDatabaseExt + Default + 'static> WithFixture for DB {} | |||
105 | 104 | ||
106 | fn with_single_file(db: &mut dyn SourceDatabaseExt, ra_fixture: &str) -> FileId { | 105 | fn with_single_file(db: &mut dyn SourceDatabaseExt, ra_fixture: &str) -> FileId { |
107 | let file_id = FileId(0); | 106 | let file_id = FileId(0); |
108 | let rel_path: RelativePathBuf = "/main.rs".into(); | 107 | let mut file_set = vfs::file_set::FileSet::default(); |
108 | file_set.insert(file_id, vfs::VfsPath::new_virtual_path("/main.rs".to_string())); | ||
109 | 109 | ||
110 | let mut source_root = SourceRoot::new_local(); | 110 | let source_root = SourceRoot::new_local(file_set); |
111 | source_root.insert_file(rel_path.clone(), file_id); | ||
112 | 111 | ||
113 | let fixture = parse_single_fixture(ra_fixture); | 112 | let fixture = parse_single_fixture(ra_fixture); |
114 | 113 | ||
@@ -128,7 +127,6 @@ fn with_single_file(db: &mut dyn SourceDatabaseExt, ra_fixture: &str) -> FileId | |||
128 | meta.cfg, | 127 | meta.cfg, |
129 | meta.env, | 128 | meta.env, |
130 | Default::default(), | 129 | Default::default(), |
131 | Default::default(), | ||
132 | ); | 130 | ); |
133 | crate_graph | 131 | crate_graph |
134 | } else { | 132 | } else { |
@@ -140,13 +138,11 @@ fn with_single_file(db: &mut dyn SourceDatabaseExt, ra_fixture: &str) -> FileId | |||
140 | CfgOptions::default(), | 138 | CfgOptions::default(), |
141 | Env::default(), | 139 | Env::default(), |
142 | Default::default(), | 140 | Default::default(), |
143 | Default::default(), | ||
144 | ); | 141 | ); |
145 | crate_graph | 142 | crate_graph |
146 | }; | 143 | }; |
147 | 144 | ||
148 | db.set_file_text(file_id, Arc::new(ra_fixture.to_string())); | 145 | db.set_file_text(file_id, Arc::new(ra_fixture.to_string())); |
149 | db.set_file_relative_path(file_id, rel_path); | ||
150 | db.set_file_source_root(file_id, WORKSPACE); | 146 | db.set_file_source_root(file_id, WORKSPACE); |
151 | db.set_source_root(WORKSPACE, Arc::new(source_root)); | 147 | db.set_source_root(WORKSPACE, Arc::new(source_root)); |
152 | db.set_crate_graph(Arc::new(crate_graph)); | 148 | db.set_crate_graph(Arc::new(crate_graph)); |
@@ -162,7 +158,7 @@ fn with_files(db: &mut dyn SourceDatabaseExt, fixture: &str) -> Option<FilePosit | |||
162 | let mut crate_deps = Vec::new(); | 158 | let mut crate_deps = Vec::new(); |
163 | let mut default_crate_root: Option<FileId> = None; | 159 | let mut default_crate_root: Option<FileId> = None; |
164 | 160 | ||
165 | let mut source_root = SourceRoot::new_local(); | 161 | let mut file_set = FileSet::default(); |
166 | let mut source_root_id = WORKSPACE; | 162 | let mut source_root_id = WORKSPACE; |
167 | let mut source_root_prefix = "/".to_string(); | 163 | let mut source_root_prefix = "/".to_string(); |
168 | let mut file_id = FileId(0); | 164 | let mut file_id = FileId(0); |
@@ -172,8 +168,8 @@ fn with_files(db: &mut dyn SourceDatabaseExt, fixture: &str) -> Option<FilePosit | |||
172 | for entry in fixture.iter() { | 168 | for entry in fixture.iter() { |
173 | let meta = match ParsedMeta::from(&entry.meta) { | 169 | let meta = match ParsedMeta::from(&entry.meta) { |
174 | ParsedMeta::Root { path } => { | 170 | ParsedMeta::Root { path } => { |
175 | let source_root = std::mem::replace(&mut source_root, SourceRoot::new_local()); | 171 | let file_set = std::mem::replace(&mut file_set, FileSet::default()); |
176 | db.set_source_root(source_root_id, Arc::new(source_root)); | 172 | db.set_source_root(source_root_id, Arc::new(SourceRoot::new_local(file_set))); |
177 | source_root_id.0 += 1; | 173 | source_root_id.0 += 1; |
178 | source_root_prefix = path; | 174 | source_root_prefix = path; |
179 | continue; | 175 | continue; |
@@ -190,7 +186,6 @@ fn with_files(db: &mut dyn SourceDatabaseExt, fixture: &str) -> Option<FilePosit | |||
190 | meta.cfg, | 186 | meta.cfg, |
191 | meta.env, | 187 | meta.env, |
192 | Default::default(), | 188 | Default::default(), |
193 | Default::default(), | ||
194 | ); | 189 | ); |
195 | let prev = crates.insert(krate.clone(), crate_id); | 190 | let prev = crates.insert(krate.clone(), crate_id); |
196 | assert!(prev.is_none()); | 191 | assert!(prev.is_none()); |
@@ -212,9 +207,9 @@ fn with_files(db: &mut dyn SourceDatabaseExt, fixture: &str) -> Option<FilePosit | |||
212 | }; | 207 | }; |
213 | 208 | ||
214 | db.set_file_text(file_id, Arc::new(text)); | 209 | db.set_file_text(file_id, Arc::new(text)); |
215 | db.set_file_relative_path(file_id, meta.path.clone().into()); | ||
216 | db.set_file_source_root(file_id, source_root_id); | 210 | db.set_file_source_root(file_id, source_root_id); |
217 | source_root.insert_file(meta.path.into(), file_id); | 211 | let path = VfsPath::new_virtual_path(meta.path); |
212 | file_set.insert(file_id, path.into()); | ||
218 | 213 | ||
219 | file_id.0 += 1; | 214 | file_id.0 += 1; |
220 | } | 215 | } |
@@ -228,7 +223,6 @@ fn with_files(db: &mut dyn SourceDatabaseExt, fixture: &str) -> Option<FilePosit | |||
228 | CfgOptions::default(), | 223 | CfgOptions::default(), |
229 | Env::default(), | 224 | Env::default(), |
230 | Default::default(), | 225 | Default::default(), |
231 | Default::default(), | ||
232 | ); | 226 | ); |
233 | } else { | 227 | } else { |
234 | for (from, to) in crate_deps { | 228 | for (from, to) in crate_deps { |
@@ -238,7 +232,7 @@ fn with_files(db: &mut dyn SourceDatabaseExt, fixture: &str) -> Option<FilePosit | |||
238 | } | 232 | } |
239 | } | 233 | } |
240 | 234 | ||
241 | db.set_source_root(source_root_id, Arc::new(source_root)); | 235 | db.set_source_root(source_root_id, Arc::new(SourceRoot::new_local(file_set))); |
242 | db.set_crate_graph(Arc::new(crate_graph)); | 236 | db.set_crate_graph(Arc::new(crate_graph)); |
243 | 237 | ||
244 | file_position | 238 | file_position |