]> git.lizzy.rs Git - rust.git/commitdiff
use sugg::Sugg::maybe_par
authorsurechen <chenshuo17@huawei.com>
Fri, 1 Oct 2021 05:13:09 +0000 (13:13 +0800)
committersurechen <chenshuo17@huawei.com>
Fri, 1 Oct 2021 05:13:09 +0000 (13:13 +0800)
clippy_lints/src/if_then_panic.rs
tests/ui/if_then_panic.fixed
tests/ui/if_then_panic.stderr

index 31e416bd4d663ae5f0fc0bf708aeec102d66d511..10bca59e6d06ab5da76ebe19bbba10020f50f9a8 100644 (file)
@@ -1,9 +1,9 @@
 use clippy_utils::diagnostics::span_lint_and_sugg;
 use clippy_utils::higher::PanicExpn;
-use clippy_utils::is_expn_of;
 use clippy_utils::source::snippet_with_applicability;
+use clippy_utils::{is_expn_of, sugg};
 use rustc_errors::Applicability;
-use rustc_hir::{BinOpKind, Block, Expr, ExprKind, StmtKind, UnOp};
+use rustc_hir::{Block, Expr, ExprKind, StmtKind, UnOp};
 use rustc_lint::{LateContext, LateLintPass};
 use rustc_session::{declare_lint_pass, declare_tool_lint};
 
@@ -74,40 +74,14 @@ fn check_expr(&mut self, cx: &LateContext<'_>, expr: &Expr<'_>) {
                 };
                 let mut applicability = Applicability::MachineApplicable;
                 let sugg = snippet_with_applicability(cx, span, "..", &mut applicability);
-                //let mut cond_sugg = format!("!{}", snippet_with_applicability(cx, cond.span, "..", &mut applicability));
                 let cond_sugg = if let ExprKind::DropTemps(e, ..) = cond.kind {
                     if let Expr{kind: ExprKind::Unary(UnOp::Not, not_expr), ..} = e {
-                        snippet_with_applicability(cx, not_expr.span, "..", &mut applicability).to_string()
-                    } else if let Expr{kind: ExprKind::Binary(op, left, right), ..} = e {//BinOp{BinOpKind::And, ..}
-                        match op.node {
-                            BinOpKind::And | BinOpKind::Or => {
-                                let left_span =  {
-                                    if let Expr{kind: ExprKind::Unary(UnOp::Not, not_expr), ..} = left {
-                                        snippet_with_applicability(cx, not_expr.span, "..", &mut applicability).to_string()
-                                    } else {
-                                        format!("!{}", snippet_with_applicability(cx, left.span, "..", &mut applicability))
-                                    }
-                                };
-                                let right_span = {
-                                    if let Expr{kind: ExprKind::Unary(UnOp::Not, not_expr), ..} = right {
-                                        snippet_with_applicability(cx, not_expr.span, "..", &mut applicability).to_string()
-                                    } else {
-                                        format!("!{}", snippet_with_applicability(cx, right.span, "..", &mut applicability))
-                                    }
-                                };
-                                if op.node == BinOpKind::And {
-                                  format!("{} || {}", left_span, right_span)
-                                } else  {
-                                  format!("{} && {}", left_span, right_span)
-                                }
-                            }
-                            _ => format!("!({})", snippet_with_applicability(cx, cond.span, "..", &mut applicability))
-                        }
+                         sugg::Sugg::hir_with_applicability(cx, not_expr, "..", &mut applicability).maybe_par().to_string()
                     } else {
-                        format!("!{}", snippet_with_applicability(cx, cond.span, "..", &mut applicability))
+                       format!("!{}", sugg::Sugg::hir_with_applicability(cx, e, "..", &mut applicability).maybe_par().to_string())
                     }
                 } else {
-                    format!("!{}", snippet_with_applicability(cx, cond.span, "..", &mut applicability))
+                   format!("!{}", sugg::Sugg::hir_with_applicability(cx, cond, "..", &mut applicability).maybe_par().to_string())
                 };
 
                 span_lint_and_sugg(
index f72bc6f5979d3b5f458f7f9b1461caa4b8127805..0998f8ffa9de4ecf8fe15e4c8e74ed6bdbb3176c 100644 (file)
@@ -33,8 +33,8 @@ fn main() {
     }
     let b = vec![1, 2, 3];
     assert!(!b.is_empty(), "panic1");
-    assert!(!b.is_empty() || !a.is_empty(), "panic2");
-    assert!(!a.is_empty() || b.is_empty(), "panic3");
-    assert!(!b.is_empty() && !a.is_empty(), "panic4");
-    assert!(!a.is_empty() && b.is_empty(), "panic5");
+    assert!(!(b.is_empty() && a.is_empty()), "panic2");
+    assert!(!(a.is_empty() && !b.is_empty()), "panic3");
+    assert!(!(b.is_empty() || a.is_empty()), "panic4");
+    assert!(!(a.is_empty() || !b.is_empty()), "panic5");
 }
index 502ba10b8f498133a3a52bfc1c3fd9288b172e58..5bb62f8756606ec42f899d2fec87c4a966d9b48f 100644 (file)
@@ -30,7 +30,7 @@ error: only a `panic!` in `if`-then statement
 LL | /     if b.is_empty() && a.is_empty() {
 LL | |         panic!("panic2");
 LL | |     }
-   | |_____^ help: try: `assert!(!b.is_empty() || !a.is_empty(), "panic2");`
+   | |_____^ help: try: `assert!(!(b.is_empty() && a.is_empty()), "panic2");`
 
 error: only a `panic!` in `if`-then statement
   --> $DIR/if_then_panic.rs:45:5
@@ -38,7 +38,7 @@ error: only a `panic!` in `if`-then statement
 LL | /     if a.is_empty() && !b.is_empty() {
 LL | |         panic!("panic3");
 LL | |     }
-   | |_____^ help: try: `assert!(!a.is_empty() || b.is_empty(), "panic3");`
+   | |_____^ help: try: `assert!(!(a.is_empty() && !b.is_empty()), "panic3");`
 
 error: only a `panic!` in `if`-then statement
   --> $DIR/if_then_panic.rs:48:5
@@ -46,7 +46,7 @@ error: only a `panic!` in `if`-then statement
 LL | /     if b.is_empty() || a.is_empty() {
 LL | |         panic!("panic4");
 LL | |     }
-   | |_____^ help: try: `assert!(!b.is_empty() && !a.is_empty(), "panic4");`
+   | |_____^ help: try: `assert!(!(b.is_empty() || a.is_empty()), "panic4");`
 
 error: only a `panic!` in `if`-then statement
   --> $DIR/if_then_panic.rs:51:5
@@ -54,7 +54,7 @@ error: only a `panic!` in `if`-then statement
 LL | /     if a.is_empty() || !b.is_empty() {
 LL | |         panic!("panic5");
 LL | |     }
-   | |_____^ help: try: `assert!(!a.is_empty() && b.is_empty(), "panic5");`
+   | |_____^ help: try: `assert!(!(a.is_empty() || !b.is_empty()), "panic5");`
 
 error: aborting due to 7 previous errors