Skip to content

Commit 41e2c68

Browse files
committed
use sugg::Sugg::maybe_par
1 parent 4babfae commit 41e2c68

File tree

3 files changed

+13
-39
lines changed

3 files changed

+13
-39
lines changed

clippy_lints/src/if_then_panic.rs

Lines changed: 5 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
use clippy_utils::diagnostics::span_lint_and_sugg;
22
use clippy_utils::higher::PanicExpn;
3-
use clippy_utils::is_expn_of;
43
use clippy_utils::source::snippet_with_applicability;
4+
use clippy_utils::{is_expn_of, sugg};
55
use rustc_errors::Applicability;
6-
use rustc_hir::{BinOpKind, Block, Expr, ExprKind, StmtKind, UnOp};
6+
use rustc_hir::{Block, Expr, ExprKind, StmtKind, UnOp};
77
use rustc_lint::{LateContext, LateLintPass};
88
use rustc_session::{declare_lint_pass, declare_tool_lint};
99

@@ -74,40 +74,14 @@ impl LateLintPass<'_> for IfThenPanic {
7474
};
7575
let mut applicability = Applicability::MachineApplicable;
7676
let sugg = snippet_with_applicability(cx, span, "..", &mut applicability);
77-
//let mut cond_sugg = format!("!{}", snippet_with_applicability(cx, cond.span, "..", &mut applicability));
7877
let cond_sugg = if let ExprKind::DropTemps(e, ..) = cond.kind {
7978
if let Expr{kind: ExprKind::Unary(UnOp::Not, not_expr), ..} = e {
80-
snippet_with_applicability(cx, not_expr.span, "..", &mut applicability).to_string()
81-
} else if let Expr{kind: ExprKind::Binary(op, left, right), ..} = e {//BinOp{BinOpKind::And, ..}
82-
match op.node {
83-
BinOpKind::And | BinOpKind::Or => {
84-
let left_span = {
85-
if let Expr{kind: ExprKind::Unary(UnOp::Not, not_expr), ..} = left {
86-
snippet_with_applicability(cx, not_expr.span, "..", &mut applicability).to_string()
87-
} else {
88-
format!("!{}", snippet_with_applicability(cx, left.span, "..", &mut applicability))
89-
}
90-
};
91-
let right_span = {
92-
if let Expr{kind: ExprKind::Unary(UnOp::Not, not_expr), ..} = right {
93-
snippet_with_applicability(cx, not_expr.span, "..", &mut applicability).to_string()
94-
} else {
95-
format!("!{}", snippet_with_applicability(cx, right.span, "..", &mut applicability))
96-
}
97-
};
98-
if op.node == BinOpKind::And {
99-
format!("{} || {}", left_span, right_span)
100-
} else {
101-
format!("{} && {}", left_span, right_span)
102-
}
103-
}
104-
_ => format!("!({})", snippet_with_applicability(cx, cond.span, "..", &mut applicability))
105-
}
79+
sugg::Sugg::hir_with_applicability(cx, not_expr, "..", &mut applicability).maybe_par().to_string()
10680
} else {
107-
format!("!{}", snippet_with_applicability(cx, cond.span, "..", &mut applicability))
81+
format!("!{}", sugg::Sugg::hir_with_applicability(cx, e, "..", &mut applicability).maybe_par().to_string())
10882
}
10983
} else {
110-
format!("!{}", snippet_with_applicability(cx, cond.span, "..", &mut applicability))
84+
format!("!{}", sugg::Sugg::hir_with_applicability(cx, cond, "..", &mut applicability).maybe_par().to_string())
11185
};
11286

11387
span_lint_and_sugg(

tests/ui/if_then_panic.fixed

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ fn main() {
3333
}
3434
let b = vec![1, 2, 3];
3535
assert!(!b.is_empty(), "panic1");
36-
assert!(!b.is_empty() || !a.is_empty(), "panic2");
37-
assert!(!a.is_empty() || b.is_empty(), "panic3");
38-
assert!(!b.is_empty() && !a.is_empty(), "panic4");
39-
assert!(!a.is_empty() && b.is_empty(), "panic5");
36+
assert!(!(b.is_empty() && a.is_empty()), "panic2");
37+
assert!(!(a.is_empty() && !b.is_empty()), "panic3");
38+
assert!(!(b.is_empty() || a.is_empty()), "panic4");
39+
assert!(!(a.is_empty() || !b.is_empty()), "panic5");
4040
}

tests/ui/if_then_panic.stderr

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,31 +30,31 @@ error: only a `panic!` in `if`-then statement
3030
LL | / if b.is_empty() && a.is_empty() {
3131
LL | | panic!("panic2");
3232
LL | | }
33-
| |_____^ help: try: `assert!(!b.is_empty() || !a.is_empty(), "panic2");`
33+
| |_____^ help: try: `assert!(!(b.is_empty() && a.is_empty()), "panic2");`
3434

3535
error: only a `panic!` in `if`-then statement
3636
--> $DIR/if_then_panic.rs:45:5
3737
|
3838
LL | / if a.is_empty() && !b.is_empty() {
3939
LL | | panic!("panic3");
4040
LL | | }
41-
| |_____^ help: try: `assert!(!a.is_empty() || b.is_empty(), "panic3");`
41+
| |_____^ help: try: `assert!(!(a.is_empty() && !b.is_empty()), "panic3");`
4242

4343
error: only a `panic!` in `if`-then statement
4444
--> $DIR/if_then_panic.rs:48:5
4545
|
4646
LL | / if b.is_empty() || a.is_empty() {
4747
LL | | panic!("panic4");
4848
LL | | }
49-
| |_____^ help: try: `assert!(!b.is_empty() && !a.is_empty(), "panic4");`
49+
| |_____^ help: try: `assert!(!(b.is_empty() || a.is_empty()), "panic4");`
5050

5151
error: only a `panic!` in `if`-then statement
5252
--> $DIR/if_then_panic.rs:51:5
5353
|
5454
LL | / if a.is_empty() || !b.is_empty() {
5555
LL | | panic!("panic5");
5656
LL | | }
57-
| |_____^ help: try: `assert!(!a.is_empty() && b.is_empty(), "panic5");`
57+
| |_____^ help: try: `assert!(!(a.is_empty() || !b.is_empty()), "panic5");`
5858

5959
error: aborting due to 7 previous errors
6060

0 commit comments

Comments
 (0)