use rustc_data_structures::fingerprint::Fingerprint; use rustc_macros::HashStable_Generic; use rustc_span::Span; use crate::{AttrPath, HirId, Target}; #[derive(Debug)] pub struct DelayedLints { pub lints: Box<[DelayedLint]>, // Only present when the crate hash is needed. pub opt_hash: Option, } /// During ast lowering, no lints can be emitted. /// That is because lints attach to nodes either in the AST, or on the built HIR. /// When attached to AST nodes, they're emitted just before building HIR, /// and then there's a gap where no lints can be emitted until HIR is done. /// The variants in this enum represent lints that are temporarily stashed during /// AST lowering to be emitted once HIR is built. #[derive(Clone, Debug, HashStable_Generic)] pub enum DelayedLint { AttributeParsing(AttributeLint), } #[derive(Clone, Debug, HashStable_Generic)] pub struct AttributeLint { pub id: Id, pub span: Span, pub kind: AttributeLintKind, } #[derive(Clone, Debug, HashStable_Generic)] pub enum AttributeLintKind { /// Copy of `IllFormedAttributeInput` /// specifically for the `invalid_macro_export_arguments` lint until that is removed, /// see InvalidMacroExportArguments { suggestions: Vec, }, UnusedDuplicate { this: Span, other: Span, warning: bool, }, IllFormedAttributeInput { suggestions: Vec, }, EmptyAttribute { first_span: Span, attr_path: AttrPath, valid_without_list: bool, }, InvalidTarget { name: AttrPath, target: Target, applied: Vec, only: &'static str, }, InvalidStyle { name: AttrPath, is_used_as_inner: bool, target: Target, target_span: Span, }, }