#![warn(clippy::manual_non_exhaustive)] #![allow(unused)] //@no-rustfix pub mod structs { pub struct S { //~^ manual_non_exhaustive pub a: i32, pub b: i32, _c: (), } // user forgot to remove the private field #[non_exhaustive] pub struct Sp { //~^ manual_non_exhaustive pub a: i32, pub b: i32, _c: (), } // some other fields are private, should be ignored pub struct PrivateFields { a: i32, pub b: i32, _c: (), } pub struct NoUnderscore { //~^ manual_non_exhaustive pub a: i32, pub b: i32, c: (), } // private field is not unit type, should be ignored pub struct NotUnit { pub a: i32, pub b: i32, _c: i32, } // private field is the only field, should be ignored pub struct OnlyMarker { _a: (), } // already non exhaustive and no private fields, should be ignored #[non_exhaustive] pub struct NonExhaustive { pub a: i32, pub b: i32, } } pub mod tuple_structs { pub struct T(pub i32, pub i32, ()); //~^ manual_non_exhaustive // user forgot to remove the private field #[non_exhaustive] pub struct Tp(pub i32, pub i32, ()); //~^ manual_non_exhaustive // some other fields are private, should be ignored pub struct PrivateFields(pub i32, i32, ()); // private field is not unit type, should be ignored pub struct NotUnit(pub i32, pub i32, i32); // private field is the only field, should be ignored pub struct OnlyMarker(()); // already non exhaustive and no private fields, should be ignored #[non_exhaustive] pub struct NonExhaustive(pub i32, pub i32); } mod private { // Don't lint structs that are not actually public as `#[non_exhaustive]` only applies to // external crates. The manual pattern can still be used to get module local non exhaustiveness pub struct NotPublic { pub a: i32, pub b: i32, _c: (), } }