use super::node_id::NodeId;
use super::reference::Reference;
use super::types::{Ident, Literal, NodeKindHint};
use crate::constraint::Expression;
#[derive(Debug, Clone, PartialEq)]
pub enum NodeKind {
Scalar { name: Ident },
Array { name: Ident, length: Expression },
Matrix {
name: Ident,
rows: Reference,
cols: Reference,
},
Tuple { elements: Vec<NodeId> },
Repeat {
count: Expression,
index_var: Option<Ident>,
body: Vec<NodeId>,
},
Section {
header: Option<NodeId>,
body: Vec<NodeId>,
},
Sequence { children: Vec<NodeId> },
Choice {
tag: Reference,
variants: Vec<(Literal, Vec<NodeId>)>,
},
Hole { expected_kind: Option<NodeKindHint> },
}