Fix parentheses when replacing matches!(…, None) with .is_none() (#13906)
Proper parentheses need to be added to some expressions in receiver position. Fix #13902 changelog: [`redundant_pattern_matching`]: use proper parentheses when suggesting replacing `matches!(…, None)` by `.is_none()`
This commit is contained in:
commit
2aea7a080d
4 changed files with 28 additions and 4 deletions
|
|
@ -1,6 +1,6 @@
|
|||
use super::REDUNDANT_PATTERN_MATCHING;
|
||||
use clippy_utils::diagnostics::{span_lint_and_sugg, span_lint_and_then};
|
||||
use clippy_utils::source::{snippet, walk_span_to_context};
|
||||
use clippy_utils::source::walk_span_to_context;
|
||||
use clippy_utils::sugg::{Sugg, make_unop};
|
||||
use clippy_utils::ty::{is_type_diagnostic_item, needs_ordered_drop};
|
||||
use clippy_utils::visitors::{any_temporaries_need_ordered_drop, for_each_expr_without_closures};
|
||||
|
|
@ -274,7 +274,9 @@ pub(super) fn check_match<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, op
|
|||
ExprKind::AddrOf(_, _, borrowed) => borrowed,
|
||||
_ => op,
|
||||
};
|
||||
let mut sugg = format!("{}.{good_method}", snippet(cx, result_expr.span, "_"));
|
||||
let mut app = Applicability::MachineApplicable;
|
||||
let receiver_sugg = Sugg::hir_with_applicability(cx, result_expr, "_", &mut app).maybe_par();
|
||||
let mut sugg = format!("{receiver_sugg}.{good_method}");
|
||||
|
||||
if let Some(guard) = maybe_guard {
|
||||
// wow, the HIR for match guards in `PAT if let PAT = expr && expr => ...` is annoying!
|
||||
|
|
@ -307,7 +309,7 @@ pub(super) fn check_match<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>, op
|
|||
format!("redundant pattern matching, consider using `{good_method}`"),
|
||||
"try",
|
||||
sugg,
|
||||
Applicability::MachineApplicable,
|
||||
app,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -137,3 +137,11 @@ fn issue10803() {
|
|||
// Don't lint
|
||||
let _ = matches!(x, Some(16));
|
||||
}
|
||||
|
||||
fn issue13902() {
|
||||
let x = Some(0);
|
||||
let p = &raw const x;
|
||||
unsafe {
|
||||
let _ = (*p).is_none();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -164,3 +164,11 @@ fn issue10803() {
|
|||
// Don't lint
|
||||
let _ = matches!(x, Some(16));
|
||||
}
|
||||
|
||||
fn issue13902() {
|
||||
let x = Some(0);
|
||||
let p = &raw const x;
|
||||
unsafe {
|
||||
let _ = matches!(*p, None);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -209,5 +209,11 @@ error: redundant pattern matching, consider using `is_none()`
|
|||
LL | let _ = matches!(x, None);
|
||||
| ^^^^^^^^^^^^^^^^^ help: try: `x.is_none()`
|
||||
|
||||
error: aborting due to 30 previous errors
|
||||
error: redundant pattern matching, consider using `is_none()`
|
||||
--> tests/ui/redundant_pattern_matching_option.rs:172:17
|
||||
|
|
||||
LL | let _ = matches!(*p, None);
|
||||
| ^^^^^^^^^^^^^^^^^^ help: try: `(*p).is_none()`
|
||||
|
||||
error: aborting due to 31 previous errors
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue