valkyrie-ast 0.1.4

Strong typed abstract syntax tree of valkyrie language
Documentation
use super::*;

impl Default for ExpressionBody {
    fn default() -> Self {
        Self::Placeholder
    }
}

#[cfg(feature = "pretty-print")]
impl PrettyPrint for ExpressionNode {
    fn pretty(&self, theme: &PrettyProvider) -> PrettyTree {
        self.body.pretty(theme)
    }
}

#[cfg(feature = "pretty-print")]
impl PrettyPrint for ExpressionBody {
    fn pretty(&self, theme: &PrettyProvider) -> PrettyTree {
        match self {
            ExpressionBody::Placeholder => unreachable!(),
            ExpressionBody::Slot(node) => node.pretty(theme),
            ExpressionBody::Symbol(node) => node.pretty(theme),
            ExpressionBody::Number(node) => node.pretty(theme),
            ExpressionBody::Text(node) => node.pretty(theme),
            ExpressionBody::String(node) => node.pretty(theme),
            ExpressionBody::Prefix(node) => node.pretty(theme),
            ExpressionBody::Binary(node) => node.pretty(theme),
            ExpressionBody::Suffix(node) => node.pretty(theme),
            ExpressionBody::Table(node) => node.pretty(theme),
            ExpressionBody::Apply(node) => node.pretty(theme),
            ExpressionBody::ApplyDot(node) => node.pretty(theme),
            ExpressionBody::LambdaCall(node) => node.pretty(theme),
            ExpressionBody::LambdaDot(node) => node.pretty(theme),
            ExpressionBody::Subscript(node) => node.pretty(theme),
            ExpressionBody::GenericCall(node) => node.pretty(theme),
            ExpressionBody::New(node) => node.pretty(theme),
            ExpressionBody::Resume(node) => node.pretty(theme),
            ExpressionBody::If(node) => node.pretty(theme),
            ExpressionBody::Switch(node) => node.pretty(theme),
        }
    }
}

impl ExpressionBody {
    pub fn span(&self) -> Range<u32> {
        match self {
            ExpressionBody::Placeholder => unreachable!(),
            ExpressionBody::Slot(node) => node.span.clone(),
            ExpressionBody::Symbol(node) => node.span.clone(),
            ExpressionBody::Number(node) => node.span.clone(),
            ExpressionBody::Text(node) => node.span.clone(),
            ExpressionBody::String(node) => node.span.clone(),
            ExpressionBody::New(node) => node.span.clone(),
            ExpressionBody::Prefix(node) => node.span.clone(),
            ExpressionBody::Binary(node) => node.span.clone(),
            ExpressionBody::Suffix(node) => node.span.clone(),
            ExpressionBody::Table(node) => node.span.clone(),
            ExpressionBody::Apply(node) => node.span.clone(),
            ExpressionBody::ApplyDot(node) => node.span.clone(),
            ExpressionBody::LambdaCall(node) => node.span.clone(),
            ExpressionBody::LambdaDot(node) => node.span.clone(),
            ExpressionBody::Subscript(node) => node.span.clone(),
            ExpressionBody::GenericCall(node) => node.span.clone(),
            ExpressionBody::Resume(node) => node.span.clone(),
            ExpressionBody::If(node) => node.span.clone(),
            ExpressionBody::Switch(node) => node.span.clone(),
        }
    }
}