| use rustc_hir::Target; |
| use rustc_hir::attrs::AttributeKind; |
| use rustc_span::{Span, Symbol, sym}; |
| |
| use crate::attributes::{NoArgsAttributeParser, OnDuplicate}; |
| use crate::context::Stage; |
| use crate::target_checking::AllowedTargets; |
| use crate::target_checking::Policy::{Allow, Warn}; |
| |
| pub(crate) struct NonExhaustiveParser; |
| |
| impl<S: Stage> NoArgsAttributeParser<S> for NonExhaustiveParser { |
| const PATH: &[Symbol] = &[sym::non_exhaustive]; |
| const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Warn; |
| const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[ |
| Allow(Target::Enum), |
| Allow(Target::Struct), |
| Allow(Target::Variant), |
| Warn(Target::Field), |
| Warn(Target::Arm), |
| Warn(Target::MacroDef), |
| Warn(Target::MacroCall), |
| ]); |
| const CREATE: fn(Span) -> AttributeKind = AttributeKind::NonExhaustive; |
| } |