From 113018a62c5c82dfa895ec5ad5dc606bafec5927 Mon Sep 17 00:00:00 2001 From: alexion Date: Fri, 18 Sep 2026 21:14:00 -0400 Subject: [PATCH] feat(xatu): reject files with parse errors --- src/status/status.rs | 5 +++++ src/xatu/xatu.rs | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/src/status/status.rs b/src/status/status.rs index 3bccc12..8f21670 100644 --- a/src/status/status.rs +++ b/src/status/status.rs @@ -10,6 +10,7 @@ pub trait ResultExt { #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum Code { InvalidArgument, + FailedPrecondition, NotFound, PermissionDenied, Internal, @@ -39,6 +40,10 @@ impl Status { Self::new(Code::InvalidArgument, message) } + pub fn failed_precondition(message: impl Into) -> Self { + Self::new(Code::FailedPrecondition, message) + } + pub fn permission_denied(message: impl Into) -> Self { Self::new(Code::PermissionDenied, message) } diff --git a/src/xatu/xatu.rs b/src/xatu/xatu.rs index 21fa3ad..b48ed5c 100644 --- a/src/xatu/xatu.rs +++ b/src/xatu/xatu.rs @@ -13,6 +13,13 @@ pub fn run(files: Vec) -> status::Result<()> { let file = store.get(file_id); let parsed = parser::parse_file(file_id, &file.source); + if !parsed.errors.is_empty() { + return Err(status::Status::failed_precondition(format!( + "failed to parse {}", + file.path.display() + ))); + } + for diagnostic in rules::run_rules(&parsed) { println!( "{}:{}..{}: {}: {}",