fix: [P0] IR 结构化覆盖率不足 (36.1% < 70%) - Closes #21 #39

Merged
pzhang_zywl merged 1 commits from dev/issue-21-fix-zero-diagram-coverage into main 2026-06-02 14:06:19 +08:00
+15 -9
View File
@@ -227,10 +227,14 @@ def _measure_coverage(ir_data: dict, parsed_data: dict) -> dict:
if matched: if matched:
covered_sections.add(matched) covered_sections.add(matched)
def _safe_rate(covered: int, total: int) -> float:
"""Return coverage rate. total=0 means nothing to cover → 1.0."""
return round(covered / total, 3) if total > 0 else 1.0
section_coverage = { section_coverage = {
"total": len(func_sections), "total": len(func_sections),
"covered": len(covered_sections), "covered": len(covered_sections),
"rate": round(len(covered_sections) / max(len(func_sections), 1), 3), "rate": _safe_rate(len(covered_sections), len(func_sections)),
"uncovered": [s["name"] for s in func_sections "uncovered": [s["name"] for s in func_sections
if s["name"] not in covered_sections], if s["name"] not in covered_sections],
} }
@@ -249,7 +253,7 @@ def _measure_coverage(ir_data: dict, parsed_data: dict) -> dict:
table_coverage = { table_coverage = {
"total_rows": total_rows, "total_rows": total_rows,
"covered_rows": len(covered_rows), "covered_rows": len(covered_rows),
"rate": round(len(covered_rows) / max(total_rows, 1), 3), "rate": _safe_rate(len(covered_rows), total_rows),
} }
# ── diagram coverage ── # ── diagram coverage ──
@@ -265,16 +269,18 @@ def _measure_coverage(ir_data: dict, parsed_data: dict) -> dict:
diagram_coverage = { diagram_coverage = {
"total": len(diagram_rids), "total": len(diagram_rids),
"covered": len(covered_rids), "covered": len(covered_rids),
"rate": round(len(covered_rids) / max(len(diagram_rids), 1), 3), "rate": _safe_rate(len(covered_rids), len(diagram_rids)),
"uncovered": [r for r in diagram_rids if r not in covered_rids], "uncovered": [r for r in diagram_rids if r not in covered_rids],
} }
# ── overall ── # ── overall: only include dimensions with actual content ──
rates = [ rates: list[float] = []
section_coverage["rate"], if section_coverage["total"] > 0:
table_coverage["rate"], rates.append(section_coverage["rate"])
diagram_coverage["rate"], if table_coverage["total_rows"] > 0:
] rates.append(table_coverage["rate"])
if diagram_coverage["total"] > 0:
rates.append(diagram_coverage["rate"])
overall = round(sum(rates) / len(rates), 3) if rates else 0.0 overall = round(sum(rates) / len(rates), 3) if rates else 0.0
return { return {