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.rs95
1 files changed, 53 insertions, 42 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..947a54f888 100644
--- a/crates/hir-def/src/macro_expansion_tests/mbe.rs
+++ b/crates/hir-def/src/macro_expansion_tests/mbe.rs
@@ -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() {}
@@ -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() {
+ ;
+}
+ "#]],
+ );
+}