From c27f52d611928ed0bb11665e03de21484c2061aa Mon Sep 17 00:00:00 2001 From: J-ZhengLi Date: Wed, 27 Mar 2024 16:28:15 +0800 Subject: [PATCH] allow [`manual_unwrap_or_default`] in const function --- clippy_lints/src/manual_unwrap_or_default.rs | 4 ++-- tests/ui/manual_unwrap_or_default.fixed | 7 +++++++ tests/ui/manual_unwrap_or_default.rs | 7 +++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/clippy_lints/src/manual_unwrap_or_default.rs b/clippy_lints/src/manual_unwrap_or_default.rs index fc6b0d6f9..8f189cf6e 100644 --- a/clippy_lints/src/manual_unwrap_or_default.rs +++ b/clippy_lints/src/manual_unwrap_or_default.rs @@ -7,9 +7,9 @@ use rustc_session::declare_lint_pass; use rustc_span::sym; use clippy_utils::diagnostics::span_lint_and_sugg; -use clippy_utils::is_default_equivalent; use clippy_utils::source::snippet_opt; use clippy_utils::ty::implements_trait; +use clippy_utils::{in_constant, is_default_equivalent}; declare_clippy_lint! { /// ### What it does @@ -172,7 +172,7 @@ fn handle_if_let<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'tcx>) { impl<'tcx> LateLintPass<'tcx> for ManualUnwrapOrDefault { fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx Expr<'tcx>) { - if expr.span.from_expansion() { + if expr.span.from_expansion() || in_constant(cx, expr.hir_id) { return; } if !handle_match(cx, expr) { diff --git a/tests/ui/manual_unwrap_or_default.fixed b/tests/ui/manual_unwrap_or_default.fixed index b24967242..182c9b317 100644 --- a/tests/ui/manual_unwrap_or_default.fixed +++ b/tests/ui/manual_unwrap_or_default.fixed @@ -26,3 +26,10 @@ unsafe fn no_deref_ptr(a: Option, b: *const Option) -> i32 { _ => 0, } } + +const fn issue_12568(opt: Option) -> bool { + match opt { + Some(s) => s, + None => false, + } +} diff --git a/tests/ui/manual_unwrap_or_default.rs b/tests/ui/manual_unwrap_or_default.rs index ed5e54b4e..e8eaddc1d 100644 --- a/tests/ui/manual_unwrap_or_default.rs +++ b/tests/ui/manual_unwrap_or_default.rs @@ -50,3 +50,10 @@ unsafe fn no_deref_ptr(a: Option, b: *const Option) -> i32 { _ => 0, } } + +const fn issue_12568(opt: Option) -> bool { + match opt { + Some(s) => s, + None => false, + } +}