From b4c3f0f79b686035b94b8ca3535ff9274f7ef4d6 Mon Sep 17 00:00:00 2001 From: tamaron <tamaron1203@gmail.com> Date: Wed, 18 May 2022 00:37:12 +0900 Subject: [PATCH 1/2] fix --- clippy_lints/src/dbg_macro.rs | 4 ++-- clippy_utils/src/lib.rs | 20 ++++++++++++++++++++ tests/ui/dbg_macro.rs | 12 ++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/clippy_lints/src/dbg_macro.rs b/clippy_lints/src/dbg_macro.rs index a0e5d302633..f99d793c201 100644 --- a/clippy_lints/src/dbg_macro.rs +++ b/clippy_lints/src/dbg_macro.rs @@ -1,7 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; -use clippy_utils::is_in_test_function; use clippy_utils::macros::root_macro_call_first_node; use clippy_utils::source::snippet_with_applicability; +use clippy_utils::{is_in_cfg_test, is_in_test_function}; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; @@ -37,7 +37,7 @@ impl LateLintPass<'_> for DbgMacro { let Some(macro_call) = root_macro_call_first_node(cx, expr) else { return }; if cx.tcx.is_diagnostic_item(sym::dbg_macro, macro_call.def_id) { // we make an exception for test code - if is_in_test_function(cx.tcx, expr.hir_id) { + if is_in_test_function(cx.tcx, expr.hir_id) || is_in_cfg_test(cx.tcx, expr.hir_id) { return; } let mut applicability = Applicability::MachineApplicable; diff --git a/clippy_utils/src/lib.rs b/clippy_utils/src/lib.rs index 25596168d11..b3ecc4255a9 100644 --- a/clippy_utils/src/lib.rs +++ b/clippy_utils/src/lib.rs @@ -2146,6 +2146,26 @@ pub fn is_in_test_function(tcx: TyCtxt<'_>, id: hir::HirId) -> bool { }) } +/// Checks if the item containing the given `HirId` has `#[cfg(test)]` attribute applied +/// +/// Note: Add `// compile-flags: --test` to UI tests with a `#[cfg(test)]` function +pub fn is_in_cfg_test(tcx: TyCtxt<'_>, id: hir::HirId) -> bool { + fn is_cfg_test(attr: &Attribute) -> bool { + if attr.has_name(sym::cfg) + && let Some(items) = attr.meta_item_list() + && items.len() == 1 + && items[0].has_name(sym::test) + { + true + } else { + false + } + } + tcx.hir() + .parent_iter(id) + .any(|(parent_id, _)| tcx.hir().attrs(parent_id).iter().any(is_cfg_test)) +} + /// Checks whether item either has `test` attribute applied, or /// is a module with `test` in its name. /// diff --git a/tests/ui/dbg_macro.rs b/tests/ui/dbg_macro.rs index baf01174b67..25294e8c766 100644 --- a/tests/ui/dbg_macro.rs +++ b/tests/ui/dbg_macro.rs @@ -46,3 +46,15 @@ mod issue7274 { pub fn issue8481() { dbg!(1); } + +#[cfg(test)] +fn foo2() { + dbg!(1); +} + +#[cfg(test)] +mod mod1 { + fn func() { + dbg!(1); + } +} From db41df112aded9ecbbbba421189f28f6eb326554 Mon Sep 17 00:00:00 2001 From: tamaron <tamaron1203@gmail.com> Date: Thu, 19 May 2022 18:58:59 +0900 Subject: [PATCH 2/2] fix --- clippy_utils/src/lib.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/clippy_utils/src/lib.rs b/clippy_utils/src/lib.rs index b3ecc4255a9..8f9e687fb6a 100644 --- a/clippy_utils/src/lib.rs +++ b/clippy_utils/src/lib.rs @@ -2153,8 +2153,8 @@ pub fn is_in_cfg_test(tcx: TyCtxt<'_>, id: hir::HirId) -> bool { fn is_cfg_test(attr: &Attribute) -> bool { if attr.has_name(sym::cfg) && let Some(items) = attr.meta_item_list() - && items.len() == 1 - && items[0].has_name(sym::test) + && let [item] = &*items + && item.has_name(sym::test) { true } else { @@ -2163,7 +2163,8 @@ pub fn is_in_cfg_test(tcx: TyCtxt<'_>, id: hir::HirId) -> bool { } tcx.hir() .parent_iter(id) - .any(|(parent_id, _)| tcx.hir().attrs(parent_id).iter().any(is_cfg_test)) + .flat_map(|(parent_id, _)| tcx.hir().attrs(parent_id)) + .any(is_cfg_test) } /// Checks whether item either has `test` attribute applied, or