// Test that the `non_exhaustive_omitted_patterns` lint is triggered correctly with variants // marked stable and unstable. #![feature(non_exhaustive_omitted_patterns_lint)] // aux-build:unstable.rs extern crate unstable; use unstable::{OnlyUnstableEnum, OnlyUnstableStruct, UnstableEnum, UnstableStruct}; fn main() { // OK: this matches all the stable variants #[deny(non_exhaustive_omitted_patterns)] match UnstableEnum::Stable { UnstableEnum::Stable => {} UnstableEnum::Stable2 => {} _ => {} } #[deny(non_exhaustive_omitted_patterns)] match UnstableEnum::Stable { //~^ some variants are not matched explicitly UnstableEnum::Stable => {} _ => {} } // Ok: although this is a bit odd, we don't have anything to report // since there is no stable variants and the feature is off #[deny(non_exhaustive_omitted_patterns)] match OnlyUnstableEnum::new() { _ => {} } // Ok: Same as the above enum (no fields can be matched on) #[warn(non_exhaustive_omitted_patterns)] let OnlyUnstableStruct { .. } = OnlyUnstableStruct::new(); #[warn(non_exhaustive_omitted_patterns)] let UnstableStruct { stable, .. } = UnstableStruct::default(); //~^ some fields are not explicitly listed // OK: stable field is matched #[warn(non_exhaustive_omitted_patterns)] let UnstableStruct { stable, stable2, .. } = UnstableStruct::default(); }