notabene 0.2.0

A fast linter for changelogs in Keep a Changelog format
Documentation
use std::io::Write;
use std::path::Path;

use crate::diagnostic::Diagnostic;
use crate::span::Locator;
use crate::span::Position;

pub(crate) mod context;
pub(crate) mod format;
pub(crate) mod formatter;

pub(crate) use context::Context;
pub(crate) use format::Format;
pub(crate) use formatter::Formatter;

pub fn report<W: Write>(
    w: &mut W,
    diagnostics: &[Diagnostic<Position>],
    source: &str,
    path: Option<&Path>,
    locator: &Locator,
    format: Format,
) -> std::io::Result<()> {
    let context = Context {
        source,
        path,
        locator,
    };
    match format {
        Format::Short => formatter::ShortFormatter.format(w, diagnostics, &context),
        Format::Full => formatter::FullFormatter.format(w, diagnostics, &context),
        Format::Json => formatter::JsonFormatter.format(w, diagnostics, &context),
        Format::JsonLines => formatter::JsonLinesFormatter.format(w, diagnostics, &context),
    }
}