From efcd91aca1a74715d690312c828984533446c631 Mon Sep 17 00:00:00 2001 From: alexion Date: Sat, 19 Sep 2026 20:14:49 -0400 Subject: [PATCH] refactor(xatu): retain node parsing scaffolding --- Cargo.lock | 1 + src/xatu/BUILD | 1 + src/xatu/Cargo.toml | 1 + src/xatu/ast.rs | 46 +++++++++++++++ src/xatu/parser.rs | 133 +++++++++++++++++++++++++++++++++++++++++--- src/xatu/rules.rs | 9 ++- 6 files changed, 181 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 50f9989..bedb295 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -401,6 +401,7 @@ dependencies = [ "googletest", "monorepo", "rnix", + "rowan", "status", ] diff --git a/src/xatu/BUILD b/src/xatu/BUILD index 3466168..4a72c08 100644 --- a/src/xatu/BUILD +++ b/src/xatu/BUILD @@ -14,6 +14,7 @@ rust_library( deps = [ "//src/status:status", "//third_party/crates:rnix", + "//third_party/crates/rowan-0.16.1:rowan", ], ) diff --git a/src/xatu/Cargo.toml b/src/xatu/Cargo.toml index ce0e581..d12e186 100644 --- a/src/xatu/Cargo.toml +++ b/src/xatu/Cargo.toml @@ -14,6 +14,7 @@ path = "xatu_main.rs" clap = { workspace = true, features = ["derive"] } monorepo = { workspace = true } rnix = { workspace = true } +rowan = { workspace = true } status = { workspace = true } [dev-dependencies] diff --git a/src/xatu/ast.rs b/src/xatu/ast.rs index 8fb0c90..1addbf4 100644 --- a/src/xatu/ast.rs +++ b/src/xatu/ast.rs @@ -3,10 +3,17 @@ use crate::FileId; #[derive(Debug)] pub struct ParsedFile { pub file_id: FileId, + pub nodes: Vec, pub tokens: 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, @@ -19,6 +26,45 @@ impl std::fmt::Display for SourceRange { } } +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum NodeData { + Apply(Apply), + LetIn(LetIn), + 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