| //! Utility functions for comparison operators. |
| |
| #![deny(clippy::missing_docs_in_private_items)] |
| |
| use rustc_hir::{BinOpKind, Expr}; |
| |
| #[derive(PartialEq, Eq, Debug, Copy, Clone)] |
| /// Represents a normalized comparison operator. |
| pub enum Rel { |
| /// `<` |
| Lt, |
| /// `<=` |
| Le, |
| /// `==` |
| Eq, |
| /// `!=` |
| Ne, |
| } |
| |
| /// Put the expression in the form `lhs < rhs`, `lhs <= rhs`, `lhs == rhs` or |
| /// `lhs != rhs`. |
| pub fn normalize_comparison<'a>( |
| op: BinOpKind, |
| lhs: &'a Expr<'a>, |
| rhs: &'a Expr<'a>, |
| ) -> Option<(Rel, &'a Expr<'a>, &'a Expr<'a>)> { |
| match op { |
| BinOpKind::Lt => Some((Rel::Lt, lhs, rhs)), |
| BinOpKind::Le => Some((Rel::Le, lhs, rhs)), |
| BinOpKind::Gt => Some((Rel::Lt, rhs, lhs)), |
| BinOpKind::Ge => Some((Rel::Le, rhs, lhs)), |
| BinOpKind::Eq => Some((Rel::Eq, rhs, lhs)), |
| BinOpKind::Ne => Some((Rel::Ne, rhs, lhs)), |
| _ => None, |
| } |
| } |