#!/usr/bin/env python3 import re def analyze_coverage(): files = {} current_file = None with open('coverage/lcov.info', 'r', encoding='utf-8') as f: lines = f.readlines() i = 0 while i < len(lines): line = lines[i].strip() if line.startswith('SF:'): current_file = line[3:] files[current_file] = {'total': 0, 'covered': 0} i += 1 elif line.startswith('LF:') and current_file: files[current_file]['total'] = int(line[3:]) i += 1 elif line.startswith('LH:') and current_file: files[current_file]['covered'] = int(line[3:]) i += 1 else: i += 1 # Filter out generated files filtered = [] for f, d in files.items(): if not f.endswith('.g.dart') and not 'generated' in f.lower() and not f.endswith('l10n.dart'): filtered.append((f, d)) # Find files with less than 50% coverage low_coverage = [] for f, d in filtered: if d['total'] > 0: pct = d['covered']/d['total']*100 if pct < 50: low_coverage.append((f, d)) # Sort by coverage percentage (lowest first) sorted_files = sorted( low_coverage, key=lambda x: (x[1]['covered']/x[1]['total']*100 if x[1]['total'] > 0 else 0) ) print('Files with less than 50% coverage:') print('=' * 80) for f, d in sorted_files[:50]: pct = d['covered']/d['total']*100 print(f'{pct:6.1f}% ({d["covered"]:4d}/{d["total"]:4d}) - {f}') if __name__ == '__main__': analyze_coverage()