From f10da9f50ac7d083b2f5b2bc8b84c777ed411973 Mon Sep 17 00:00:00 2001 From: Chayim Refael Friedman Date: Fri, 14 May 2021 00:44:58 +0300 Subject: [PATCH] Allow leading pipe in `matches!()` patterns. This is allowed in `match` statement, and stated in https://internals.rust-lang.org/t/leading-pipe-in-core-matches/14699/2 that it should be allowed in these macros too. --- library/core/src/macros/mod.rs | 6 +++--- library/core/tests/macros.rs | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/library/core/src/macros/mod.rs b/library/core/src/macros/mod.rs index 8ce441e80bfb7..d26699e26e35a 100644 --- a/library/core/src/macros/mod.rs +++ b/library/core/src/macros/mod.rs @@ -141,7 +141,7 @@ macro_rules! assert_ne { #[allow_internal_unstable(core_panic)] #[rustc_macro_transparency = "semitransparent"] pub macro assert_matches { - ($left:expr, $( $pattern:pat_param )|+ $( if $guard: expr )? $(,)?) => ({ + ($left:expr, $(|)? $( $pattern:pat_param )|+ $( if $guard: expr )? $(,)?) => ({ match $left { $( $pattern )|+ $( if $guard )? => {} ref left_val => { @@ -153,7 +153,7 @@ pub macro assert_matches { } } }), - ($left:expr, $( $pattern:pat_param )|+ $( if $guard: expr )?, $($arg:tt)+) => ({ + ($left:expr, $(|)? $( $pattern:pat_param )|+ $( if $guard: expr )?, $($arg:tt)+) => ({ match $left { $( $pattern )|+ $( if $guard )? => {} ref left_val => { @@ -321,7 +321,7 @@ pub macro debug_assert_matches($($arg:tt)*) { #[macro_export] #[stable(feature = "matches_macro", since = "1.42.0")] macro_rules! matches { - ($expression:expr, $( $pattern:pat_param )|+ $( if $guard: expr )? $(,)?) => { + ($expression:expr, $(|)? $( $pattern:pat_param )|+ $( if $guard: expr )? $(,)?) => { match $expression { $( $pattern )|+ $( if $guard )? => true, _ => false diff --git a/library/core/tests/macros.rs b/library/core/tests/macros.rs index 482f3c1c99840..ff3632e3550c2 100644 --- a/library/core/tests/macros.rs +++ b/library/core/tests/macros.rs @@ -12,3 +12,9 @@ fn assert_escape() { fn assert_ne_trailing_comma() { assert_ne!(1, 2,); } + +#[rustfmt::skip] +#[test] +fn matches_leading_pipe() { + matches!(1, | 1 | 2 | 3); +}