Skip to content

Commit

Permalink
Rollup merge of rust-lang#108542 - bwmf2:expanded, r=wesleywiser
Browse files Browse the repository at this point in the history
Force parentheses around `match` expression in binary expression

This attempts to solve rust-lang#98790.
  • Loading branch information
matthiaskrgr authored Mar 10, 2023
2 parents 0f10b50 + 219195f commit 535305a
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 1 deletion.
4 changes: 4 additions & 0 deletions compiler/rustc_ast_pretty/src/pprust/state/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,10 @@ impl<'a> State<'a> {
(&ast::ExprKind::Let { .. }, _) if !parser::needs_par_as_let_scrutinee(prec) => {
parser::PREC_FORCE_PAREN
}
// For a binary expression like `(match () { _ => a }) OP b`, the parens are required
// otherwise the parser would interpret `match () { _ => a }` as a statement,
// with the remaining `OP b` not making sense. So we force parens.
(&ast::ExprKind::Match(..), _) => parser::PREC_FORCE_PAREN,
_ => left_prec,
};

Expand Down
24 changes: 24 additions & 0 deletions tests/ui/macros/issue-98790.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// run-pass

macro_rules! stringify_item {
($item:item) => {
stringify!($item)
};
}

macro_rules! repro {
($expr:expr) => {
stringify_item! {
pub fn repro() -> bool {
$expr
}
}
};
}

fn main() {
assert_eq!(
repro!(match () { () => true } | true),
"pub fn repro() -> bool { (match () { () => true, }) | true }"
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ fn main() {
// mac call

// match
[ match elem { _ => elem } == 3 ] => "Assertion failed: match elem { _ => elem, } == 3"
[ match elem { _ => elem } == 3 ] => "Assertion failed: (match elem { _ => elem, }) == 3"

// ret
[ (|| { return elem; })() == 3 ] => "Assertion failed: (|| { return elem; })() == 3"
Expand Down

0 comments on commit 535305a

Please sign in to comment.