diff --git a/clippy_lints/src/missing_inline.rs b/clippy_lints/src/missing_inline.rs index 5a5025973b5b..804ef5d8949a 100644 --- a/clippy_lints/src/missing_inline.rs +++ b/clippy_lints/src/missing_inline.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint; +use clippy_utils::fulfill_or_allowed; use rustc_attr_data_structures::{AttributeKind, find_attr}; use rustc_hir::def_id::DefId; use rustc_hir::{self as hir, Attribute}; @@ -88,7 +89,14 @@ declare_lint_pass!(MissingInline => [MISSING_INLINE_IN_PUBLIC_ITEMS]); impl<'tcx> LateLintPass<'tcx> for MissingInline { fn check_item(&mut self, cx: &LateContext<'tcx>, it: &'tcx hir::Item<'_>) { - if it.span.in_external_macro(cx.sess().source_map()) || is_executable_or_proc_macro(cx) { + if it.span.in_external_macro(cx.sess().source_map()) { + return; + } + + if is_executable_or_proc_macro(cx) + // Allow the lint if it is expected, when building with `--test` + && !(cx.sess().is_test_crate() && fulfill_or_allowed(cx, MISSING_INLINE_IN_PUBLIC_ITEMS, [it.hir_id()])) + { return; } diff --git a/tests/ui/missing_inline_test_crate.rs b/tests/ui/missing_inline_test_crate.rs new file mode 100644 index 000000000000..d7fb5ae2283f --- /dev/null +++ b/tests/ui/missing_inline_test_crate.rs @@ -0,0 +1,8 @@ +//@compile-flags: --test +//@check-pass +#![warn(clippy::missing_inline_in_public_items)] + +#[expect(clippy::missing_inline_in_public_items)] +pub fn foo() -> u32 { + 0 +}