use pedant_types::SourceSpan;
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub(super) struct PromotionSite {
pub(super) unit: usize,
pub(super) file: usize,
pub(super) line: u32,
pub(super) column: u32,
}
impl PromotionSite {
pub(super) fn new(unit: usize, file: usize, span: &SourceSpan) -> Self {
Self {
unit,
file,
line: span.start().line(),
column: span.start().column(),
}
}
}
pub(super) struct Promoted {
pub(super) candidates: Box<[usize]>,
pub(super) enumerated: bool,
}
pub(super) trait Promotion {
fn promote(&self, site: PromotionSite) -> Option<Promoted>;
}
pub(super) struct NoPromotion;
impl Promotion for NoPromotion {
fn promote(&self, _site: PromotionSite) -> Option<Promoted> {
None
}
}