use badness::linter::docs::{
demo_diagnostics, explain_rule, render_reference_page, render_rule_doc,
};
use badness::linter::rules::{ALL_RULE_IDS, all_rules};
#[test]
fn rule_docs_render() {
for rule in all_rules() {
insta::assert_snapshot!(rule.id().replace('-', "_"), render_rule_doc(rule.as_ref()));
}
}
#[test]
fn every_rule_is_documented() {
for rule in all_rules() {
assert!(
!rule.description().trim().is_empty(),
"rule `{}` has no description",
rule.id(),
);
assert!(
!rule.examples().is_empty(),
"rule `{}` has no examples",
rule.id(),
);
}
}
#[test]
fn documented_examples_actually_trigger() {
for rule in all_rules() {
for example in rule.examples() {
let diagnostics = demo_diagnostics(example.source);
assert!(
diagnostics.iter().any(|d| d.rule == rule.id()),
"example for rule `{}` produced no finding of that rule:\n{}",
rule.id(),
example.source,
);
}
}
}
#[test]
fn explain_resolves_every_rule() {
for id in ALL_RULE_IDS {
let doc = explain_rule(id).unwrap_or_else(|| panic!("no explanation for `{id}`"));
assert!(doc.contains(id), "explanation for `{id}` omits its id");
}
assert!(explain_rule("no-such-rule").is_none());
}
#[test]
fn reference_page_is_committed() {
let committed = std::fs::read_to_string("docs/src/reference/linter-rules.md")
.expect("linter-rules.md should exist");
assert_eq!(
committed,
render_reference_page(),
"docs/src/reference/linter-rules.md is stale; run `cargo run --example docgen`",
);
}