describe method

String describe()

A human-readable report, grouped by page.

Implementation

String describe() {
  final buffer = StringBuffer();
  if (findings.isEmpty) {
    buffer.writeln('esen_seo audit: $pagesAudited pages, no findings.');
    if (partial) {
      buffer.writeln(
        'WARNING: some pages failed to resolve, so cross-page checks '
        'were skipped. This is not a clean bill of health.',
      );
    }
    return buffer.toString();
  }

  buffer.writeln('esen_seo audit: $pagesAudited pages, '
      '$errorCount error(s), $warningCount warning(s), $infoCount info.');
  if (partial) {
    buffer.writeln(
      'WARNING: some pages failed to resolve — cross-page checks '
      '(duplicate titles, hreflang, internal links) were skipped.',
    );
  }
  buffer.writeln();

  // Site-wide findings first, then page by page.
  final siteWide = findings.where((f) => f.path == null).toList();
  if (siteWide.isNotEmpty) {
    buffer.writeln('site:');
    for (final f in siteWide) {
      buffer.writeln('  ${_line(f)}');
    }
    buffer.writeln();
  }

  final byPath = <String, List<SeoFinding>>{};
  for (final f in findings) {
    if (f.path != null) byPath.putIfAbsent(f.path!, () => []).add(f);
  }
  final paths = byPath.keys.toList()..sort();
  for (final path in paths) {
    buffer.writeln('$path:');
    for (final f in byPath[path]!) {
      buffer.writeln('  ${_line(f)}');
    }
    buffer.writeln();
  }
  return buffer.toString();
}