use crate::{Diagnostic, DiagnosticSeverity, code};
pub struct ClassifiedDiagnostic<S, D = code::DefaultDiscriminant> {
pub(super) inner: Diagnostic<S, D>,
pub severity: DiagnosticSeverity,
}
impl<S, D> ClassifiedDiagnostic<S, D> {
pub const fn make_error(&mut self) -> &mut Self {
self.severity = DiagnosticSeverity::Error;
self
}
pub const fn make_warning(&mut self) -> &mut Self {
self.severity = DiagnosticSeverity::Warning;
self
}
pub const fn make_advice(&mut self) -> &mut Self {
self.severity = DiagnosticSeverity::Advice;
self
}
pub fn report<C>(self, config: ariadne::Config, cache: C) -> std::io::Result<()>
where
S: ariadne::Span,
D: code::Discriminant,
C: ariadne::Cache<S::SourceId>,
{
self.inner.report_with(self.severity, config, cache)
}
}