Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/tests/simple.rs')
-rw-r--r--crates/hir-ty/src/tests/simple.rs86
1 files changed, 84 insertions, 2 deletions
diff --git a/crates/hir-ty/src/tests/simple.rs b/crates/hir-ty/src/tests/simple.rs
index a8170b6060..5f0f341f39 100644
--- a/crates/hir-ty/src/tests/simple.rs
+++ b/crates/hir-ty/src/tests/simple.rs
@@ -3418,11 +3418,11 @@ struct TS(usize);
fn main() {
let x;
[x,] = &[1,];
- //^^^^expected &'? [i32; 1], got [{unknown}; _]
+ //^^^^expected &'? [i32; 1], got [{unknown}]
let x;
[(x,),] = &[(1,),];
- //^^^^^^^expected &'? [(i32,); 1], got [{unknown}; _]
+ //^^^^^^^expected &'? [(i32,); 1], got [{unknown}]
let x;
((x,),) = &((1,),);
@@ -3720,3 +3720,85 @@ fn test() -> bool {
"#]],
);
}
+
+#[test]
+fn macro_semitransparent_hygiene() {
+ check_types(
+ r#"
+macro_rules! m {
+ () => { let bar: i32; };
+}
+fn foo() {
+ let bar: bool;
+ m!();
+ bar;
+ // ^^^ bool
+}
+ "#,
+ );
+}
+
+#[test]
+fn macro_expansion_can_refer_variables_defined_before_macro_definition() {
+ check_types(
+ r#"
+fn foo() {
+ let v: i32 = 0;
+ macro_rules! m {
+ () => { v };
+ }
+ let v: bool = true;
+ m!();
+ // ^^^^ i32
+}
+ "#,
+ );
+}
+
+#[test]
+fn macro_rules_shadowing_works_with_hygiene() {
+ check_types(
+ r#"
+fn foo() {
+ let v: bool;
+ macro_rules! m { () => { v } }
+ m!();
+ // ^^^^ bool
+
+ let v: char;
+ macro_rules! m { () => { v } }
+ m!();
+ // ^^^^ char
+
+ {
+ let v: u8;
+ macro_rules! m { () => { v } }
+ m!();
+ // ^^^^ u8
+
+ let v: i8;
+ macro_rules! m { () => { v } }
+ m!();
+ // ^^^^ i8
+
+ let v: i16;
+ macro_rules! m { () => { v } }
+ m!();
+ // ^^^^ i16
+
+ {
+ let v: u32;
+ macro_rules! m { () => { v } }
+ m!();
+ // ^^^^ u32
+
+ let v: u64;
+ macro_rules! m { () => { v } }
+ m!();
+ // ^^^^ u64
+ }
+ }
+}
+ "#,
+ );
+}