///|
/// Retains one scanner match and its candidate-local lint report.
pub(all) struct RomanDocumentLintCandidate {
  span : SourceSpan
  source_text : String
  lint : RomanLintReport
} derive(Eq, Debug)

///|
/// Retains one scanner rejection and its document-global diagnostic.
pub(all) struct RomanDocumentRejectedCandidate {
  span : SourceSpan
  source_text : String
  reason : ScanRejectionReason
  diagnostic : RomanDiagnostic
} derive(Eq, Debug)

///|
/// Returns source-order document lint evidence and aggregate severities.
pub(all) struct RomanDocumentLintReport {
  original : String
  policy : RomanLintPolicy
  candidates : Array[RomanDocumentLintCandidate]
  rejected_candidates : Array[RomanDocumentRejectedCandidate]
  diagnostics : Array[RomanDiagnostic]
  candidates_examined : Int
  error_count : Int
  warning_count : Int
  conforms : Bool
} derive(Eq, Debug)