mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-12-18 00:53:31 +00:00
Add necessary parentheses to manual_unwrap_or_default
lint output
This commit is contained in:
parent
fc053c3296
commit
2ffd1336c7
4 changed files with 35 additions and 3 deletions
|
@ -1,3 +1,4 @@
|
||||||
|
use clippy_utils::sugg::Sugg;
|
||||||
use rustc_errors::Applicability;
|
use rustc_errors::Applicability;
|
||||||
use rustc_hir::def::Res;
|
use rustc_hir::def::Res;
|
||||||
use rustc_hir::{Arm, Expr, ExprKind, HirId, LangItem, MatchSource, Pat, PatKind, QPath};
|
use rustc_hir::{Arm, Expr, ExprKind, HirId, LangItem, MatchSource, Pat, PatKind, QPath};
|
||||||
|
@ -124,7 +125,7 @@ fn handle_match<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'tcx>) -> bool {
|
||||||
// We now check the `None` arm is calling a method equivalent to `Default::default`.
|
// We now check the `None` arm is calling a method equivalent to `Default::default`.
|
||||||
&& let body_none = body_none.peel_blocks()
|
&& let body_none = body_none.peel_blocks()
|
||||||
&& is_default_equivalent(cx, body_none)
|
&& is_default_equivalent(cx, body_none)
|
||||||
&& let Some(match_expr_snippet) = snippet_opt(cx, match_expr.span)
|
&& let Some(receiver) = Sugg::hir_opt(cx, match_expr).map(Sugg::maybe_par)
|
||||||
{
|
{
|
||||||
span_lint_and_sugg(
|
span_lint_and_sugg(
|
||||||
cx,
|
cx,
|
||||||
|
@ -132,7 +133,7 @@ fn handle_match<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'tcx>) -> bool {
|
||||||
expr.span,
|
expr.span,
|
||||||
"match can be simplified with `.unwrap_or_default()`",
|
"match can be simplified with `.unwrap_or_default()`",
|
||||||
"replace it with",
|
"replace it with",
|
||||||
format!("{match_expr_snippet}.unwrap_or_default()"),
|
format!("{receiver}.unwrap_or_default()"),
|
||||||
Applicability::MachineApplicable,
|
Applicability::MachineApplicable,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,3 +17,12 @@ fn main() {
|
||||||
let x: Option<Vec<String>> = None;
|
let x: Option<Vec<String>> = None;
|
||||||
x.unwrap_or_default();
|
x.unwrap_or_default();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Issue #12531
|
||||||
|
unsafe fn no_deref_ptr(a: Option<i32>, b: *const Option<i32>) -> i32 {
|
||||||
|
match a {
|
||||||
|
// `*b` being correct depends on `a == Some(_)`
|
||||||
|
Some(_) => (*b).unwrap_or_default(),
|
||||||
|
_ => 0,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -38,3 +38,15 @@ fn main() {
|
||||||
Vec::default()
|
Vec::default()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Issue #12531
|
||||||
|
unsafe fn no_deref_ptr(a: Option<i32>, b: *const Option<i32>) -> i32 {
|
||||||
|
match a {
|
||||||
|
// `*b` being correct depends on `a == Some(_)`
|
||||||
|
Some(_) => match *b {
|
||||||
|
Some(v) => v,
|
||||||
|
_ => 0,
|
||||||
|
},
|
||||||
|
_ => 0,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -52,5 +52,15 @@ LL | | Vec::default()
|
||||||
LL | | };
|
LL | | };
|
||||||
| |_____^ help: replace it with: `x.unwrap_or_default()`
|
| |_____^ help: replace it with: `x.unwrap_or_default()`
|
||||||
|
|
||||||
error: aborting due to 5 previous errors
|
error: match can be simplified with `.unwrap_or_default()`
|
||||||
|
--> tests/ui/manual_unwrap_or_default.rs:46:20
|
||||||
|
|
|
||||||
|
LL | Some(_) => match *b {
|
||||||
|
| ____________________^
|
||||||
|
LL | | Some(v) => v,
|
||||||
|
LL | | _ => 0,
|
||||||
|
LL | | },
|
||||||
|
| |_________^ help: replace it with: `(*b).unwrap_or_default()`
|
||||||
|
|
||||||
|
error: aborting due to 6 previous errors
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue