Don't lint comparison operators in arithmetic impls

This commit is contained in:
flip1995 2018-03-17 21:34:13 +01:00
parent 03f4ae062d
commit ad459184a3
2 changed files with 9 additions and 1 deletions

View File

@ -61,6 +61,10 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for SuspiciousImpl {
fn check_expr(&mut self, cx: &LateContext<'a, 'tcx>, expr: &'tcx hir::Expr) {
use rustc::hir::BinOp_::*;
if let hir::ExprBinary(binop, _, _) = expr.node {
match binop.node {
BiEq | BiLt | BiLe | BiNe | BiGe | BiGt => return,
_ => {},
}
// Check if the binary expression is part of another bi/unary expression
// as a child node
let mut parent_expr = cx.tcx.hir.get_parent_node(expr.id);

View File

@ -59,7 +59,11 @@ impl Sub for Bar {
type Output = Bar;
fn sub(self, other: Self) -> Self {
Bar(-(self.0 & other.0)) // OK: UnNeg part of BiExpr as parent node
if self.0 <= other.0 {
Bar(-(self.0 & other.0)) // OK: UnNeg part of BiExpr as parent node
} else {
Bar(0)
}
}
}