aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/nameres
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/nameres')
-rw-r--r--crates/ra_hir/src/nameres/tests.rs134
1 files changed, 75 insertions, 59 deletions
diff --git a/crates/ra_hir/src/nameres/tests.rs b/crates/ra_hir/src/nameres/tests.rs
index c511c40b2..17de54b44 100644
--- a/crates/ra_hir/src/nameres/tests.rs
+++ b/crates/ra_hir/src/nameres/tests.rs
@@ -322,27 +322,8 @@ fn reexport_across_crates() {
322 ); 322 );
323} 323}
324 324
325#[test] 325fn check_item_map_is_not_recomputed(initial: &str, file_change: &str) {
326fn typing_inside_a_function_should_not_invalidate_item_map() { 326 let (mut db, pos) = MockDatabase::with_position(initial);
327 let (mut db, pos) = MockDatabase::with_position(
328 "
329 //- /lib.rs
330 mod foo;
331
332 use crate::foo::bar::Baz;
333
334 //- /foo/mod.rs
335 pub mod bar;
336
337 //- /foo/bar.rs
338 <|>
339 salsa::query_group! {
340 trait Baz {
341 fn foo() -> i32 { 1 + 1 }
342 }
343 }
344 ",
345 );
346 let source_root = db.file_source_root(pos.file_id); 327 let source_root = db.file_source_root(pos.file_id);
347 { 328 {
348 let events = db.log_executed(|| { 329 let events = db.log_executed(|| {
@@ -350,18 +331,8 @@ fn typing_inside_a_function_should_not_invalidate_item_map() {
350 }); 331 });
351 assert!(format!("{:?}", events).contains("item_map")) 332 assert!(format!("{:?}", events).contains("item_map"))
352 } 333 }
353
354 let new_text = "
355 salsa::query_group! {
356 trait Baz {
357 fn foo() -> i32 { 92 }
358 }
359 }
360 "
361 .to_string();
362
363 db.query_mut(ra_db::FileTextQuery) 334 db.query_mut(ra_db::FileTextQuery)
364 .set(pos.file_id, Arc::new(new_text)); 335 .set(pos.file_id, Arc::new(file_change.to_string()));
365 336
366 { 337 {
367 let events = db.log_executed(|| { 338 let events = db.log_executed(|| {
@@ -376,8 +347,8 @@ fn typing_inside_a_function_should_not_invalidate_item_map() {
376} 347}
377 348
378#[test] 349#[test]
379fn typing_inside_a_function_inside_a_macro_should_not_invalidate_item_map() { 350fn typing_inside_a_function_should_not_invalidate_item_map() {
380 let (mut db, pos) = MockDatabase::with_position( 351 check_item_map_is_not_recomputed(
381 " 352 "
382 //- /lib.rs 353 //- /lib.rs
383 mod foo;<|> 354 mod foo;<|>
@@ -392,36 +363,81 @@ fn typing_inside_a_function_inside_a_macro_should_not_invalidate_item_map() {
392 363
393 //- /foo/bar.rs 364 //- /foo/bar.rs
394 pub struct Baz; 365 pub struct Baz;
395 ", 366 ",
396 ); 367 "
397 let source_root = db.file_source_root(pos.file_id);
398 {
399 let events = db.log_executed(|| {
400 db.item_map(source_root).unwrap();
401 });
402 assert!(format!("{:?}", events).contains("item_map"))
403 }
404
405 let new_text = "
406 mod foo; 368 mod foo;
407 369
408 use crate::foo::bar::Baz; 370 use crate::foo::bar::Baz;
409 371
410 fn foo() -> i32 { 92 } 372 fn foo() -> i32 { 92 }
411 " 373 ",
412 .to_string(); 374 );
375}
413 376
414 db.query_mut(ra_db::FileTextQuery) 377#[test]
415 .set(pos.file_id, Arc::new(new_text)); 378fn adding_inner_items_should_not_invalidate_item_map() {
379 check_item_map_is_not_recomputed(
380 "
381 //- /lib.rs
382 struct S { a: i32}
383 enum E { A }
384 trait T {
385 fn a() {}
386 }
387 mod foo;<|>
388 impl S {
389 fn a() {}
390 }
391 use crate::foo::bar::Baz;
392 //- /foo/mod.rs
393 pub mod bar;
416 394
417 { 395 //- /foo/bar.rs
418 let events = db.log_executed(|| { 396 pub struct Baz;
419 db.item_map(source_root).unwrap(); 397 ",
420 }); 398 "
421 assert!( 399 struct S { a: i32, b: () }
422 !format!("{:?}", events).contains("item_map"), 400 enum E { A, B }
423 "{:#?}", 401 trait T {
424 events 402 fn a() {}
425 ) 403 fn b() {}
426 } 404 }
405 mod foo;<|>
406 impl S {
407 fn a() {}
408 fn b() {}
409 }
410 use crate::foo::bar::Baz;
411 ",
412 );
413}
414
415#[test]
416fn typing_inside_a_function_inside_a_macro_should_not_invalidate_item_map() {
417 check_item_map_is_not_recomputed(
418 "
419 //- /lib.rs
420 mod foo;
421
422 use crate::foo::bar::Baz;
423
424 //- /foo/mod.rs
425 pub mod bar;
426
427 //- /foo/bar.rs
428 <|>
429 salsa::query_group! {
430 trait Baz {
431 fn foo() -> i32 { 1 + 1 }
432 }
433 }
434 ",
435 "
436 salsa::query_group! {
437 trait Baz {
438 fn foo() -> i32 { 92 }
439 }
440 }
441 ",
442 );
427} 443}