diff options
Diffstat (limited to 'crates/base_db')
-rw-r--r-- | crates/base_db/src/fixture.rs | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/crates/base_db/src/fixture.rs b/crates/base_db/src/fixture.rs index 5c9824814..cad6866aa 100644 --- a/crates/base_db/src/fixture.rs +++ b/crates/base_db/src/fixture.rs | |||
@@ -57,7 +57,7 @@ | |||
57 | //! fn insert_source_code_here() {} | 57 | //! fn insert_source_code_here() {} |
58 | //! " | 58 | //! " |
59 | //! ``` | 59 | //! ``` |
60 | use std::{str::FromStr, sync::Arc}; | 60 | use std::{mem, str::FromStr, sync::Arc}; |
61 | 61 | ||
62 | use cfg::CfgOptions; | 62 | use cfg::CfgOptions; |
63 | use rustc_hash::FxHashMap; | 63 | use rustc_hash::FxHashMap; |
@@ -148,6 +148,7 @@ impl ChangeFixture { | |||
148 | let mut file_set = FileSet::default(); | 148 | let mut file_set = FileSet::default(); |
149 | let source_root_prefix = "/".to_string(); | 149 | let source_root_prefix = "/".to_string(); |
150 | let mut file_id = FileId(0); | 150 | let mut file_id = FileId(0); |
151 | let mut roots = Vec::new(); | ||
151 | 152 | ||
152 | let mut file_position = None; | 153 | let mut file_position = None; |
153 | 154 | ||
@@ -168,6 +169,10 @@ impl ChangeFixture { | |||
168 | let meta = FileMeta::from(entry); | 169 | let meta = FileMeta::from(entry); |
169 | assert!(meta.path.starts_with(&source_root_prefix)); | 170 | assert!(meta.path.starts_with(&source_root_prefix)); |
170 | 171 | ||
172 | if meta.introduce_new_source_root { | ||
173 | roots.push(SourceRoot::new_local(mem::take(&mut file_set))); | ||
174 | } | ||
175 | |||
171 | if let Some(krate) = meta.krate { | 176 | if let Some(krate) = meta.krate { |
172 | let crate_name = CrateName::normalize_dashes(&krate); | 177 | let crate_name = CrateName::normalize_dashes(&krate); |
173 | let crate_id = crate_graph.add_crate_root( | 178 | let crate_id = crate_graph.add_crate_root( |
@@ -215,7 +220,8 @@ impl ChangeFixture { | |||
215 | } | 220 | } |
216 | } | 221 | } |
217 | 222 | ||
218 | change.set_roots(vec![SourceRoot::new_local(file_set)]); | 223 | roots.push(SourceRoot::new_local(mem::take(&mut file_set))); |
224 | change.set_roots(roots); | ||
219 | change.set_crate_graph(crate_graph); | 225 | change.set_crate_graph(crate_graph); |
220 | 226 | ||
221 | ChangeFixture { file_position, files, change } | 227 | ChangeFixture { file_position, files, change } |
@@ -229,6 +235,7 @@ struct FileMeta { | |||
229 | cfg: CfgOptions, | 235 | cfg: CfgOptions, |
230 | edition: Edition, | 236 | edition: Edition, |
231 | env: Env, | 237 | env: Env, |
238 | introduce_new_source_root: bool, | ||
232 | } | 239 | } |
233 | 240 | ||
234 | impl From<Fixture> for FileMeta { | 241 | impl From<Fixture> for FileMeta { |
@@ -247,6 +254,7 @@ impl From<Fixture> for FileMeta { | |||
247 | .as_ref() | 254 | .as_ref() |
248 | .map_or(Edition::Edition2018, |v| Edition::from_str(&v).unwrap()), | 255 | .map_or(Edition::Edition2018, |v| Edition::from_str(&v).unwrap()), |
249 | env: f.env.into_iter().collect(), | 256 | env: f.env.into_iter().collect(), |
257 | introduce_new_source_root: f.introduce_new_source_root, | ||
250 | } | 258 | } |
251 | } | 259 | } |
252 | } | 260 | } |