From 28f735bb26706af3dddc7fa52ea4122a408cb023 Mon Sep 17 00:00:00 2001 From: Bruno Kirschner Date: Sun, 3 Jun 2018 18:46:11 +0200 Subject: [PATCH] Cleaned implements_ord helper function in boolean lint file. --- clippy_lints/src/booleans.rs | 24 +++++++++--------------- tests/ui/booleans.rs | 10 ++++++++++ 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/clippy_lints/src/booleans.rs b/clippy_lints/src/booleans.rs index 8816d50c5c26..0a453618e193 100644 --- a/clippy_lints/src/booleans.rs +++ b/clippy_lints/src/booleans.rs @@ -123,10 +123,9 @@ fn run(&mut self, e: &'v Expr) -> Result { let negated = match e.node { ExprBinary(binop, ref lhs, ref rhs) => { - match implements_ord(self.cx, lhs) { - Some(true) => (), - _ => continue, - }; + if !implements_ord(self.cx, lhs) { + continue; + } let mk_expr = |op| { Expr { @@ -181,10 +180,9 @@ fn simplify_not(&self, expr: &Expr) -> Option { match expr.node { ExprBinary(binop, ref lhs, ref rhs) => { - match implements_ord(self.cx, lhs) { - Some(true) => (), - _ => return None, - }; + if !implements_ord(self.cx, lhs) { + return None; + } match binop.node { BiEq => Some(" != "), @@ -458,12 +456,8 @@ fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> { } -fn implements_ord<'a, 'tcx>(cx: &'a LateContext<'a, 'tcx>, expr: &Expr) -> Option { +fn implements_ord<'a, 'tcx>(cx: &'a LateContext<'a, 'tcx>, expr: &Expr) -> bool { let ty = cx.tables.expr_ty(expr); - - return if let Some(id) = get_trait_def_id(cx, &paths::ORD) { - Some(implements_trait(cx, ty, id, &[])) - } else { - None - }; + get_trait_def_id(cx, &paths::ORD) + .map_or(false, |id| implements_trait(cx, ty, id, &[])) } diff --git a/tests/ui/booleans.rs b/tests/ui/booleans.rs index 78e876e51822..9daf15d378cc 100644 --- a/tests/ui/booleans.rs +++ b/tests/ui/booleans.rs @@ -114,3 +114,13 @@ fn warn_for_built_in_methods_with_negation() { if !res.is_some() { } if !res.is_none() { } } + +#[allow(neg_cmp_op_on_partial_ord)] +fn dont_warn_for_negated_partial_ord_comparision() { + let a: f64 = unimplemented!(); + let b: f64 = unimplemented!(); + let _ = !(a < b); + let _ = !(a <= b); + let _ = !(a > b); + let _ = !(a >= b); +}