From addcf7ca8e277be3a4478a67cf0edb2ada479d1e Mon Sep 17 00:00:00 2001 From: alexion Date: Sat, 19 Sep 2026 15:17:38 -0400 Subject: [PATCH] feat(xatu): report deprecated toPath calls --- src/xatu/BUILD | 5 +- src/xatu/ast.rs | 53 ++++++++---- src/xatu/file_store.rs | 18 ++-- src/xatu/parser.rs | 109 ++++++++++++++++++------ src/xatu/rules.rs | 31 ++++--- src/xatu/rules/deprecated_to_path.rs | 41 +++++++++ src/xatu/rules/empty_inherit.rs | 1 + src/xatu/testdata/clean.nix | 7 +- src/xatu/testdata/empty_inherit.nix | 1 - src/xatu/testdata/invalid.nix | 3 + src/xatu/testdata/lint_findings.nix | 6 ++ src/xatu/testdata/lint_variants.nix | 5 ++ src/xatu/xatu_test.rs | 121 ++++++++++++++++++++------- 13 files changed, 307 insertions(+), 94 deletions(-) create mode 100644 src/xatu/rules/deprecated_to_path.rs delete mode 100644 src/xatu/testdata/empty_inherit.nix create mode 100644 src/xatu/testdata/lint_findings.nix create mode 100644 src/xatu/testdata/lint_variants.nix diff --git a/src/xatu/BUILD b/src/xatu/BUILD index 3b3550b..dea31a6 100644 --- a/src/xatu/BUILD +++ b/src/xatu/BUILD @@ -8,6 +8,7 @@ rust_library( "file_store.rs", "parser.rs", "rules.rs", + "rules/deprecated_to_path.rs", "rules/empty_inherit.rs", "xatu.rs", ], @@ -29,12 +30,14 @@ rust_test( srcs = ["xatu_test.rs"], data = [ "testdata/clean.nix", - "testdata/empty_inherit.nix", "testdata/invalid.nix", + "testdata/lint_findings.nix", + "testdata/lint_variants.nix", ], deps = [ ":xatu_lib", "//src/status:status", + "//third_party/crates:googletest", ], ) diff --git a/src/xatu/ast.rs b/src/xatu/ast.rs index 3e22150..41472b1 100644 --- a/src/xatu/ast.rs +++ b/src/xatu/ast.rs @@ -1,13 +1,16 @@ use crate::FileId; -#[derive(Debug, Clone, PartialEq, Eq)] -pub struct Inherit { - pub attr_count: usize, +#[derive(Debug)] +pub struct ParsedFile { + pub file_id: FileId, + pub nodes: Vec, + pub errors: Vec, } #[derive(Debug, Clone, PartialEq, Eq)] -pub enum NodeData { - Inherit(Inherit), +pub struct Node { + pub range: SourceRange, + pub data: NodeData, } #[derive(Debug, Clone, Copy, PartialEq, Eq)] @@ -23,9 +26,36 @@ impl std::fmt::Display for SourceRange { } #[derive(Debug, Clone, PartialEq, Eq)] -pub struct Node { - pub range: SourceRange, - pub data: NodeData, +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