feat(natu): report expected let order
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user