]> git.lizzy.rs Git - rust.git/commitdiff
Add new_source_root meta to test fixtures
authorLukas Wirth <lukastw97@gmail.com>
Tue, 16 Mar 2021 14:28:02 +0000 (15:28 +0100)
committerLukas Wirth <lukastw97@gmail.com>
Tue, 16 Mar 2021 14:28:02 +0000 (15:28 +0100)
crates/base_db/src/fixture.rs
crates/ide/src/references.rs
crates/test_utils/src/fixture.rs

index 5c9824814e89dbfc4d9b47950b16ef7a34ae438c..cad6866aa3bacad6232e4cef965647beca4a10b2 100644 (file)
@@ -57,7 +57,7 @@
 //! fn insert_source_code_here() {}
 //! "
 //! ```
-use std::{str::FromStr, sync::Arc};
+use std::{mem, str::FromStr, sync::Arc};
 
 use cfg::CfgOptions;
 use rustc_hash::FxHashMap;
@@ -148,6 +148,7 @@ pub fn parse(ra_fixture: &str) -> ChangeFixture {
         let mut file_set = FileSet::default();
         let source_root_prefix = "/".to_string();
         let mut file_id = FileId(0);
+        let mut roots = Vec::new();
 
         let mut file_position = None;
 
@@ -168,6 +169,10 @@ pub fn parse(ra_fixture: &str) -> ChangeFixture {
             let meta = FileMeta::from(entry);
             assert!(meta.path.starts_with(&source_root_prefix));
 
+            if meta.introduce_new_source_root {
+                roots.push(SourceRoot::new_local(mem::take(&mut file_set)));
+            }
+
             if let Some(krate) = meta.krate {
                 let crate_name = CrateName::normalize_dashes(&krate);
                 let crate_id = crate_graph.add_crate_root(
@@ -215,7 +220,8 @@ pub fn parse(ra_fixture: &str) -> ChangeFixture {
             }
         }
 
-        change.set_roots(vec![SourceRoot::new_local(file_set)]);
+        roots.push(SourceRoot::new_local(mem::take(&mut file_set)));
+        change.set_roots(roots);
         change.set_crate_graph(crate_graph);
 
         ChangeFixture { file_position, files, change }
@@ -229,6 +235,7 @@ struct FileMeta {
     cfg: CfgOptions,
     edition: Edition,
     env: Env,
+    introduce_new_source_root: bool,
 }
 
 impl From<Fixture> for FileMeta {
@@ -247,6 +254,7 @@ fn from(f: Fixture) -> FileMeta {
                 .as_ref()
                 .map_or(Edition::Edition2018, |v| Edition::from_str(&v).unwrap()),
             env: f.env.into_iter().collect(),
+            introduce_new_source_root: f.introduce_new_source_root,
         }
     }
 }
index fc85cd0ce92115b7e3408da36b0efa65c3563156..e10a3ccf79e7810a68358736bc2a8a66a2e2f479 100644 (file)
@@ -1275,13 +1275,13 @@ fn foo(_: bool) -> bo$0ol { true }
     fn test_transitive() {
         check(
             r#"
-//- /level3/level3.rs crate:level3
+//- /level3.rs new_source_root: crate:level3
 pub struct Fo$0o;
-//- /level2/level2.rs crate:level2 deps:level3
+//- /level2.rs new_source_root: crate:level2 deps:level3
 pub use level3::Foo;
-//- /level1/level1.rs crate:level1 deps:level2
+//- /level1.rs new_source_root: crate:level1 deps:level2
 pub use level2::Foo;
-//- /level0/level0.rs crate:level0 deps:level1
+//- /level0.rs new_source_root: crate:level0 deps:level1
 pub use level1::Foo;
 "#,
             expect![[r#"
index e3f57f3b2ac68d7c1e0c26794ce773588319fd56..6bc824e9437b93dc099593ff20f29523e6965c02 100644 (file)
@@ -14,6 +14,7 @@ pub struct Fixture {
     pub cfg_key_values: Vec<(String, String)>,
     pub edition: Option<String>,
     pub env: FxHashMap<String, String>,
+    pub introduce_new_source_root: bool,
 }
 
 impl Fixture {
@@ -70,6 +71,7 @@ fn parse_meta_line(meta: &str) -> Fixture {
         let mut cfg_atoms = Vec::new();
         let mut cfg_key_values = Vec::new();
         let mut env = FxHashMap::default();
+        let mut introduce_new_source_root = false;
         for component in components[1..].iter() {
             let (key, value) = split_once(component, ':').unwrap();
             match key {
@@ -91,11 +93,22 @@ fn parse_meta_line(meta: &str) -> Fixture {
                         }
                     }
                 }
+                "new_source_root" => introduce_new_source_root = true,
                 _ => panic!("bad component: {:?}", component),
             }
         }
 
-        Fixture { path, text: String::new(), krate, deps, cfg_atoms, cfg_key_values, edition, env }
+        Fixture {
+            path,
+            text: String::new(),
+            krate,
+            deps,
+            cfg_atoms,
+            cfg_key_values,
+            edition,
+            env,
+            introduce_new_source_root,
+        }
     }
 }