use crate::diagnostic::Diagnostic;
use crate::rule::LintRule;
use mdwright_document::Document;
use mdwright_document::MathError;
pub struct MathUnbalancedEnv;
impl LintRule for MathUnbalancedEnv {
fn name(&self) -> &str {
"math/unbalanced-env"
}
fn description(&self) -> &str {
"LaTeX `\\begin{env}` with no matching `\\end{env}` at the same nesting depth."
}
fn explain(&self) -> &str {
include_str!("explain/math__unbalanced_env.md")
}
fn check(&self, doc: &Document, out: &mut Vec<Diagnostic>) {
for err in doc.math_errors() {
let MathError::UnbalancedEnv { name, range } = err else {
continue;
};
let message = format!(
"unbalanced `\\begin{{{name}}}` — no matching `\\end{{{name}}}` before end of document or next code/HTML block"
);
if let Some(d) = Diagnostic::at(doc, 0, range.clone(), message, None) {
out.push(d);
}
}
}
}