prioritize method

Returns a sorted list of PrioritizedGroup for all rules found in result.

Implementation

List<PrioritizedGroup> prioritize(FlutterAnalysisResult result) {
  // Group all issues by rule (across all severities).
  final map = <String, List<FlutterIssue>>{};
  for (final issue in result.allIssues) {
    map.putIfAbsent(issue.rule, () => []).add(issue);
  }

  final groups = map.entries.map((entry) {
    final rule = entry.key;
    final issues = entry.value;
    final meta = RuleRegistry.lookup(rule);
    final files = issues
        .map((i) => i.file.replaceAll('\\', '/'))
        .toSet()
        .toList()
      ..sort();
    return PrioritizedGroup(
      rule: rule,
      occurrenceCount: issues.length,
      priority: meta?.priority ?? IssuePriority.unknown,
      category: meta?.category ?? IssueCategory.unknown,
      description: meta?.description ?? '',
      exampleMessage: issues.first.message,
      affectedFiles: files,
    );
  }).toList();

  // Sort: priority first (lower sortOrder = higher urgency), then count desc.
  groups.sort((a, b) {
    final byPriority = a.priority.sortOrder.compareTo(b.priority.sortOrder);
    if (byPriority != 0) return byPriority;
    return b.occurrenceCount.compareTo(a.occurrenceCount);
  });

  return groups;
}