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:
Timo 2024-12-30 14:06:30 +00:00 committed by GitHub
commit 2aea7a080d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 28 additions and 4 deletions

View file

@ -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,
);
}
}

View file

@ -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();
}
}

View file

@ -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);
}
}

View file

@ -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