#![allow(dead_code)] #![warn(clippy::redundant_pub_crate)] mod m1 { fn f() {} pub fn g() {} // private due to m1 pub fn h() {} mod m1_1 { fn f() {} pub fn g() {} // private due to m1_1 and m1 pub fn h() {} } pub mod m1_2 { //:^ private due to m1 fn f() {} pub fn g() {} // private due to m1_2 and m1 pub fn h() {} } pub mod m1_3 { fn f() {} pub fn g() {} // private due to m1 pub fn h() {} } } pub(crate) mod m2 { fn f() {} pub fn g() {} // already crate visible due to m2 pub fn h() {} mod m2_1 { fn f() {} pub fn g() {} // private due to m2_1 pub fn h() {} } pub mod m2_2 { //:^ already crate visible due to m2 fn f() {} pub fn g() {} // already crate visible due to m2_2 and m2 pub fn h() {} } pub mod m2_3 { fn f() {} pub fn g() {} // already crate visible due to m2 pub fn h() {} } } pub mod m3 { fn f() {} pub(crate) fn g() {} // ok: m3 is exported pub fn h() {} mod m3_1 { fn f() {} pub fn g() {} // private due to m3_1 pub fn h() {} } pub(crate) mod m3_2 { //:^ ok fn f() {} pub fn g() {} // already crate visible due to m3_2 pub fn h() {} } pub mod m3_3 { fn f() {} pub(crate) fn g() {} // ok: m3 and m3_3 are exported pub fn h() {} } } mod m4 { fn f() {} pub fn g() {} // private: not re-exported by `pub use m4::*` pub fn h() {} mod m4_1 { fn f() {} pub fn g() {} // private due to m4_1 pub fn h() {} } pub mod m4_2 { //:^ private: not re-exported by `pub use m4::*` fn f() {} pub fn g() {} // private due to m4_2 pub fn h() {} } pub mod m4_3 { fn f() {} pub(crate) fn g() {} // ok: m4_3 is re-exported by `pub use m4::*` pub fn h() {} } } pub use m4::*; mod issue_8732 { #[allow(unused_macros)] macro_rules! some_macro { () => {}; } #[allow(unused_imports)] pub(crate) use some_macro; // ok: macro exports are exempt } fn main() {}