diff options
Diffstat (limited to 'crates/ra_syntax')
-rw-r--r-- | crates/ra_syntax/src/ast.rs | 71 |
1 files changed, 34 insertions, 37 deletions
diff --git a/crates/ra_syntax/src/ast.rs b/crates/ra_syntax/src/ast.rs index 226208700..a6fac07c4 100644 --- a/crates/ra_syntax/src/ast.rs +++ b/crates/ra_syntax/src/ast.rs | |||
@@ -603,43 +603,40 @@ pub enum BinOp { | |||
603 | 603 | ||
604 | impl BinExpr { | 604 | impl BinExpr { |
605 | fn op_details(&self) -> Option<(&SyntaxNode, BinOp)> { | 605 | fn op_details(&self) -> Option<(&SyntaxNode, BinOp)> { |
606 | self.syntax() | 606 | self.syntax().children().find_map(|c| match c.kind() { |
607 | .children() | 607 | PIPEPIPE => Some((c, BinOp::BooleanOr)), |
608 | .filter_map(|c| match c.kind() { | 608 | AMPAMP => Some((c, BinOp::BooleanAnd)), |
609 | PIPEPIPE => Some((c, BinOp::BooleanOr)), | 609 | EQEQ => Some((c, BinOp::EqualityTest)), |
610 | AMPAMP => Some((c, BinOp::BooleanAnd)), | 610 | NEQ => Some((c, BinOp::NegatedEqualityTest)), |
611 | EQEQ => Some((c, BinOp::EqualityTest)), | 611 | LTEQ => Some((c, BinOp::LesserEqualTest)), |
612 | NEQ => Some((c, BinOp::NegatedEqualityTest)), | 612 | GTEQ => Some((c, BinOp::GreaterEqualTest)), |
613 | LTEQ => Some((c, BinOp::LesserEqualTest)), | 613 | L_ANGLE => Some((c, BinOp::LesserTest)), |
614 | GTEQ => Some((c, BinOp::GreaterEqualTest)), | 614 | R_ANGLE => Some((c, BinOp::GreaterTest)), |
615 | L_ANGLE => Some((c, BinOp::LesserTest)), | 615 | PLUS => Some((c, BinOp::Addition)), |
616 | R_ANGLE => Some((c, BinOp::GreaterTest)), | 616 | STAR => Some((c, BinOp::Multiplication)), |
617 | PLUS => Some((c, BinOp::Addition)), | 617 | MINUS => Some((c, BinOp::Subtraction)), |
618 | STAR => Some((c, BinOp::Multiplication)), | 618 | SLASH => Some((c, BinOp::Division)), |
619 | MINUS => Some((c, BinOp::Subtraction)), | 619 | PERCENT => Some((c, BinOp::Remainder)), |
620 | SLASH => Some((c, BinOp::Division)), | 620 | SHL => Some((c, BinOp::LeftShift)), |
621 | PERCENT => Some((c, BinOp::Remainder)), | 621 | SHR => Some((c, BinOp::RightShift)), |
622 | SHL => Some((c, BinOp::LeftShift)), | 622 | CARET => Some((c, BinOp::BitwiseXor)), |
623 | SHR => Some((c, BinOp::RightShift)), | 623 | PIPE => Some((c, BinOp::BitwiseOr)), |
624 | CARET => Some((c, BinOp::BitwiseXor)), | 624 | AMP => Some((c, BinOp::BitwiseAnd)), |
625 | PIPE => Some((c, BinOp::BitwiseOr)), | 625 | DOTDOT => Some((c, BinOp::RangeRightOpen)), |
626 | AMP => Some((c, BinOp::BitwiseAnd)), | 626 | DOTDOTEQ => Some((c, BinOp::RangeRightClosed)), |
627 | DOTDOT => Some((c, BinOp::RangeRightOpen)), | 627 | EQ => Some((c, BinOp::Assignment)), |
628 | DOTDOTEQ => Some((c, BinOp::RangeRightClosed)), | 628 | PLUSEQ => Some((c, BinOp::AddAssign)), |
629 | EQ => Some((c, BinOp::Assignment)), | 629 | SLASHEQ => Some((c, BinOp::DivAssign)), |
630 | PLUSEQ => Some((c, BinOp::AddAssign)), | 630 | STAREQ => Some((c, BinOp::MulAssign)), |
631 | SLASHEQ => Some((c, BinOp::DivAssign)), | 631 | PERCENTEQ => Some((c, BinOp::RemAssign)), |
632 | STAREQ => Some((c, BinOp::MulAssign)), | 632 | SHREQ => Some((c, BinOp::ShrAssign)), |
633 | PERCENTEQ => Some((c, BinOp::RemAssign)), | 633 | SHLEQ => Some((c, BinOp::ShlAssign)), |
634 | SHREQ => Some((c, BinOp::ShrAssign)), | 634 | MINUSEQ => Some((c, BinOp::SubAssign)), |
635 | SHLEQ => Some((c, BinOp::ShlAssign)), | 635 | PIPEEQ => Some((c, BinOp::BitOrAssign)), |
636 | MINUSEQ => Some((c, BinOp::SubAssign)), | 636 | AMPEQ => Some((c, BinOp::BitAndAssign)), |
637 | PIPEEQ => Some((c, BinOp::BitOrAssign)), | 637 | CARETEQ => Some((c, BinOp::BitXorAssign)), |
638 | AMPEQ => Some((c, BinOp::BitAndAssign)), | 638 | _ => None, |
639 | CARETEQ => Some((c, BinOp::BitXorAssign)), | 639 | }) |
640 | _ => None, | ||
641 | }) | ||
642 | .next() | ||
643 | } | 640 | } |
644 | 641 | ||
645 | pub fn op_kind(&self) -> Option<BinOp> { | 642 | pub fn op_kind(&self) -> Option<BinOp> { |