@@ -106,3 +106,256 @@ fn baz() -> i32 {
106
106
assert_eq ! ( format!( "{events:?}" ) . matches( "infer_shim" ) . count( ) , 1 , "{events:#?}" )
107
107
}
108
108
}
109
+
110
+ #[ test]
111
+ fn adding_struct_invalidates_infer ( ) {
112
+ let ( mut db, pos) = TestDB :: with_position (
113
+ "
114
+ //- /lib.rs
115
+ fn foo() -> i32 {
116
+ 1 + 1
117
+ }
118
+
119
+ fn bar() -> f32 {
120
+ 2.0 * 3.0
121
+ }
122
+ $0" ,
123
+ ) ;
124
+ {
125
+ let events = db. log_executed ( || {
126
+ let module = db. module_for_file ( pos. file_id . file_id ( & db) ) ;
127
+ let _crate_def_map = module. def_map ( & db) ;
128
+ db. trait_impls_in_crate ( module. krate ( ) ) ;
129
+ } ) ;
130
+ assert ! ( format!( "{events:?}" ) . contains( "trait_impls_in_crate_shim" ) )
131
+ }
132
+
133
+ let new_text = "
134
+ fn foo() -> i32 {
135
+ 1 + 1
136
+ }
137
+
138
+ fn bar() -> f32 {
139
+ 2.0 * 3.0
140
+ }
141
+
142
+ pub struct NewStruct {
143
+ field: i32,
144
+ }
145
+ " ;
146
+
147
+ db. set_file_text ( pos. file_id . file_id ( & db) , new_text) ;
148
+
149
+ {
150
+ let actual = db. log_executed ( || {
151
+ let module = db. module_for_file ( pos. file_id . file_id ( & db) ) ;
152
+ let _crate_def_map = module. def_map ( & db) ;
153
+ db. trait_impls_in_crate ( module. krate ( ) ) ;
154
+ } ) ;
155
+
156
+ let expected = vec ! [
157
+ "parse_shim" . to_owned( ) ,
158
+ "ast_id_map_shim" . to_owned( ) ,
159
+ "file_item_tree_shim" . to_owned( ) ,
160
+ "real_span_map_shim" . to_owned( ) ,
161
+ "crate_local_def_map" . to_owned( ) ,
162
+ "trait_impls_in_crate_shim" . to_owned( ) ,
163
+ ] ;
164
+
165
+ assert_eq ! ( expected, actual) ;
166
+ }
167
+ }
168
+
169
+ #[ test]
170
+ fn adding_enum_query_log ( ) {
171
+ let ( mut db, pos) = TestDB :: with_position (
172
+ "
173
+ //- /lib.rs
174
+ fn foo() -> i32 {
175
+ 1 + 1
176
+ }
177
+
178
+ fn bar() -> f32 {
179
+ 2.0 * 3.0
180
+ }
181
+ $0" ,
182
+ ) ;
183
+ {
184
+ let events = db. log_executed ( || {
185
+ let module = db. module_for_file ( pos. file_id . file_id ( & db) ) ;
186
+ let _crate_def_map = module. def_map ( & db) ;
187
+ db. trait_impls_in_crate ( module. krate ( ) ) ;
188
+ } ) ;
189
+ assert ! ( format!( "{events:?}" ) . contains( "trait_impls_in_crate_shim" ) )
190
+ }
191
+
192
+ let new_text = "
193
+ fn foo() -> i32 {
194
+ 1 + 1
195
+ }
196
+
197
+ fn bar() -> f32 {
198
+ 2.0 * 3.0
199
+ }
200
+
201
+ pub enum SomeEnum {
202
+ A,
203
+ B
204
+ }
205
+ " ;
206
+
207
+ db. set_file_text ( pos. file_id . file_id ( & db) , new_text) ;
208
+
209
+ {
210
+ let actual = db. log_executed ( || {
211
+ let module = db. module_for_file ( pos. file_id . file_id ( & db) ) ;
212
+ let _crate_def_map = module. def_map ( & db) ;
213
+ db. trait_impls_in_crate ( module. krate ( ) ) ;
214
+ } ) ;
215
+
216
+ let expected = vec ! [
217
+ "parse_shim" . to_owned( ) ,
218
+ "ast_id_map_shim" . to_owned( ) ,
219
+ "file_item_tree_shim" . to_owned( ) ,
220
+ "real_span_map_shim" . to_owned( ) ,
221
+ "crate_local_def_map" . to_owned( ) ,
222
+ "trait_impls_in_crate_shim" . to_owned( ) ,
223
+ ] ;
224
+
225
+ assert_eq ! ( expected, actual) ;
226
+ }
227
+ }
228
+
229
+ #[ test]
230
+ fn adding_use_query_log ( ) {
231
+ let ( mut db, pos) = TestDB :: with_position (
232
+ "
233
+ //- /lib.rs
234
+ fn foo() -> i32 {
235
+ 1 + 1
236
+ }
237
+
238
+ fn bar() -> f32 {
239
+ 2.0 * 3.0
240
+ }
241
+ $0" ,
242
+ ) ;
243
+ {
244
+ let events = db. log_executed ( || {
245
+ let module = db. module_for_file ( pos. file_id . file_id ( & db) ) ;
246
+ let _crate_def_map = module. def_map ( & db) ;
247
+ db. trait_impls_in_crate ( module. krate ( ) ) ;
248
+ } ) ;
249
+ assert ! ( format!( "{events:?}" ) . contains( "trait_impls_in_crate_shim" ) )
250
+ }
251
+
252
+ let new_text = "
253
+ use std::collections::HashMap;
254
+
255
+ fn foo() -> i32 {
256
+ 1 + 1
257
+ }
258
+
259
+ fn bar() -> f32 {
260
+ 2.0 * 3.0
261
+ }
262
+ " ;
263
+
264
+ db. set_file_text ( pos. file_id . file_id ( & db) , new_text) ;
265
+
266
+ {
267
+ let actual = db. log_executed ( || {
268
+ let module = db. module_for_file ( pos. file_id . file_id ( & db) ) ;
269
+ let _crate_def_map = module. def_map ( & db) ;
270
+ db. trait_impls_in_crate ( module. krate ( ) ) ;
271
+ } ) ;
272
+
273
+ let expected = vec ! [
274
+ "parse_shim" . to_owned( ) ,
275
+ "ast_id_map_shim" . to_owned( ) ,
276
+ "file_item_tree_shim" . to_owned( ) ,
277
+ "real_span_map_shim" . to_owned( ) ,
278
+ "crate_local_def_map" . to_owned( ) ,
279
+ "trait_impls_in_crate_shim" . to_owned( ) ,
280
+ ] ;
281
+
282
+ assert_eq ! ( expected, actual) ;
283
+ }
284
+ }
285
+
286
+ #[ test]
287
+ fn adding_impl_query_log ( ) {
288
+ let ( mut db, pos) = TestDB :: with_position (
289
+ "
290
+ //- /lib.rs
291
+ fn foo() -> i32 {
292
+ 1 + 1
293
+ }
294
+
295
+ fn bar() -> f32 {
296
+ 2.0 * 3.0
297
+ }
298
+
299
+ pub struct SomeStruct {
300
+ field: i32,
301
+ }
302
+ $0" ,
303
+ ) ;
304
+ {
305
+ let events = db. log_executed ( || {
306
+ let module = db. module_for_file ( pos. file_id . file_id ( & db) ) ;
307
+ let _crate_def_map = module. def_map ( & db) ;
308
+ db. trait_impls_in_crate ( module. krate ( ) ) ;
309
+ } ) ;
310
+ assert ! ( format!( "{events:?}" ) . contains( "trait_impls_in_crate_shim" ) )
311
+ }
312
+
313
+ let new_text = "
314
+ fn foo() -> i32 {
315
+ 1 + 1
316
+ }
317
+
318
+ fn bar() -> f32 {
319
+ 2.0 * 3.0
320
+ }
321
+
322
+ pub struct SomeStruct {
323
+ field: i32,
324
+ }
325
+
326
+ impl SomeStruct {
327
+ pub fn new(value: i32) -> Self {
328
+ Self { field: value }
329
+ }
330
+ }
331
+ " ;
332
+
333
+ db. set_file_text ( pos. file_id . file_id ( & db) , new_text) ;
334
+
335
+ {
336
+ let actual = db. log_executed ( || {
337
+ let module = db. module_for_file ( pos. file_id . file_id ( & db) ) ;
338
+ let _crate_def_map = module. def_map ( & db) ;
339
+ db. trait_impls_in_crate ( module. krate ( ) ) ;
340
+ } ) ;
341
+
342
+ let expected = vec ! [
343
+ "parse_shim" . to_owned( ) ,
344
+ "ast_id_map_shim" . to_owned( ) ,
345
+ "file_item_tree_shim" . to_owned( ) ,
346
+ "real_span_map_shim" . to_owned( ) ,
347
+ "crate_local_def_map" . to_owned( ) ,
348
+ "trait_impls_in_crate_shim" . to_owned( ) ,
349
+ "attrs_shim" . to_owned( ) ,
350
+ "impl_trait_with_diagnostics_shim" . to_owned( ) ,
351
+ "impl_signature_shim" . to_owned( ) ,
352
+ "impl_signature_with_source_map_shim" . to_owned( ) ,
353
+ "impl_self_ty_with_diagnostics_shim" . to_owned( ) ,
354
+ "struct_signature_shim" . to_owned( ) ,
355
+ "struct_signature_with_source_map_shim" . to_owned( ) ,
356
+ "type_for_adt_tracked" . to_owned( ) ,
357
+ ] ;
358
+
359
+ assert_eq ! ( expected, actual) ;
360
+ }
361
+ }
0 commit comments