rust/clippy_utils/src/comparisons.rs

37 lines
927 B
Rust
Raw Normal View History

//! Utility functions about comparison operators.
2018-08-01 15:48:41 -05:00
#![deny(clippy::missing_docs_in_private_items)]
2020-01-06 10:39:50 -06:00
use rustc_hir::{BinOpKind, Expr};
2016-03-26 00:57:03 -05:00
#[derive(PartialEq, Eq, Debug, Copy, Clone)]
/// Represent a normalized comparison operator.
2016-03-26 00:57:03 -05:00
pub enum Rel {
/// `<`
2016-03-26 00:57:03 -05:00
Lt,
/// `<=`
2016-03-26 00:57:03 -05:00
Le,
/// `==`
Eq,
/// `!=`
Ne,
2016-03-26 00:57:03 -05:00
}
2017-08-09 02:30:56 -05:00
/// Put the expression in the form `lhs < rhs`, `lhs <= rhs`, `lhs == rhs` or
/// `lhs != rhs`.
2019-12-27 01:12:26 -06:00
pub fn normalize_comparison<'a>(
op: BinOpKind,
lhs: &'a Expr<'a>,
rhs: &'a Expr<'a>,
) -> Option<(Rel, &'a Expr<'a>, &'a Expr<'a>)> {
2016-03-26 00:57:03 -05:00
match op {
2018-07-12 02:50:09 -05:00
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)),
2016-03-26 00:57:03 -05:00
_ => None,
}
}