valkyrie-ast 0.1.12

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

#[cfg(feature = "pretty-print")]
impl PrettyPrint for TupleNode {
    fn pretty(&self, theme: &PrettyProvider) -> PrettyTree {
        match self.kind {
            TupleKind::Tuple => {
                let k = KAndRBracket { head_space: false, bracket_l: "(", bracket_r: ")" };
                k.build(&self.terms, theme, ", ".into(), PrettyTree::text(",").append(PrettyTree::Hardline))
            }
            TupleKind::Set => {
                let k = KAndRBracket { head_space: false, bracket_l: "[", bracket_r: "]" };
                k.build(&self.terms, theme, ", ".into(), PrettyTree::text(",").append(PrettyTree::Hardline))
            }
            TupleKind::Dict => {
                let k = KAndRBracket { head_space: false, bracket_l: "{%", bracket_r: "%}" };
                k.build(&self.terms, theme, ", ".into(), PrettyTree::text(",").append(PrettyTree::Hardline))
            }
        }
    }
}
#[cfg(feature = "lispify")]
impl Lispify for TupleNode {
    type Output = Lisp;

    fn lispify(&self) -> Self::Output {
        Lisp::unit("TupleNode ???")
    }
}

#[cfg(feature = "pretty-print")]
impl PrettyPrint for TupleTermNode {
    fn pretty(&self, theme: &PrettyProvider) -> PrettyTree {
        let mut terms = PrettySequence::new(3);
        terms += match &self.key {
            TupleKeyType::Nothing => return self.value.pretty(theme),
            TupleKeyType::Identifier(node) => node.pretty(theme),
            TupleKeyType::String(node) => theme.number(node.to_string()),
            TupleKeyType::Subscript(node) => node.pretty(theme),
        };
        terms += PrettyTree::text(":");
        terms += self.value.pretty(theme);
        terms.into()
    }
}