Skip to content

Commit e4dfadc

Browse files
authored
Merge pull request #1834 from dtolnay/rightofassign
Right side of assignment can never require synthetic paren
2 parents 533caa2 + ea9f750 commit e4dfadc

File tree

2 files changed

+16
-19
lines changed

2 files changed

+16
-19
lines changed

src/expr.rs

+14-11
Original file line numberDiff line numberDiff line change
@@ -3296,12 +3296,10 @@ pub(crate) mod printing {
32963296
fixup.leftmost_subexpression_with_operator(&e.left, false, false, Precedence::Assign);
32973297
print_subexpression(&e.left, left_prec <= Precedence::Range, tokens, left_fixup);
32983298
e.eq_token.to_tokens(tokens);
3299-
let (right_prec, right_fixup) = fixup.rightmost_subexpression(&e.right, Precedence::Assign);
3300-
print_subexpression(
3299+
print_expr(
33013300
&e.right,
3302-
right_prec < Precedence::Assign,
33033301
tokens,
3304-
right_fixup,
3302+
fixup.rightmost_subexpression_fixup(false, false, Precedence::Assign),
33053303
);
33063304
}
33073305

@@ -3370,17 +3368,22 @@ pub(crate) mod printing {
33703368
#[cfg(feature = "full")]
33713369
binop_prec,
33723370
);
3371+
let left_needs_group = match binop_prec {
3372+
Precedence::Assign => left_prec <= Precedence::Range,
3373+
Precedence::Compare => left_prec <= binop_prec,
3374+
_ => left_prec < binop_prec,
3375+
};
33733376

3374-
let (right_prec, right_fixup) = fixup.rightmost_subexpression(
3375-
&e.right,
3377+
let right_fixup = fixup.rightmost_subexpression_fixup(
3378+
#[cfg(feature = "full")]
3379+
false,
3380+
#[cfg(feature = "full")]
3381+
false,
33763382
#[cfg(feature = "full")]
33773383
binop_prec,
33783384
);
3379-
let (left_needs_group, right_needs_group) = match binop_prec {
3380-
Precedence::Assign => (left_prec <= Precedence::Range, right_prec < binop_prec),
3381-
Precedence::Compare => (left_prec <= binop_prec, right_prec <= binop_prec),
3382-
_ => (left_prec < binop_prec, right_prec <= binop_prec),
3383-
};
3385+
let right_needs_group = binop_prec != Precedence::Assign
3386+
&& right_fixup.rightmost_subexpression_precedence(&e.right) <= binop_prec;
33843387

33853388
print_subexpression(&e.left, left_needs_group, tokens, left_fixup);
33863389
e.op.to_tokens(tokens);

src/fixup.rs

+2-8
Original file line numberDiff line numberDiff line change
@@ -511,9 +511,6 @@ fn scan_right(
511511
1,
512512
);
513513
if let Scan::Bailout | Scan::Consume = scan {
514-
return Scan::Consume;
515-
}
516-
if right_fixup.rightmost_subexpression_precedence(&e.right) < Precedence::Assign {
517514
Scan::Consume
518515
} else if let Precedence::Unambiguous = fixup.next_operator {
519516
Scan::Fail
@@ -552,11 +549,8 @@ fn scan_right(
552549
} {
553550
return Scan::Consume;
554551
}
555-
let right_prec = right_fixup.rightmost_subexpression_precedence(&e.right);
556-
let right_needs_group = match binop_prec {
557-
Precedence::Assign => right_prec < binop_prec,
558-
_ => right_prec <= binop_prec,
559-
};
552+
let right_needs_group = binop_prec != Precedence::Assign
553+
&& right_fixup.rightmost_subexpression_precedence(&e.right) <= binop_prec;
560554
if right_needs_group {
561555
Scan::Consume
562556
} else if let (Scan::Fail, Precedence::Unambiguous) = (scan, fixup.next_operator) {

0 commit comments

Comments
 (0)