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.
This commit is contained in:
Chayim Refael Friedman 2021-05-14 00:44:58 +03:00
parent 0a6c636c40
commit f10da9f50a
2 changed files with 9 additions and 3 deletions

View file

@ -141,7 +141,7 @@ macro_rules! assert_ne {
#[allow_internal_unstable(core_panic)] #[allow_internal_unstable(core_panic)]
#[rustc_macro_transparency = "semitransparent"] #[rustc_macro_transparency = "semitransparent"]
pub macro assert_matches { pub macro assert_matches {
($left:expr, $( $pattern:pat_param )|+ $( if $guard: expr )? $(,)?) => ({ ($left:expr, $(|)? $( $pattern:pat_param )|+ $( if $guard: expr )? $(,)?) => ({
match $left { match $left {
$( $pattern )|+ $( if $guard )? => {} $( $pattern )|+ $( if $guard )? => {}
ref left_val => { 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 { match $left {
$( $pattern )|+ $( if $guard )? => {} $( $pattern )|+ $( if $guard )? => {}
ref left_val => { ref left_val => {
@ -321,7 +321,7 @@ pub macro debug_assert_matches($($arg:tt)*) {
#[macro_export] #[macro_export]
#[stable(feature = "matches_macro", since = "1.42.0")] #[stable(feature = "matches_macro", since = "1.42.0")]
macro_rules! matches { macro_rules! matches {
($expression:expr, $( $pattern:pat_param )|+ $( if $guard: expr )? $(,)?) => { ($expression:expr, $(|)? $( $pattern:pat_param )|+ $( if $guard: expr )? $(,)?) => {
match $expression { match $expression {
$( $pattern )|+ $( if $guard )? => true, $( $pattern )|+ $( if $guard )? => true,
_ => false _ => false

View file

@ -12,3 +12,9 @@ fn assert_escape() {
fn assert_ne_trailing_comma() { fn assert_ne_trailing_comma() {
assert_ne!(1, 2,); assert_ne!(1, 2,);
} }
#[rustfmt::skip]
#[test]
fn matches_leading_pipe() {
matches!(1, | 1 | 2 | 3);
}