diff options
author | bors[bot] <bors[bot]@users.noreply.github.com> | 2019-01-08 22:59:42 +0000 |
---|---|---|
committer | bors[bot] <bors[bot]@users.noreply.github.com> | 2019-01-08 22:59:42 +0000 |
commit | c0f48f9eb091b5054acb98575c69c67a0aeefb7b (patch) | |
tree | 31af7c72f0d9dd99232aaf93a5785ad09a9336ec /crates/ra_hir/src/nameres | |
parent | 46f74e33ca53a7897e9020d3de75cc76a6b89d79 (diff) | |
parent | d18d8399f5b601bd870f2aa3b5173b77b33f6073 (diff) |
Merge #472
472: Stupidly simple idea to make DefIds more stable r=matklad a=matklad
Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates/ra_hir/src/nameres')
-rw-r--r-- | crates/ra_hir/src/nameres/tests.rs | 134 |
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] | 325 | fn check_item_map_is_not_recomputed(initial: &str, file_change: &str) { |
326 | fn 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] |
379 | fn typing_inside_a_function_inside_a_macro_should_not_invalidate_item_map() { | 350 | fn 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)); | 378 | fn 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] | ||
416 | fn 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 | } |