use crate::FileId; #[derive(Debug)] pub struct ParsedFile { pub file_id: FileId, pub nodes: Vec, pub errors: Vec, } #[derive(Debug, Clone, PartialEq, Eq)] pub struct Node { pub range: SourceRange, pub data: NodeData, } #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub struct SourceRange { pub start: usize, pub end: usize, } impl std::fmt::Display for SourceRange { fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "{}..{}", self.start, self.end) } } #[derive(Debug, Clone, PartialEq, Eq)] pub enum NodeData { Apply(Apply), Inherit(Inherit), } #[derive(Debug, Clone, PartialEq, Eq)] pub struct Apply { pub function: Expr, } #[derive(Debug, Clone, PartialEq, Eq)] pub enum Expr { Ident(Ident), Select(Box