diff options
| author | Samuel Tardieu <sam@rfc1149.net> | 2025-05-06 06:33:10 +0000 |
|---|---|---|
| committer | Josh Stone <jistone@redhat.com> | 2025-06-20 10:01:19 -0700 |
| commit | 569e9ec62857179115cf5b4036bf726cd54374e8 (patch) | |
| tree | b9c8b78197bbe4d16dcef59a3adfad3355417ce8 | |
| parent | 9fec7f0c948b5e14efcfde9f28b38a3195a52552 (diff) | |
| download | rust-569e9ec62857179115cf5b4036bf726cd54374e8.tar.gz rust-569e9ec62857179115cf5b4036bf726cd54374e8.zip | |
Fix `collapsible_if` FP on block stmt before expr (rust-lang/rust-clippy#14730)
Closes rust-lang/rust-clippy#14722 changelog: [`collapsible_if`] fix FP on block stmt before expr
| -rw-r--r-- | src/tools/clippy/clippy_lints/src/collapsible_if.rs | 15 | ||||
| -rw-r--r-- | src/tools/clippy/tests/ui/collapsible_if.fixed | 11 | ||||
| -rw-r--r-- | src/tools/clippy/tests/ui/collapsible_if.rs | 11 |
3 files changed, 29 insertions, 8 deletions
diff --git a/src/tools/clippy/clippy_lints/src/collapsible_if.rs b/src/tools/clippy/clippy_lints/src/collapsible_if.rs index 20fae8a6775..f8f9d228813 100644 --- a/src/tools/clippy/clippy_lints/src/collapsible_if.rs +++ b/src/tools/clippy/clippy_lints/src/collapsible_if.rs @@ -3,7 +3,7 @@ use clippy_utils::diagnostics::{span_lint_and_sugg, span_lint_and_then}; use clippy_utils::source::{IntoSpan as _, SpanRangeExt, snippet, snippet_block, snippet_block_with_applicability}; use rustc_ast::BinOpKind; use rustc_errors::Applicability; -use rustc_hir::{Block, Expr, ExprKind, StmtKind}; +use rustc_hir::{Block, Expr, ExprKind, Stmt, StmtKind}; use rustc_lint::{LateContext, LateLintPass}; use rustc_middle::ty::TyCtxt; use rustc_session::impl_lint_pass; @@ -202,13 +202,12 @@ fn block_starts_with_comment(cx: &LateContext<'_>, block: &Block<'_>) -> bool { fn expr_block<'tcx>(block: &Block<'tcx>) -> Option<&'tcx Expr<'tcx>> { match block.stmts { [] => block.expr, - [stmt] => { - if let StmtKind::Semi(expr) = stmt.kind { - Some(expr) - } else { - None - } - }, + [ + Stmt { + kind: StmtKind::Semi(expr), + .. + }, + ] if block.expr.is_none() => Some(expr), _ => None, } } diff --git a/src/tools/clippy/tests/ui/collapsible_if.fixed b/src/tools/clippy/tests/ui/collapsible_if.fixed index e1ceb04f9cb..e216dec484b 100644 --- a/src/tools/clippy/tests/ui/collapsible_if.fixed +++ b/src/tools/clippy/tests/ui/collapsible_if.fixed @@ -162,3 +162,14 @@ fn layout_check() -> u32 { ; 3 //~^^^^^ collapsible_if } + +fn issue14722() { + let x = if true { + Some(1) + } else { + if true { + println!("Some debug information"); + }; + None + }; +} diff --git a/src/tools/clippy/tests/ui/collapsible_if.rs b/src/tools/clippy/tests/ui/collapsible_if.rs index 0b996dca22e..bd6bc5ff563 100644 --- a/src/tools/clippy/tests/ui/collapsible_if.rs +++ b/src/tools/clippy/tests/ui/collapsible_if.rs @@ -172,3 +172,14 @@ fn layout_check() -> u32 { }; 3 //~^^^^^ collapsible_if } + +fn issue14722() { + let x = if true { + Some(1) + } else { + if true { + println!("Some debug information"); + }; + None + }; +} |
