lopal_core 0.1.0

Lossless Parser Library. Parses to rowan LSTs.
Documentation
use super::{error::SyntaxError, SyntaxElement};

pub(crate) enum Event<SyntaxKind: SyntaxElement, SyntaxErr: SyntaxError> {
    Start {
        kind: NodeKind<SyntaxKind, SyntaxErr>,
        forward_parent: Option<usize>,
    },
    Finish,
    Eat {
        count: usize,
    },
}

impl<SyntaxKind: SyntaxElement, SyntaxErr: SyntaxError> Event<SyntaxKind, SyntaxErr> {
    pub fn tombstone() -> Self {
        Self::Start {
            kind: NodeKind::Tombstone,
            forward_parent: None,
        }
    }
}

#[derive(Clone, PartialEq, Eq)]
pub(crate) enum NodeKind<SyntaxKind: SyntaxElement, SyntaxErr: SyntaxError> {
    Tombstone,
    Syntax(SyntaxKind),
    Error(SyntaxErr),
}

impl<SyntaxKind: SyntaxElement, SyntaxErr: SyntaxError> NodeKind<SyntaxKind, SyntaxErr> {
    pub fn is_tombstone(&self) -> bool {
        matches!(self, Self::Tombstone)
    }
    pub fn is_syntax(&self) -> bool {
        matches!(self, Self::Syntax(_))
    }
    pub fn is_error(&self) -> bool {
        matches!(self, Self::Error(_))
    }
}