]> git.lizzy.rs Git - rust.git/blob - clippy_lints/src/utils/comparisons.rs
Auto merge of #3597 - xfix:match-ergonomics, r=phansch
[rust.git] / clippy_lints / src / utils / comparisons.rs
1 // Copyright 2014-2018 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution.
3 //
4 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
5 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
6 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
7 // option. This file may not be copied, modified, or distributed
8 // except according to those terms.
9
10 //! Utility functions about comparison operators.
11
12 #![deny(clippy::missing_docs_in_private_items)]
13
14 use rustc::hir::{BinOpKind, Expr};
15
16 #[derive(PartialEq, Eq, Debug, Copy, Clone)]
17 /// Represent a normalized comparison operator.
18 pub enum Rel {
19     /// `<`
20     Lt,
21     /// `<=`
22     Le,
23     /// `==`
24     Eq,
25     /// `!=`
26     Ne,
27 }
28
29 /// Put the expression in the form  `lhs < rhs`, `lhs <= rhs`, `lhs == rhs` or
30 /// `lhs != rhs`.
31 pub fn normalize_comparison<'a>(op: BinOpKind, lhs: &'a Expr, rhs: &'a Expr) -> Option<(Rel, &'a Expr, &'a Expr)> {
32     match op {
33         BinOpKind::Lt => Some((Rel::Lt, lhs, rhs)),
34         BinOpKind::Le => Some((Rel::Le, lhs, rhs)),
35         BinOpKind::Gt => Some((Rel::Lt, rhs, lhs)),
36         BinOpKind::Ge => Some((Rel::Le, rhs, lhs)),
37         BinOpKind::Eq => Some((Rel::Eq, rhs, lhs)),
38         BinOpKind::Ne => Some((Rel::Ne, rhs, lhs)),
39         _ => None,
40     }
41 }