2747: BinOp helper to detect assignment r=matklad a=kjeremy



Co-authored-by: Jeremy Kolb <kjeremy@gmail.com>
This commit is contained in:
bors[bot] 2020-01-04 20:59:57 +00:00 committed by GitHub
commit fe00a34fcc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 11 deletions

View File

@ -56,17 +56,7 @@ enum FlipAction {
impl From<BinOp> for FlipAction {
fn from(op_kind: BinOp) -> Self {
match op_kind {
BinOp::Assignment => FlipAction::DontFlip,
BinOp::AddAssign => FlipAction::DontFlip,
BinOp::DivAssign => FlipAction::DontFlip,
BinOp::MulAssign => FlipAction::DontFlip,
BinOp::RemAssign => FlipAction::DontFlip,
BinOp::ShrAssign => FlipAction::DontFlip,
BinOp::ShlAssign => FlipAction::DontFlip,
BinOp::SubAssign => FlipAction::DontFlip,
BinOp::BitOrAssign => FlipAction::DontFlip,
BinOp::BitAndAssign => FlipAction::DontFlip,
BinOp::BitXorAssign => FlipAction::DontFlip,
kind if kind.is_assignment() => FlipAction::DontFlip,
BinOp::GreaterTest => FlipAction::FlipAndReplaceOp("<"),
BinOp::GreaterEqualTest => FlipAction::FlipAndReplaceOp("<="),
BinOp::LesserTest => FlipAction::FlipAndReplaceOp(">"),

View File

@ -126,6 +126,24 @@ pub enum BinOp {
BitXorAssign,
}
impl BinOp {
pub fn is_assignment(&self) -> bool {
match *self {
BinOp::Assignment
| BinOp::AddAssign
| BinOp::DivAssign
| BinOp::MulAssign
| BinOp::RemAssign
| BinOp::ShrAssign
| BinOp::ShlAssign
| BinOp::SubAssign
| BinOp::BitOrAssign
| BinOp::BitAndAssign
| BinOp::BitXorAssign => true,
_ => false,
}
}
}
impl ast::BinExpr {
pub fn op_details(&self) -> Option<(SyntaxToken, BinOp)> {
self.syntax().children_with_tokens().filter_map(|it| it.into_token()).find_map(|c| {