]> git.lizzy.rs Git - rust.git/commitdiff
internal: add failing incremental test
authorAleksey Kladov <aleksey.kladov@gmail.com>
Tue, 4 May 2021 12:31:23 +0000 (15:31 +0300)
committerJonas Schievink <jonasschievink@gmail.com>
Thu, 6 May 2021 18:00:11 +0000 (20:00 +0200)
crates/hir_def/src/nameres/tests/incremental.rs

index 509e1bbbc085f2df58963a802be3e4a7cacb9a2b..747407ec7f46fd5d43c5f305d668bc3d610fd261 100644 (file)
@@ -105,3 +105,55 @@ fn f() {
         assert!(!format!("{:?}", events).contains("crate_def_map"), "{:#?}", events)
     }
 }
+
+#[test]
+fn typing_inside_a_function_doe_should_not_invalidate_expansions() {
+    let (mut db, pos) = TestDB::with_position(
+        r#"
+//- /lib.rs
+macro_rules! m {
+    ($ident:ident) => {
+        fn $ident() { };
+    }
+}
+mod foo;
+
+//- /foo/mod.rs
+pub mod bar;
+
+//- /foo/bar.rs
+m!(X);
+fn quux() { 1$0 }
+m!(Y);
+m!(Z);
+"#,
+    );
+    let krate = db.test_crate();
+    {
+        let events = db.log_executed(|| {
+            let crate_def_map = db.crate_def_map(krate);
+            let (_, module_data) = crate_def_map.modules.iter().last().unwrap();
+            assert_eq!(module_data.scope.resolutions().count(), 4);
+        });
+        let n_recalculated_item_trees = events.iter().filter(|it| it.contains("item_tree")).count();
+        assert_eq!(n_recalculated_item_trees, 6);
+    }
+
+    let new_text = r#"
+m!(X);
+fn quux() { 92 }
+m!(Y);
+m!(Z);
+"#;
+    db.set_file_text(pos.file_id, Arc::new(new_text.to_string()));
+
+    {
+        let events = db.log_executed(|| {
+            let crate_def_map = db.crate_def_map(krate);
+            let (_, module_data) = crate_def_map.modules.iter().last().unwrap();
+            assert_eq!(module_data.scope.resolutions().count(), 4);
+        });
+        let n_recalculated_item_trees = events.iter().filter(|it| it.contains("item_tree")).count();
+        assert_eq!(n_recalculated_item_trees, 1);
+    }
+}