Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/macro_expansion_tests/mbe.rs')
-rw-r--r--crates/hir-def/src/macro_expansion_tests/mbe.rs111
1 files changed, 61 insertions, 50 deletions
diff --git a/crates/hir-def/src/macro_expansion_tests/mbe.rs b/crates/hir-def/src/macro_expansion_tests/mbe.rs
index c489c1f7c1..7b5d0103e6 100644
--- a/crates/hir-def/src/macro_expansion_tests/mbe.rs
+++ b/crates/hir-def/src/macro_expansion_tests/mbe.rs
@@ -35,9 +35,9 @@ macro_rules! f {
};
}
-struct#0:MacroRules[BE8F, 0]@58..64#14336# MyTraitMap2#0:MacroCall[BE8F, 0]@31..42#ROOT2024# {#0:MacroRules[BE8F, 0]@72..73#14336#
- map#0:MacroRules[BE8F, 0]@86..89#14336#:#0:MacroRules[BE8F, 0]@89..90#14336# #0:MacroRules[BE8F, 0]@89..90#14336#::#0:MacroRules[BE8F, 0]@91..93#14336#std#0:MacroRules[BE8F, 0]@93..96#14336#::#0:MacroRules[BE8F, 0]@96..98#14336#collections#0:MacroRules[BE8F, 0]@98..109#14336#::#0:MacroRules[BE8F, 0]@109..111#14336#HashSet#0:MacroRules[BE8F, 0]@111..118#14336#<#0:MacroRules[BE8F, 0]@118..119#14336#(#0:MacroRules[BE8F, 0]@119..120#14336#)#0:MacroRules[BE8F, 0]@120..121#14336#>#0:MacroRules[BE8F, 0]@121..122#14336#,#0:MacroRules[BE8F, 0]@122..123#14336#
-}#0:MacroRules[BE8F, 0]@132..133#14336#
+struct#0:MacroRules[BE8F, 0]@58..64#17408# MyTraitMap2#0:MacroCall[BE8F, 0]@31..42#ROOT2024# {#0:MacroRules[BE8F, 0]@72..73#17408#
+ map#0:MacroRules[BE8F, 0]@86..89#17408#:#0:MacroRules[BE8F, 0]@89..90#17408# #0:MacroRules[BE8F, 0]@89..90#17408#::#0:MacroRules[BE8F, 0]@91..93#17408#std#0:MacroRules[BE8F, 0]@93..96#17408#::#0:MacroRules[BE8F, 0]@96..98#17408#collections#0:MacroRules[BE8F, 0]@98..109#17408#::#0:MacroRules[BE8F, 0]@109..111#17408#HashSet#0:MacroRules[BE8F, 0]@111..118#17408#<#0:MacroRules[BE8F, 0]@118..119#17408#(#0:MacroRules[BE8F, 0]@119..120#17408#)#0:MacroRules[BE8F, 0]@120..121#17408#>#0:MacroRules[BE8F, 0]@121..122#17408#,#0:MacroRules[BE8F, 0]@122..123#17408#
+}#0:MacroRules[BE8F, 0]@132..133#17408#
"#]],
);
}
@@ -197,7 +197,7 @@ macro_rules! mk_struct {
#[macro_use]
mod foo;
-struct#1:MacroRules[DB0C, 0]@59..65#14336# Foo#0:MacroCall[DB0C, 0]@32..35#ROOT2024#(#1:MacroRules[DB0C, 0]@70..71#14336#u32#0:MacroCall[DB0C, 0]@41..44#ROOT2024#)#1:MacroRules[DB0C, 0]@74..75#14336#;#1:MacroRules[DB0C, 0]@75..76#14336#
+struct#1:MacroRules[DB0C, 0]@59..65#17408# Foo#0:MacroCall[DB0C, 0]@32..35#ROOT2024#(#1:MacroRules[DB0C, 0]@70..71#17408#u32#0:MacroCall[DB0C, 0]@41..44#ROOT2024#)#1:MacroRules[DB0C, 0]@74..75#17408#;#1:MacroRules[DB0C, 0]@75..76#17408#
"#]],
);
}
@@ -300,21 +300,21 @@ fn match_by_first_token_literally() {
check(
r#"
macro_rules! m {
- ($i:ident) => ( mod $i {} );
+ ($i:ident) => ( enum $i {} );
(= $i:ident) => ( fn $i() {} );
(+ $i:ident) => ( struct $i; )
}
-m! { foo }
+m! { Foo }
m! { = bar }
m! { + Baz }
"#,
expect![[r#"
macro_rules! m {
- ($i:ident) => ( mod $i {} );
+ ($i:ident) => ( enum $i {} );
(= $i:ident) => ( fn $i() {} );
(+ $i:ident) => ( struct $i; )
}
-mod foo {}
+enum Foo {}
fn bar() {}
struct Baz;
"#]],
@@ -326,21 +326,21 @@ fn match_by_last_token_literally() {
check(
r#"
macro_rules! m {
- ($i:ident) => ( mod $i {} );
+ ($i:ident) => ( enum $i {} );
($i:ident =) => ( fn $i() {} );
($i:ident +) => ( struct $i; )
}
-m! { foo }
+m! { Foo }
m! { bar = }
m! { Baz + }
"#,
expect![[r#"
macro_rules! m {
- ($i:ident) => ( mod $i {} );
+ ($i:ident) => ( enum $i {} );
($i:ident =) => ( fn $i() {} );
($i:ident +) => ( struct $i; )
}
-mod foo {}
+enum Foo {}
fn bar() {}
struct Baz;
"#]],
@@ -352,21 +352,21 @@ fn match_by_ident() {
check(
r#"
macro_rules! m {
- ($i:ident) => ( mod $i {} );
+ ($i:ident) => ( enum $i {} );
(spam $i:ident) => ( fn $i() {} );
(eggs $i:ident) => ( struct $i; )
}
-m! { foo }
+m! { Foo }
m! { spam bar }
m! { eggs Baz }
"#,
expect![[r#"
macro_rules! m {
- ($i:ident) => ( mod $i {} );
+ ($i:ident) => ( enum $i {} );
(spam $i:ident) => ( fn $i() {} );
(eggs $i:ident) => ( struct $i; )
}
-mod foo {}
+enum Foo {}
fn bar() {}
struct Baz;
"#]],
@@ -378,12 +378,12 @@ fn match_by_separator_token() {
check(
r#"
macro_rules! m {
- ($($i:ident),*) => ($(mod $i {} )*);
+ ($($i:ident),*) => ($(enum $i {} )*);
($($i:ident)#*) => ($(fn $i() {} )*);
($i:ident ,# $ j:ident) => ( struct $i; struct $ j; )
}
-m! { foo, bar }
+m! { Baz, Qux }
m! { foo# bar }
@@ -391,13 +391,13 @@ m! { Foo,# Bar }
"#,
expect![[r#"
macro_rules! m {
- ($($i:ident),*) => ($(mod $i {} )*);
+ ($($i:ident),*) => ($(enum $i {} )*);
($($i:ident)#*) => ($(fn $i() {} )*);
($i:ident ,# $ j:ident) => ( struct $i; struct $ j; )
}
-mod foo {}
-mod bar {}
+enum Baz {}
+enum Qux {}
fn foo() {}
fn bar() {}
@@ -423,10 +423,10 @@ m! { foo, bar }
macro_rules! m {
($($i:ident),*) => ( impl Bar { $(fn $i() {})* } );
}
-impl#\14336# Bar#\14336# {#\14336#
- fn#\14336# foo#\ROOT2024#(#\14336#)#\14336# {#\14336#}#\14336#
- fn#\14336# bar#\ROOT2024#(#\14336#)#\14336# {#\14336#}#\14336#
-}#\14336#
+impl#\17408# Bar#\17408# {#\17408#
+ fn#\17408# foo#\ROOT2024#(#\17408#)#\17408# {#\17408#}#\17408#
+ fn#\17408# bar#\ROOT2024#(#\17408#)#\17408# {#\17408#}#\17408#
+}#\17408#
"#]],
);
}
@@ -1114,11 +1114,11 @@ fn test_single_item() {
check(
r#"
macro_rules! m { ($i:item) => ( $i ) }
-m! { mod c {} }
+m! { struct C {} }
"#,
expect![[r#"
macro_rules! m { ($i:item) => ( $i ) }
-mod c {}
+struct C {}
"#]],
)
}
@@ -1144,6 +1144,7 @@ m! {
type T = u8;
}
"#,
+ // The modules are counted twice, once because of the module and once because of the macro call.
expect![[r#"
macro_rules! m { ($($i:item)*) => ($($i )*) }
extern crate a;
@@ -1161,7 +1162,9 @@ trait J {}
fn h() {}
extern {}
type T = u8;
-"#]],
+
+mod b;
+mod c {}"#]],
);
}
@@ -1959,28 +1962,6 @@ fn f() {
}
#[test]
-fn test_edition_handling_in() {
- check(
- r#"
-//- /main.rs crate:main deps:old edition:2021
-fn f() {
- old::parse_try_old!(try!{});
-}
-//- /old.rs crate:old edition:2015
-#[macro_export]
-macro_rules! parse_try_old {
- ($it:expr) => {};
-}
- "#,
- expect![[r#"
-fn f() {
- ;
-}
-"#]],
- );
-}
-
-#[test]
fn semicolon_does_not_glue() {
check(
r#"
@@ -2051,3 +2032,33 @@ fn f() {
"#]],
);
}
+
+#[test]
+fn per_token_edition() {
+ check(
+ r#"
+//- /foo.rs crate:foo edition:2024
+#[macro_export]
+macro_rules! m {
+ ($e:expr) => {};
+}
+//- /bar.rs crate:bar deps:foo edition:2021
+fn gen() -> usize {
+ 0
+}
+
+fn foo() {
+ foo::m!(gen());
+}
+ "#,
+ expect![[r#"
+fn gen() -> usize {
+ 0
+}
+
+fn foo() {
+ ;
+}
+ "#]],
+ );
+}