feat(natu): report expected let order

This commit is contained in:
2026-09-26 23:14:08 -04:00
parent 09a2093f90
commit 90b83d6f5d
4 changed files with 66 additions and 22 deletions

View File

@@ -1,3 +1,5 @@
use std::collections::HashSet;
mod ast;
mod file_store;
mod parser;
@@ -23,7 +25,34 @@ impl Report {
impl std::fmt::Display for Report {
fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let mut reported_let_order_files = HashSet::new();
for diagnostic in &self.diagnostics {
if diagnostic.finding.rule_id == "let_order" {
if !reported_let_order_files.insert(diagnostic.file_id) {
continue;
}
let file = self.files.get(diagnostic.file_id);
writeln!(
formatter,
"{} [let_order] Let bindings must follow dependency order",
file.path.display()
)?;
for finding in self.diagnostics.iter().filter(|candidate| {
candidate.file_id == diagnostic.file_id
&& candidate.finding.rule_id == "let_order"
}) {
let (start, _) = line_range(&file.source, finding.finding.range);
let expected_order =
finding.finding.expected_order.as_ref().expect("let order");
writeln!(formatter, " line {start}: {}", expected_order.join(", "))?;
}
continue;
}
let file = self.files.get(diagnostic.file_id);
let (start, end) = line_range(&file.source, diagnostic.finding.range);
let location = if start == end {