diff options
Diffstat (limited to 'crates/ra_hir/src/nameres/tests')
-rw-r--r-- | crates/ra_hir/src/nameres/tests/incremental.rs | 46 |
1 files changed, 28 insertions, 18 deletions
diff --git a/crates/ra_hir/src/nameres/tests/incremental.rs b/crates/ra_hir/src/nameres/tests/incremental.rs index 698781923..001f76ac3 100644 --- a/crates/ra_hir/src/nameres/tests/incremental.rs +++ b/crates/ra_hir/src/nameres/tests/incremental.rs | |||
@@ -90,34 +90,44 @@ fn adding_inner_items_should_not_invalidate_def_map() { | |||
90 | ); | 90 | ); |
91 | } | 91 | } |
92 | 92 | ||
93 | // It would be awesome to make this work, but it's unclear how | ||
94 | #[test] | 93 | #[test] |
95 | #[ignore] | 94 | fn typing_inside_a_macro_should_not_invalidate_def_map() { |
96 | fn typing_inside_a_function_inside_a_macro_should_not_invalidate_def_map() { | 95 | let (mut db, pos) = MockDatabase::with_position( |
97 | check_def_map_is_not_recomputed( | ||
98 | " | 96 | " |
99 | //- /lib.rs | 97 | //- /lib.rs |
98 | macro_rules! m { | ||
99 | ($ident:ident) => { | ||
100 | fn f() { | ||
101 | $ident + $ident; | ||
102 | }; | ||
103 | } | ||
104 | } | ||
100 | mod foo; | 105 | mod foo; |
101 | 106 | ||
102 | use crate::foo::bar::Baz; | ||
103 | |||
104 | //- /foo/mod.rs | 107 | //- /foo/mod.rs |
105 | pub mod bar; | 108 | pub mod bar; |
106 | 109 | ||
107 | //- /foo/bar.rs | 110 | //- /foo/bar.rs |
108 | <|> | 111 | <|> |
109 | salsa::query_group! { | 112 | m!(X); |
110 | trait Baz { | ||
111 | fn foo() -> i32 { 1 + 1 } | ||
112 | } | ||
113 | } | ||
114 | ", | ||
115 | " | ||
116 | salsa::query_group! { | ||
117 | trait Baz { | ||
118 | fn foo() -> i32 { 92 } | ||
119 | } | ||
120 | } | ||
121 | ", | 113 | ", |
122 | ); | 114 | ); |
115 | { | ||
116 | let events = db.log_executed(|| { | ||
117 | let module = crate::source_binder::module_from_file_id(&db, pos.file_id).unwrap(); | ||
118 | let decls = module.declarations(&db); | ||
119 | assert_eq!(decls.len(), 1); | ||
120 | }); | ||
121 | assert!(format!("{:?}", events).contains("crate_def_map"), "{:#?}", events) | ||
122 | } | ||
123 | db.set_file_text(pos.file_id, Arc::new("m!(Y);".to_string())); | ||
124 | |||
125 | { | ||
126 | let events = db.log_executed(|| { | ||
127 | let module = crate::source_binder::module_from_file_id(&db, pos.file_id).unwrap(); | ||
128 | let decls = module.declarations(&db); | ||
129 | assert_eq!(decls.len(), 1); | ||
130 | }); | ||
131 | assert!(!format!("{:?}", events).contains("crate_def_map"), "{:#?}", events) | ||
132 | } | ||
123 | } | 133 | } |