clean-up
This commit is contained in:
parent
cd61be7c56
commit
aa4869f27a
9 changed files with 146 additions and 229 deletions
|
|
@ -156,39 +156,52 @@ fn collect_unwrap_info<'tcx>(
|
|||
}
|
||||
}
|
||||
|
||||
match expr.kind {
|
||||
ExprKind::Binary(op, left, right)
|
||||
if matches!(
|
||||
(invert, op.node),
|
||||
(false, BinOpKind::And | BinOpKind::BitAnd) | (true, BinOpKind::Or | BinOpKind::BitOr)
|
||||
) =>
|
||||
{
|
||||
let mut unwrap_info = collect_unwrap_info(cx, if_expr, left, branch, invert, false);
|
||||
unwrap_info.extend(collect_unwrap_info(cx, if_expr, right, branch, invert, false));
|
||||
unwrap_info
|
||||
},
|
||||
ExprKind::Unary(UnOp::Not, expr) => collect_unwrap_info(cx, if_expr, expr, branch, !invert, false),
|
||||
ExprKind::MethodCall(method_name, receiver, [], _)
|
||||
if let Some(local_id) = receiver.res_local_id()
|
||||
&& let ty = cx.typeck_results().expr_ty(receiver)
|
||||
&& let name = method_name.ident.name
|
||||
&& let Some((kind, unwrappable)) = option_or_result_call(cx, ty, name) =>
|
||||
{
|
||||
let safe_to_unwrap = unwrappable != invert;
|
||||
fn inner<'tcx>(
|
||||
cx: &LateContext<'tcx>,
|
||||
if_expr: &'tcx Expr<'_>,
|
||||
expr: &'tcx Expr<'_>,
|
||||
branch: &'tcx Expr<'_>,
|
||||
invert: bool,
|
||||
is_entire_condition: bool,
|
||||
out: &mut Vec<UnwrapInfo<'tcx>>,
|
||||
) {
|
||||
match expr.kind {
|
||||
ExprKind::Binary(op, left, right)
|
||||
if matches!(
|
||||
(invert, op.node),
|
||||
(false, BinOpKind::And | BinOpKind::BitAnd) | (true, BinOpKind::Or | BinOpKind::BitOr)
|
||||
) =>
|
||||
{
|
||||
inner(cx, if_expr, left, branch, invert, false, out);
|
||||
inner(cx, if_expr, right, branch, invert, false, out);
|
||||
},
|
||||
ExprKind::Unary(UnOp::Not, expr) => inner(cx, if_expr, expr, branch, !invert, false, out),
|
||||
ExprKind::MethodCall(method_name, receiver, [], _)
|
||||
if let Some(local_id) = receiver.res_local_id()
|
||||
&& let ty = cx.typeck_results().expr_ty(receiver)
|
||||
&& let name = method_name.ident.name
|
||||
&& let Some((kind, unwrappable)) = option_or_result_call(cx, ty, name) =>
|
||||
{
|
||||
let safe_to_unwrap = unwrappable != invert;
|
||||
|
||||
vec![UnwrapInfo {
|
||||
local_id,
|
||||
if_expr,
|
||||
check: expr,
|
||||
check_name: name,
|
||||
branch,
|
||||
safe_to_unwrap,
|
||||
kind,
|
||||
is_entire_condition,
|
||||
}]
|
||||
},
|
||||
_ => vec![],
|
||||
out.push(UnwrapInfo {
|
||||
local_id,
|
||||
if_expr,
|
||||
check: expr,
|
||||
check_name: name,
|
||||
branch,
|
||||
safe_to_unwrap,
|
||||
kind,
|
||||
is_entire_condition,
|
||||
});
|
||||
},
|
||||
_ => {},
|
||||
}
|
||||
}
|
||||
|
||||
let mut out = vec![];
|
||||
inner(cx, if_expr, expr, branch, invert, is_entire_condition, &mut out);
|
||||
out
|
||||
}
|
||||
|
||||
/// A HIR visitor delegate that checks if a local variable of type `Option` or `Result` is mutated,
|
||||
|
|
@ -321,21 +334,14 @@ impl<'tcx> Visitor<'tcx> for UnwrappableVariablesVisitor<'_, 'tcx> {
|
|||
&& let Some(id) = self_arg.res_local_id()
|
||||
&& matches!(method_name.ident.name, sym::unwrap | sym::expect | sym::unwrap_err)
|
||||
&& let call_to_unwrap = matches!(method_name.ident.name, sym::unwrap | sym::expect)
|
||||
&& let Some(unwrappable) = self.unwrappables.iter()
|
||||
.find(|u| u.local_id == id)
|
||||
&& let Some(unwrappable) = self.unwrappables.iter().find(|u| u.local_id == id)
|
||||
// Span contexts should not differ with the conditional branch
|
||||
&& let span_ctxt = expr.span.ctxt()
|
||||
&& unwrappable.branch.span.ctxt() == span_ctxt
|
||||
&& unwrappable.check.span.ctxt() == span_ctxt
|
||||
{
|
||||
if call_to_unwrap == unwrappable.safe_to_unwrap {
|
||||
let is_entire_condition = unwrappable.is_entire_condition;
|
||||
let unwrappable_variable_name = self.cx.tcx.hir_name(unwrappable.local_id);
|
||||
let suggested_pattern = if call_to_unwrap {
|
||||
unwrappable.kind.success_variant_pattern()
|
||||
} else {
|
||||
unwrappable.kind.error_variant_pattern()
|
||||
};
|
||||
|
||||
span_lint_hir_and_then(
|
||||
self.cx,
|
||||
|
|
@ -347,12 +353,17 @@ impl<'tcx> Visitor<'tcx> for UnwrappableVariablesVisitor<'_, 'tcx> {
|
|||
method_name.ident.name, unwrappable.check_name,
|
||||
),
|
||||
|diag| {
|
||||
if is_entire_condition {
|
||||
if unwrappable.is_entire_condition {
|
||||
diag.span_suggestion(
|
||||
unwrappable.check.span.with_lo(unwrappable.if_expr.span.lo()),
|
||||
"try",
|
||||
format!(
|
||||
"if let {suggested_pattern} = {borrow_prefix}{unwrappable_variable_name}",
|
||||
suggested_pattern = if call_to_unwrap {
|
||||
unwrappable.kind.success_variant_pattern()
|
||||
} else {
|
||||
unwrappable.kind.error_variant_pattern()
|
||||
},
|
||||
borrow_prefix = match as_ref_kind {
|
||||
Some(AsRefKind::AsRef) => "&",
|
||||
Some(AsRefKind::AsMut) => "&mut ",
|
||||
|
|
|
|||
|
|
@ -1,27 +1,19 @@
|
|||
#![deny(clippy::panicking_unwrap, clippy::unnecessary_unwrap)]
|
||||
#![allow(
|
||||
clippy::if_same_then_else,
|
||||
clippy::branches_sharing_code,
|
||||
clippy::unnecessary_literal_unwrap
|
||||
)]
|
||||
#![warn(clippy::panicking_unwrap, clippy::unnecessary_unwrap)]
|
||||
#![expect(clippy::branches_sharing_code, clippy::unnecessary_literal_unwrap)]
|
||||
|
||||
fn test_complex_conditions() {
|
||||
let x: Result<(), ()> = Ok(());
|
||||
let y: Result<(), ()> = Ok(());
|
||||
if x.is_ok() && y.is_err() {
|
||||
// unnecessary
|
||||
x.unwrap();
|
||||
//~^ unnecessary_unwrap
|
||||
|
||||
// will panic
|
||||
x.unwrap_err();
|
||||
//~^ panicking_unwrap
|
||||
|
||||
// will panic
|
||||
y.unwrap();
|
||||
//~^ panicking_unwrap
|
||||
|
||||
// unnecessary
|
||||
y.unwrap_err();
|
||||
//~^ unnecessary_unwrap
|
||||
} else {
|
||||
|
|
@ -37,45 +29,35 @@ fn test_complex_conditions() {
|
|||
x.unwrap();
|
||||
y.unwrap();
|
||||
} else {
|
||||
// will panic
|
||||
x.unwrap();
|
||||
//~^ panicking_unwrap
|
||||
|
||||
// unnecessary
|
||||
x.unwrap_err();
|
||||
//~^ unnecessary_unwrap
|
||||
|
||||
// will panic
|
||||
y.unwrap();
|
||||
//~^ panicking_unwrap
|
||||
|
||||
// unnecessary
|
||||
y.unwrap_err();
|
||||
//~^ unnecessary_unwrap
|
||||
}
|
||||
let z: Result<(), ()> = Ok(());
|
||||
if x.is_ok() && !(y.is_ok() || z.is_err()) {
|
||||
// unnecessary
|
||||
x.unwrap();
|
||||
//~^ unnecessary_unwrap
|
||||
|
||||
// will panic
|
||||
x.unwrap_err();
|
||||
//~^ panicking_unwrap
|
||||
|
||||
// will panic
|
||||
y.unwrap();
|
||||
//~^ panicking_unwrap
|
||||
|
||||
// unnecessary
|
||||
y.unwrap_err();
|
||||
//~^ unnecessary_unwrap
|
||||
|
||||
// unnecessary
|
||||
z.unwrap();
|
||||
//~^ unnecessary_unwrap
|
||||
|
||||
// will panic
|
||||
z.unwrap_err();
|
||||
//~^ panicking_unwrap
|
||||
}
|
||||
|
|
@ -85,27 +67,21 @@ fn test_complex_conditions() {
|
|||
y.unwrap();
|
||||
z.unwrap();
|
||||
} else {
|
||||
// will panic
|
||||
x.unwrap();
|
||||
//~^ panicking_unwrap
|
||||
|
||||
// unnecessary
|
||||
x.unwrap_err();
|
||||
//~^ unnecessary_unwrap
|
||||
|
||||
// unnecessary
|
||||
y.unwrap();
|
||||
//~^ unnecessary_unwrap
|
||||
|
||||
// will panic
|
||||
y.unwrap_err();
|
||||
//~^ panicking_unwrap
|
||||
|
||||
// will panic
|
||||
z.unwrap();
|
||||
//~^ panicking_unwrap
|
||||
|
||||
// unnecessary
|
||||
z.unwrap_err();
|
||||
//~^ unnecessary_unwrap
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,21 +1,17 @@
|
|||
error: called `unwrap` on `x` after checking its variant with `is_ok`
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:13:9
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:8:9
|
||||
|
|
||||
LL | if x.is_ok() && y.is_err() {
|
||||
| --------- the check is happening here
|
||||
LL | // unnecessary
|
||||
LL | x.unwrap();
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
= help: try using `if let` or `match`
|
||||
note: the lint level is defined here
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:1:35
|
||||
|
|
||||
LL | #![deny(clippy::panicking_unwrap, clippy::unnecessary_unwrap)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: `-D clippy::unnecessary-unwrap` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::unnecessary_unwrap)]`
|
||||
|
||||
error: this call to `unwrap_err()` will always panic
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:17:9
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:11:9
|
||||
|
|
||||
LL | if x.is_ok() && y.is_err() {
|
||||
| --------- because of this check
|
||||
|
|
@ -23,14 +19,11 @@ LL | if x.is_ok() && y.is_err() {
|
|||
LL | x.unwrap_err();
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:1:9
|
||||
|
|
||||
LL | #![deny(clippy::panicking_unwrap, clippy::unnecessary_unwrap)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: `-D clippy::panicking-unwrap` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::panicking_unwrap)]`
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:21:9
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:14:9
|
||||
|
|
||||
LL | if x.is_ok() && y.is_err() {
|
||||
| ---------- because of this check
|
||||
|
|
@ -39,7 +32,7 @@ LL | y.unwrap();
|
|||
| ^^^^^^^^^^
|
||||
|
||||
error: called `unwrap_err` on `y` after checking its variant with `is_err`
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:25:9
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:17:9
|
||||
|
|
||||
LL | if x.is_ok() && y.is_err() {
|
||||
| ---------- the check is happening here
|
||||
|
|
@ -50,7 +43,7 @@ LL | y.unwrap_err();
|
|||
= help: try using `if let` or `match`
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:41:9
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:32:9
|
||||
|
|
||||
LL | if x.is_ok() || y.is_ok() {
|
||||
| --------- because of this check
|
||||
|
|
@ -59,7 +52,7 @@ LL | x.unwrap();
|
|||
| ^^^^^^^^^^
|
||||
|
||||
error: called `unwrap_err` on `x` after checking its variant with `is_ok`
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:45:9
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:35:9
|
||||
|
|
||||
LL | if x.is_ok() || y.is_ok() {
|
||||
| --------- the check is happening here
|
||||
|
|
@ -70,7 +63,7 @@ LL | x.unwrap_err();
|
|||
= help: try using `if let` or `match`
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:49:9
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:38:9
|
||||
|
|
||||
LL | if x.is_ok() || y.is_ok() {
|
||||
| --------- because of this check
|
||||
|
|
@ -79,7 +72,7 @@ LL | y.unwrap();
|
|||
| ^^^^^^^^^^
|
||||
|
||||
error: called `unwrap_err` on `y` after checking its variant with `is_ok`
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:53:9
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:41:9
|
||||
|
|
||||
LL | if x.is_ok() || y.is_ok() {
|
||||
| --------- the check is happening here
|
||||
|
|
@ -90,18 +83,17 @@ LL | y.unwrap_err();
|
|||
= help: try using `if let` or `match`
|
||||
|
||||
error: called `unwrap` on `x` after checking its variant with `is_ok`
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:59:9
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:46:9
|
||||
|
|
||||
LL | if x.is_ok() && !(y.is_ok() || z.is_err()) {
|
||||
| --------- the check is happening here
|
||||
LL | // unnecessary
|
||||
LL | x.unwrap();
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
= help: try using `if let` or `match`
|
||||
|
||||
error: this call to `unwrap_err()` will always panic
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:63:9
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:49:9
|
||||
|
|
||||
LL | if x.is_ok() && !(y.is_ok() || z.is_err()) {
|
||||
| --------- because of this check
|
||||
|
|
@ -110,7 +102,7 @@ LL | x.unwrap_err();
|
|||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:67:9
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:52:9
|
||||
|
|
||||
LL | if x.is_ok() && !(y.is_ok() || z.is_err()) {
|
||||
| --------- because of this check
|
||||
|
|
@ -119,7 +111,7 @@ LL | y.unwrap();
|
|||
| ^^^^^^^^^^
|
||||
|
||||
error: called `unwrap_err` on `y` after checking its variant with `is_ok`
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:71:9
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:55:9
|
||||
|
|
||||
LL | if x.is_ok() && !(y.is_ok() || z.is_err()) {
|
||||
| --------- the check is happening here
|
||||
|
|
@ -130,7 +122,7 @@ LL | y.unwrap_err();
|
|||
= help: try using `if let` or `match`
|
||||
|
||||
error: called `unwrap` on `z` after checking its variant with `is_err`
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:75:9
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:58:9
|
||||
|
|
||||
LL | if x.is_ok() && !(y.is_ok() || z.is_err()) {
|
||||
| ---------- the check is happening here
|
||||
|
|
@ -141,7 +133,7 @@ LL | z.unwrap();
|
|||
= help: try using `if let` or `match`
|
||||
|
||||
error: this call to `unwrap_err()` will always panic
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:79:9
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:61:9
|
||||
|
|
||||
LL | if x.is_ok() && !(y.is_ok() || z.is_err()) {
|
||||
| ---------- because of this check
|
||||
|
|
@ -150,7 +142,7 @@ LL | z.unwrap_err();
|
|||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:89:9
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:70:9
|
||||
|
|
||||
LL | if x.is_ok() || !(y.is_ok() && z.is_err()) {
|
||||
| --------- because of this check
|
||||
|
|
@ -159,7 +151,7 @@ LL | x.unwrap();
|
|||
| ^^^^^^^^^^
|
||||
|
||||
error: called `unwrap_err` on `x` after checking its variant with `is_ok`
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:93:9
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:73:9
|
||||
|
|
||||
LL | if x.is_ok() || !(y.is_ok() && z.is_err()) {
|
||||
| --------- the check is happening here
|
||||
|
|
@ -170,7 +162,7 @@ LL | x.unwrap_err();
|
|||
= help: try using `if let` or `match`
|
||||
|
||||
error: called `unwrap` on `y` after checking its variant with `is_ok`
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:97:9
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:76:9
|
||||
|
|
||||
LL | if x.is_ok() || !(y.is_ok() && z.is_err()) {
|
||||
| --------- the check is happening here
|
||||
|
|
@ -181,7 +173,7 @@ LL | y.unwrap();
|
|||
= help: try using `if let` or `match`
|
||||
|
||||
error: this call to `unwrap_err()` will always panic
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:101:9
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:79:9
|
||||
|
|
||||
LL | if x.is_ok() || !(y.is_ok() && z.is_err()) {
|
||||
| --------- because of this check
|
||||
|
|
@ -190,7 +182,7 @@ LL | y.unwrap_err();
|
|||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:105:9
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:82:9
|
||||
|
|
||||
LL | if x.is_ok() || !(y.is_ok() && z.is_err()) {
|
||||
| ---------- because of this check
|
||||
|
|
@ -199,7 +191,7 @@ LL | z.unwrap();
|
|||
| ^^^^^^^^^^
|
||||
|
||||
error: called `unwrap_err` on `z` after checking its variant with `is_err`
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:109:9
|
||||
--> tests/ui/checked_unwrap/complex_conditionals.rs:85:9
|
||||
|
|
||||
LL | if x.is_ok() || !(y.is_ok() && z.is_err()) {
|
||||
| ---------- the check is happening here
|
||||
|
|
|
|||
|
|
@ -1,19 +1,14 @@
|
|||
#![deny(clippy::panicking_unwrap, clippy::unnecessary_unwrap)]
|
||||
#![allow(
|
||||
clippy::if_same_then_else,
|
||||
clippy::branches_sharing_code,
|
||||
clippy::unnecessary_literal_unwrap
|
||||
)]
|
||||
//@no-rustfix: has placeholders
|
||||
#![warn(clippy::panicking_unwrap, clippy::unnecessary_unwrap)]
|
||||
#![expect(clippy::branches_sharing_code, clippy::unnecessary_literal_unwrap)]
|
||||
|
||||
fn test_nested() {
|
||||
fn nested() {
|
||||
let x = Some(());
|
||||
if x.is_some() {
|
||||
// unnecessary
|
||||
x.unwrap();
|
||||
//~^ unnecessary_unwrap
|
||||
} else {
|
||||
// will panic
|
||||
x.unwrap();
|
||||
//~^ panicking_unwrap
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,20 +1,16 @@
|
|||
error: called `unwrap` on `x` after checking its variant with `is_some`
|
||||
--> tests/ui/checked_unwrap/complex_conditionals_nested.rs:13:13
|
||||
--> tests/ui/checked_unwrap/complex_conditionals_nested.rs:9:13
|
||||
|
|
||||
LL | if x.is_some() {
|
||||
| -------------- help: try: `if let Some(<item>) = x`
|
||||
LL | // unnecessary
|
||||
LL | x.unwrap();
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> tests/ui/checked_unwrap/complex_conditionals_nested.rs:1:35
|
||||
|
|
||||
LL | #![deny(clippy::panicking_unwrap, clippy::unnecessary_unwrap)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: `-D clippy::unnecessary-unwrap` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::unnecessary_unwrap)]`
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/complex_conditionals_nested.rs:17:13
|
||||
--> tests/ui/checked_unwrap/complex_conditionals_nested.rs:12:13
|
||||
|
|
||||
LL | if x.is_some() {
|
||||
| ----------- because of this check
|
||||
|
|
@ -22,11 +18,8 @@ LL | if x.is_some() {
|
|||
LL | x.unwrap();
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> tests/ui/checked_unwrap/complex_conditionals_nested.rs:1:9
|
||||
|
|
||||
LL | #![deny(clippy::panicking_unwrap, clippy::unnecessary_unwrap)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: `-D clippy::panicking-unwrap` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::panicking_unwrap)]`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
//@require-annotations-for-level: ERROR
|
||||
#![deny(clippy::unnecessary_unwrap)]
|
||||
#![warn(clippy::unnecessary_unwrap)]
|
||||
|
||||
#[clippy::msrv = "1.85"]
|
||||
fn if_let_chains_unsupported(a: Option<u32>, b: Option<u32>) {
|
||||
|
|
|
|||
|
|
@ -8,11 +8,8 @@ LL | println!("the value of a is {}", a.unwrap());
|
|||
| ^^^^^^^^^^
|
||||
|
|
||||
= help: try using `match`
|
||||
note: the lint level is defined here
|
||||
--> tests/ui/checked_unwrap/if_let_chains.rs:2:9
|
||||
|
|
||||
LL | #![deny(clippy::unnecessary_unwrap)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: `-D clippy::unnecessary-unwrap` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::unnecessary_unwrap)]`
|
||||
|
||||
error: called `unwrap` on `a` after checking its variant with `is_none`
|
||||
--> tests/ui/checked_unwrap/if_let_chains.rs:20:42
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
//@no-rustfix: has placeholders
|
||||
#![deny(clippy::panicking_unwrap, clippy::unnecessary_unwrap)]
|
||||
#![allow(
|
||||
#![warn(clippy::panicking_unwrap, clippy::unnecessary_unwrap)]
|
||||
#![expect(
|
||||
clippy::if_same_then_else,
|
||||
clippy::branches_sharing_code,
|
||||
clippy::unnecessary_literal_unwrap
|
||||
|
|
@ -9,7 +9,6 @@
|
|||
macro_rules! m {
|
||||
($a:expr) => {
|
||||
if $a.is_some() {
|
||||
// unnecessary
|
||||
$a.unwrap();
|
||||
//~^ unnecessary_unwrap
|
||||
}
|
||||
|
|
@ -43,90 +42,71 @@ macro_rules! checks_some {
|
|||
fn main() {
|
||||
let x = Some(());
|
||||
if x.is_some() {
|
||||
// unnecessary
|
||||
x.unwrap();
|
||||
//~^ unnecessary_unwrap
|
||||
|
||||
// unnecessary
|
||||
x.expect("an error message");
|
||||
//~^ unnecessary_unwrap
|
||||
} else {
|
||||
// will panic
|
||||
x.unwrap();
|
||||
//~^ panicking_unwrap
|
||||
|
||||
// will panic
|
||||
x.expect("an error message");
|
||||
//~^ panicking_unwrap
|
||||
}
|
||||
if x.is_none() {
|
||||
// will panic
|
||||
x.unwrap();
|
||||
//~^ panicking_unwrap
|
||||
} else {
|
||||
// unnecessary
|
||||
x.unwrap();
|
||||
//~^ unnecessary_unwrap
|
||||
}
|
||||
m!(x);
|
||||
// ok
|
||||
checks_in_param!(x.is_some(), x.unwrap());
|
||||
// ok
|
||||
checks_unwrap!(x, x.unwrap());
|
||||
// ok
|
||||
checks_some!(x.is_some(), x);
|
||||
let mut x: Result<(), ()> = Ok(());
|
||||
if x.is_ok() {
|
||||
// unnecessary
|
||||
x.unwrap();
|
||||
//~^ unnecessary_unwrap
|
||||
|
||||
// unnecessary
|
||||
x.expect("an error message");
|
||||
//~^ unnecessary_unwrap
|
||||
|
||||
// will panic
|
||||
x.unwrap_err();
|
||||
//~^ panicking_unwrap
|
||||
} else {
|
||||
// will panic
|
||||
x.unwrap();
|
||||
//~^ panicking_unwrap
|
||||
|
||||
// will panic
|
||||
x.expect("an error message");
|
||||
//~^ panicking_unwrap
|
||||
|
||||
// unnecessary
|
||||
x.unwrap_err();
|
||||
//~^ unnecessary_unwrap
|
||||
}
|
||||
if x.is_err() {
|
||||
// will panic
|
||||
x.unwrap();
|
||||
//~^ panicking_unwrap
|
||||
|
||||
// unnecessary
|
||||
x.unwrap_err();
|
||||
//~^ unnecessary_unwrap
|
||||
} else {
|
||||
// unnecessary
|
||||
x.unwrap();
|
||||
//~^ unnecessary_unwrap
|
||||
|
||||
// will panic
|
||||
x.unwrap_err();
|
||||
//~^ panicking_unwrap
|
||||
}
|
||||
if x.is_ok() {
|
||||
x = Err(());
|
||||
// not unnecessary because of mutation of x
|
||||
// not unnecessary because of mutation of `x`
|
||||
// it will always panic but the lint is not smart enough to see this (it only
|
||||
// checks if conditions).
|
||||
x.unwrap();
|
||||
} else {
|
||||
x = Ok(());
|
||||
// not unnecessary because of mutation of x
|
||||
// not unnecessary because of mutation of `x`
|
||||
// it will always panic but the lint is not smart enough to see this (it
|
||||
// only checks if conditions).
|
||||
x.unwrap_err();
|
||||
|
|
@ -175,13 +155,11 @@ fn issue11371() {
|
|||
//~^ panicking_unwrap
|
||||
}
|
||||
|
||||
// This should not lint. Statics are, at the time of writing, not linted on anyway,
|
||||
// but if at some point they are supported by this lint, it should correctly see that
|
||||
// `X` is being mutated and not suggest `if let Some(..) = X {}`
|
||||
// This should not lint and suggest `if let Some(..) = X {}`, as `X` is being mutated
|
||||
static mut X: Option<i32> = Some(123);
|
||||
unsafe {
|
||||
#[expect(static_mut_refs)]
|
||||
if X.is_some() {
|
||||
//~^ ERROR: creating a shared reference
|
||||
X = None;
|
||||
X.unwrap();
|
||||
}
|
||||
|
|
@ -299,17 +277,13 @@ fn check_expect() {
|
|||
let x = Some(());
|
||||
if x.is_some() {
|
||||
#[expect(clippy::unnecessary_unwrap)]
|
||||
// unnecessary
|
||||
x.unwrap();
|
||||
#[expect(clippy::unnecessary_unwrap)]
|
||||
// unnecessary
|
||||
x.expect("an error message");
|
||||
} else {
|
||||
#[expect(clippy::panicking_unwrap)]
|
||||
// will panic
|
||||
x.unwrap();
|
||||
#[expect(clippy::panicking_unwrap)]
|
||||
// will panic
|
||||
x.expect("an error message");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,44 +1,37 @@
|
|||
error: called `unwrap` on `x` after checking its variant with `is_some`
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:47:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:45:9
|
||||
|
|
||||
LL | if x.is_some() {
|
||||
| -------------- help: try: `if let Some(<item>) = x`
|
||||
LL | // unnecessary
|
||||
LL | x.unwrap();
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:2:35
|
||||
|
|
||||
LL | #![deny(clippy::panicking_unwrap, clippy::unnecessary_unwrap)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: `-D clippy::unnecessary-unwrap` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::unnecessary_unwrap)]`
|
||||
|
||||
error: called `expect` on `x` after checking its variant with `is_some`
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:48:9
|
||||
|
|
||||
LL | if x.is_some() {
|
||||
| -------------- help: try: `if let Some(<item>) = x`
|
||||
...
|
||||
LL | x.expect("an error message");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:51:9
|
||||
|
|
||||
LL | if x.is_some() {
|
||||
| -------------- help: try: `if let Some(<item>) = x`
|
||||
...
|
||||
LL | x.expect("an error message");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:55:9
|
||||
|
|
||||
LL | if x.is_some() {
|
||||
| ----------- because of this check
|
||||
...
|
||||
LL | x.unwrap();
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:2:9
|
||||
|
|
||||
LL | #![deny(clippy::panicking_unwrap, clippy::unnecessary_unwrap)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: `-D clippy::panicking-unwrap` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::panicking_unwrap)]`
|
||||
|
||||
error: this call to `expect()` will always panic
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:59:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:54:9
|
||||
|
|
||||
LL | if x.is_some() {
|
||||
| ----------- because of this check
|
||||
|
|
@ -47,16 +40,15 @@ LL | x.expect("an error message");
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:64:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:58:9
|
||||
|
|
||||
LL | if x.is_none() {
|
||||
| ----------- because of this check
|
||||
LL | // will panic
|
||||
LL | x.unwrap();
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: called `unwrap` on `x` after checking its variant with `is_none`
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:68:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:61:9
|
||||
|
|
||||
LL | if x.is_none() {
|
||||
| -------------- help: try: `if let Some(<item>) = x`
|
||||
|
|
@ -65,11 +57,10 @@ LL | x.unwrap();
|
|||
| ^^^^^^^^^^
|
||||
|
||||
error: called `unwrap` on `x` after checking its variant with `is_some`
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:13:13
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:12:13
|
||||
|
|
||||
LL | if $a.is_some() {
|
||||
| --------------- help: try: `if let Some(<item>) = x`
|
||||
LL | // unnecessary
|
||||
LL | $a.unwrap();
|
||||
| ^^^^^^^^^^^
|
||||
...
|
||||
|
|
@ -79,16 +70,15 @@ LL | m!(x);
|
|||
= note: this error originates in the macro `m` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: called `unwrap` on `x` after checking its variant with `is_ok`
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:81:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:70:9
|
||||
|
|
||||
LL | if x.is_ok() {
|
||||
| ------------ help: try: `if let Ok(<item>) = x`
|
||||
LL | // unnecessary
|
||||
LL | x.unwrap();
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: called `expect` on `x` after checking its variant with `is_ok`
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:85:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:73:9
|
||||
|
|
||||
LL | if x.is_ok() {
|
||||
| ------------ help: try: `if let Ok(<item>) = x`
|
||||
|
|
@ -97,7 +87,7 @@ LL | x.expect("an error message");
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this call to `unwrap_err()` will always panic
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:89:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:76:9
|
||||
|
|
||||
LL | if x.is_ok() {
|
||||
| --------- because of this check
|
||||
|
|
@ -106,7 +96,7 @@ LL | x.unwrap_err();
|
|||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:93:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:79:9
|
||||
|
|
||||
LL | if x.is_ok() {
|
||||
| --------- because of this check
|
||||
|
|
@ -115,7 +105,7 @@ LL | x.unwrap();
|
|||
| ^^^^^^^^^^
|
||||
|
||||
error: this call to `expect()` will always panic
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:97:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:82:9
|
||||
|
|
||||
LL | if x.is_ok() {
|
||||
| --------- because of this check
|
||||
|
|
@ -124,7 +114,7 @@ LL | x.expect("an error message");
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: called `unwrap_err` on `x` after checking its variant with `is_ok`
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:101:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:85:9
|
||||
|
|
||||
LL | if x.is_ok() {
|
||||
| ------------ help: try: `if let Err(<item>) = x`
|
||||
|
|
@ -133,16 +123,15 @@ LL | x.unwrap_err();
|
|||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:106:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:89:9
|
||||
|
|
||||
LL | if x.is_err() {
|
||||
| ---------- because of this check
|
||||
LL | // will panic
|
||||
LL | x.unwrap();
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: called `unwrap_err` on `x` after checking its variant with `is_err`
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:110:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:92:9
|
||||
|
|
||||
LL | if x.is_err() {
|
||||
| ------------- help: try: `if let Err(<item>) = x`
|
||||
|
|
@ -151,7 +140,7 @@ LL | x.unwrap_err();
|
|||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: called `unwrap` on `x` after checking its variant with `is_err`
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:114:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:95:9
|
||||
|
|
||||
LL | if x.is_err() {
|
||||
| ------------- help: try: `if let Ok(<item>) = x`
|
||||
|
|
@ -160,7 +149,7 @@ LL | x.unwrap();
|
|||
| ^^^^^^^^^^
|
||||
|
||||
error: this call to `unwrap_err()` will always panic
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:118:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:98:9
|
||||
|
|
||||
LL | if x.is_err() {
|
||||
| ---------- because of this check
|
||||
|
|
@ -169,7 +158,7 @@ LL | x.unwrap_err();
|
|||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: called `unwrap` on `option` after checking its variant with `is_some`
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:143:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:123:9
|
||||
|
|
||||
LL | if option.is_some() {
|
||||
| ------------------- help: try: `if let Some(<item>) = &option`
|
||||
|
|
@ -177,7 +166,7 @@ LL | option.as_ref().unwrap();
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:146:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:126:9
|
||||
|
|
||||
LL | if option.is_some() {
|
||||
| ---------------- because of this check
|
||||
|
|
@ -186,7 +175,7 @@ LL | option.as_ref().unwrap();
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: called `unwrap` on `result` after checking its variant with `is_ok`
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:153:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:133:9
|
||||
|
|
||||
LL | if result.is_ok() {
|
||||
| ----------------- help: try: `if let Ok(<item>) = &result`
|
||||
|
|
@ -194,7 +183,7 @@ LL | result.as_ref().unwrap();
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:156:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:136:9
|
||||
|
|
||||
LL | if result.is_ok() {
|
||||
| -------------- because of this check
|
||||
|
|
@ -203,7 +192,7 @@ LL | result.as_ref().unwrap();
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: called `unwrap` on `option` after checking its variant with `is_some`
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:162:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:142:9
|
||||
|
|
||||
LL | if option.is_some() {
|
||||
| ------------------- help: try: `if let Some(<item>) = &mut option`
|
||||
|
|
@ -211,7 +200,7 @@ LL | option.as_mut().unwrap();
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:165:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:145:9
|
||||
|
|
||||
LL | if option.is_some() {
|
||||
| ---------------- because of this check
|
||||
|
|
@ -220,7 +209,7 @@ LL | option.as_mut().unwrap();
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: called `unwrap` on `result` after checking its variant with `is_ok`
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:171:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:151:9
|
||||
|
|
||||
LL | if result.is_ok() {
|
||||
| ----------------- help: try: `if let Ok(<item>) = &mut result`
|
||||
|
|
@ -228,7 +217,7 @@ LL | result.as_mut().unwrap();
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:174:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:154:9
|
||||
|
|
||||
LL | if result.is_ok() {
|
||||
| -------------- because of this check
|
||||
|
|
@ -237,7 +226,7 @@ LL | result.as_mut().unwrap();
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: called `unwrap` on `option` after checking its variant with `is_some`
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:205:17
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:183:17
|
||||
|
|
||||
LL | if option.is_some() {
|
||||
| ------------------- help: try: `if let Some(<item>) = &option`
|
||||
|
|
@ -245,7 +234,7 @@ LL | let _ = option.as_ref().unwrap();
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:208:17
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:186:17
|
||||
|
|
||||
LL | if option.is_some() {
|
||||
| ---------------- because of this check
|
||||
|
|
@ -254,7 +243,7 @@ LL | let _ = option.as_ref().unwrap();
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: called `unwrap` on `result` after checking its variant with `is_ok`
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:216:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:194:9
|
||||
|
|
||||
LL | if result.is_ok() {
|
||||
| ----------------- help: try: `if let Ok(<item>) = &result`
|
||||
|
|
@ -263,7 +252,7 @@ LL | result.as_ref().unwrap();
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:220:9
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:198:9
|
||||
|
|
||||
LL | if result.is_ok() {
|
||||
| -------------- because of this check
|
||||
|
|
@ -272,7 +261,7 @@ LL | result.as_ref().unwrap();
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: called `unwrap` on `x` after checking its variant with `is_some`
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:246:17
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:224:17
|
||||
|
|
||||
LL | if x.is_some() {
|
||||
| -------------- help: try: `if let Some(<item>) = x`
|
||||
|
|
@ -280,7 +269,7 @@ LL | _ = x.unwrap();
|
|||
| ^^^^^^^^^^
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:249:17
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:227:17
|
||||
|
|
||||
LL | if x.is_some() {
|
||||
| ----------- because of this check
|
||||
|
|
@ -289,7 +278,7 @@ LL | _ = x.unwrap();
|
|||
| ^^^^^^^^^^
|
||||
|
||||
error: called `unwrap` on `r` after checking its variant with `is_ok`
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:255:17
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:233:17
|
||||
|
|
||||
LL | if r.is_ok() {
|
||||
| ------------ help: try: `if let Ok(<item>) = &r`
|
||||
|
|
@ -297,7 +286,7 @@ LL | _ = r.as_ref().unwrap();
|
|||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:258:17
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:236:17
|
||||
|
|
||||
LL | if r.is_ok() {
|
||||
| --------- because of this check
|
||||
|
|
@ -306,7 +295,7 @@ LL | _ = r.as_ref().unwrap();
|
|||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: called `unwrap` on `x` after checking its variant with `is_some`
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:267:17
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:245:17
|
||||
|
|
||||
LL | if x.is_some() {
|
||||
| -------------- help: try: `if let Some(<item>) = x`
|
||||
|
|
@ -314,7 +303,7 @@ LL | _ = x.unwrap();
|
|||
| ^^^^^^^^^^
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:270:17
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:248:17
|
||||
|
|
||||
LL | if x.is_some() {
|
||||
| ----------- because of this check
|
||||
|
|
@ -323,7 +312,7 @@ LL | _ = x.unwrap();
|
|||
| ^^^^^^^^^^
|
||||
|
||||
error: called `unwrap` on `option` after checking its variant with `is_some`
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:280:26
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:258:26
|
||||
|
|
||||
LL | if option.is_some() {
|
||||
| ------------------- help: try: `if let Some(<item>) = option`
|
||||
|
|
@ -331,7 +320,7 @@ LL | println!("{:?}", option.unwrap());
|
|||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:283:26
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:261:26
|
||||
|
|
||||
LL | if option.is_some() {
|
||||
| ---------------- because of this check
|
||||
|
|
@ -340,7 +329,7 @@ LL | println!("{:?}", option.unwrap());
|
|||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: called `unwrap` on `result` after checking its variant with `is_ok`
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:290:26
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:268:26
|
||||
|
|
||||
LL | if result.is_ok() {
|
||||
| ----------------- help: try: `if let Ok(<item>) = result`
|
||||
|
|
@ -348,7 +337,7 @@ LL | println!("{:?}", result.unwrap());
|
|||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: this call to `unwrap()` will always panic
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:293:26
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:271:26
|
||||
|
|
||||
LL | if result.is_ok() {
|
||||
| -------------- because of this check
|
||||
|
|
@ -356,15 +345,5 @@ LL | if result.is_ok() {
|
|||
LL | println!("{:?}", result.unwrap());
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: creating a shared reference to mutable static
|
||||
--> tests/ui/checked_unwrap/simple_conditionals.rs:183:12
|
||||
|
|
||||
LL | if X.is_some() {
|
||||
| ^^^^^^^^^^^ shared reference to mutable static
|
||||
|
|
||||
= note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
|
||||
= note: shared references to mutable statics are dangerous; it's undefined behavior if the static is mutated or if a mutable reference is created for it while the shared reference lives
|
||||
= note: `#[deny(static_mut_refs)]` (part of `#[deny(rust_2024_compatibility)]`) on by default
|
||||
|
||||
error: aborting due to 40 previous errors
|
||||
error: aborting due to 39 previous errors
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue