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.rs85
1 files changed, 85 insertions, 0 deletions
diff --git a/crates/hir-def/src/macro_expansion_tests/mbe.rs b/crates/hir-def/src/macro_expansion_tests/mbe.rs
index 965f329acb..c5c26e26bc 100644
--- a/crates/hir-def/src/macro_expansion_tests/mbe.rs
+++ b/crates/hir-def/src/macro_expansion_tests/mbe.rs
@@ -1449,6 +1449,7 @@ ok!();
#[test]
fn test_new_std_matches() {
check(
+ //- edition:2021
r#"
macro_rules! matches {
($expression:expr, $pattern:pat $(if $guard:expr)? $(,)?) => {
@@ -1481,6 +1482,90 @@ fn main() {
}
#[test]
+fn test_hygienic_pat() {
+ check(
+ r#"
+//- /new.rs crate:new deps:old edition:2015
+old::make!();
+fn main() {
+ matches!(0, 0 | 1 if true);
+}
+//- /old.rs crate:old edition:2021
+#[macro_export]
+macro_rules! make {
+ () => {
+ macro_rules! matches {
+ ($expression:expr, $pattern:pat if $guard:expr ) => {
+ match $expression {
+ $pattern if $guard => true,
+ _ => false
+ }
+ };
+ }
+ }
+}
+ "#,
+ expect![[r#"
+macro_rules !matches {
+ ($expression: expr, $pattern: pat if $guard: expr) = > {
+ match $expression {
+ $pattern if $guard = > true , _ = > false
+ }
+ }
+ ;
+}
+fn main() {
+ match 0 {
+ 0|1 if true =>true , _=>false
+ };
+}
+"#]],
+ );
+ check(
+ r#"
+//- /new.rs crate:new deps:old edition:2021
+old::make!();
+fn main() {
+ matches/*+errors*/!(0, 0 | 1 if true);
+}
+//- /old.rs crate:old edition:2015
+#[macro_export]
+macro_rules! make {
+ () => {
+ macro_rules! matches {
+ ($expression:expr, $pattern:pat if $guard:expr ) => {
+ match $expression {
+ $pattern if $guard => true,
+ _ => false
+ }
+ };
+ }
+ }
+}
+ "#,
+ expect![[r#"
+macro_rules !matches {
+ ($expression: expr, $pattern: pat if $guard: expr) = > {
+ match $expression {
+ $pattern if $guard = > true , _ = > false
+ }
+ }
+ ;
+}
+fn main() {
+ /* error: unexpected token in input *//* parse error: expected expression */
+/* parse error: expected FAT_ARROW */
+/* parse error: expected `,` */
+/* parse error: expected pattern */
+match 0 {
+ 0 if $guard=>true , _=>false
+ };
+}
+"#]],
+ );
+}
+
+#[test]
fn test_dollar_crate_lhs_is_not_meta() {
check(
r#"