regast-core 0.1.0

Parse-tree matching backends for regast
Documentation
use regast_syntax::{AnchorKind, NodeId};

#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct IrId(pub(crate) u32);

impl IrId {
    #[must_use]
    pub const fn index(self) -> u32 {
        self.0
    }
}

#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct ClassSetId(pub(crate) u32);

#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum Prov {
    Ast(NodeId),
    Synth(NodeId),
}

#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub enum IrKind {
    Zero,
    One,
    Anchor(AnchorKind, Prov),
    Class(ClassSetId, Prov),
    Alt(IrId, IrId, Prov, bool),
    Seq(IrId, IrId, Prov),
    Star(IrId, Prov, bool),
}

impl IrKind {
    #[must_use]
    pub const fn provenance(&self) -> Option<Prov> {
        match self {
            Self::Zero | Self::One => None,
            Self::Anchor(_, prov)
            | Self::Class(_, prov)
            | Self::Alt(_, _, prov, _)
            | Self::Seq(_, _, prov)
            | Self::Star(_, prov, _) => Some(*prov),
        }
    }
}