diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2020-05-18 12:03:44 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2020-05-18 12:03:44 +0100 |
commit | 9bdedbbcaf0c2142f004739d2edf91858ad91a10 (patch) | |
tree | 110a821daeff1ff986baa2b9828f9dc847daceb8 /crates/ra_hir_ty | |
parent | ad03e4de185f0f19ae75a8a9c4095ee1b0d82a47 (diff) | |
parent | 12a3bf3c31d4c9a6d9ee110db174604f688ca0f0 (diff) |
Merge #4497
4497: Create LowerCtx on the fly r=matklad a=edwin0cheng
Previously we create `LowerCtx` at the beginning of lowering, however, the hygiene content is in fact changing between macro expression expanding.
This PR change it to create the `LowerCtx` on the fly to fix above bug.
However, #4465 is not fixed by this PR, the goto-def is still not work yet. It only fixed the infer part.
Co-authored-by: Edwin Cheng <[email protected]>
Diffstat (limited to 'crates/ra_hir_ty')
-rw-r--r-- | crates/ra_hir_ty/src/tests/regression.rs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/crates/ra_hir_ty/src/tests/regression.rs b/crates/ra_hir_ty/src/tests/regression.rs index 115ad8328..c2168222e 100644 --- a/crates/ra_hir_ty/src/tests/regression.rs +++ b/crates/ra_hir_ty/src/tests/regression.rs | |||
@@ -564,6 +564,37 @@ fn main() { | |||
564 | } | 564 | } |
565 | 565 | ||
566 | #[test] | 566 | #[test] |
567 | fn issue_4465_dollar_crate_at_type() { | ||
568 | assert_snapshot!( | ||
569 | infer(r#" | ||
570 | pub struct Foo {} | ||
571 | pub fn anything<T>() -> T { | ||
572 | loop {} | ||
573 | } | ||
574 | macro_rules! foo { | ||
575 | () => {{ | ||
576 | let r: $crate::Foo = anything(); | ||
577 | r | ||
578 | }}; | ||
579 | } | ||
580 | fn main() { | ||
581 | let _a = foo!(); | ||
582 | } | ||
583 | "#), @r###" | ||
584 | 45..60 '{ loop {} }': T | ||
585 | 51..58 'loop {}': ! | ||
586 | 56..58 '{}': () | ||
587 | !0..31 '{letr:...g();r}': Foo | ||
588 | !4..5 'r': Foo | ||
589 | !18..26 'anything': fn anything<Foo>() -> Foo | ||
590 | !18..28 'anything()': Foo | ||
591 | !29..30 'r': Foo | ||
592 | 164..188 '{ ...!(); }': () | ||
593 | 174..176 '_a': Foo | ||
594 | "###); | ||
595 | } | ||
596 | |||
597 | #[test] | ||
567 | fn issue_4053_diesel_where_clauses() { | 598 | fn issue_4053_diesel_where_clauses() { |
568 | assert_snapshot!( | 599 | assert_snapshot!( |
569 | infer(r#" | 600 | infer(r#" |