Skip to main content

regast_syntax/print/
mod.rs

1mod dot;
2mod json;
3mod sexpr;
4
5#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
6pub enum JsonShape {
7    #[default]
8    Tree,
9    Arena,
10}
11
12pub(super) fn kind_name(kind: &crate::AstKind) -> &'static str {
13    match kind {
14        crate::AstKind::Empty => "empty",
15        crate::AstKind::Anchor { .. } => "anchor",
16        crate::AstKind::Literal { .. } => "literal",
17        crate::AstKind::Dot => "dot",
18        crate::AstKind::Class { .. } => "class",
19        crate::AstKind::Group { .. } => "group",
20        crate::AstKind::Alt { .. } => "alt",
21        crate::AstKind::Concat { .. } => "concat",
22        crate::AstKind::Repeat { .. } => "repeat",
23    }
24}
25
26pub(super) fn rep_name(kind: crate::RepKind) -> String {
27    match kind {
28        crate::RepKind::ZeroOrOne => "zero_or_one".into(),
29        crate::RepKind::ZeroOrMore => "zero_or_more".into(),
30        crate::RepKind::OneOrMore => "one_or_more".into(),
31        crate::RepKind::Range { min, max } => max.map_or_else(
32            || format!("range_{min}_unbounded"),
33            |max| format!("range_{min}_{max}"),
34        ),
35    }
36}