3 use ra_db::SourceDatabaseExt;
7 fn check_def_map_is_not_recomputed(initial: &str, file_change: &str) {
8 let (mut db, pos) = TestDB::with_position(initial);
9 let krate = db.test_crate();
11 let events = db.log_executed(|| {
12 db.crate_def_map(krate);
14 assert!(format!("{:?}", events).contains("crate_def_map"), "{:#?}", events)
16 db.set_file_text(pos.file_id, Arc::new(file_change.to_string()));
19 let events = db.log_executed(|| {
20 db.crate_def_map(krate);
22 assert!(!format!("{:?}", events).contains("crate_def_map"), "{:#?}", events)
27 fn typing_inside_a_function_should_not_invalidate_def_map() {
28 check_def_map_is_not_recomputed(
33 use crate::foo::bar::Baz;
47 use crate::foo::bar::Baz;
49 fn foo() -> i32 { 92 }
55 fn adding_inner_items_should_not_invalidate_def_map() {
56 check_def_map_is_not_recomputed(
68 use crate::foo::bar::Baz;
76 struct S { a: i32, b: () }
87 use crate::foo::bar::Baz;
93 fn typing_inside_a_macro_should_not_invalidate_def_map() {
94 let (mut db, pos) = TestDB::with_position(
114 let krate = db.test_crate();
116 let events = db.log_executed(|| {
117 let crate_def_map = db.crate_def_map(krate);
118 let (_, module_data) = crate_def_map.modules.iter().last().unwrap();
119 assert_eq!(module_data.scope.collect_resolutions().len(), 1);
121 assert!(format!("{:?}", events).contains("crate_def_map"), "{:#?}", events)
123 db.set_file_text(pos.file_id, Arc::new("m!(Y);".to_string()));
126 let events = db.log_executed(|| {
127 let crate_def_map = db.crate_def_map(krate);
128 let (_, module_data) = crate_def_map.modules.iter().last().unwrap();
129 assert_eq!(module_data.scope.collect_resolutions().len(), 1);
131 assert!(!format!("{:?}", events).contains("crate_def_map"), "{:#?}", events)