Skip to content

Commit 84d70bc

Browse files
committed
refactor: Extract _prepare_coverage_data helper in reporting
- Extracted coverage data collection logic from _generate_html - Reduces cognitive complexity by separating data preparation from template generation - All tests passing (190/190)
1 parent d4b81ce commit 84d70bc

1 file changed

Lines changed: 25 additions & 13 deletions

File tree

src/testiq/reporting.py

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -77,34 +77,46 @@ def generate(
7777
output_path.write_text(html)
7878
logger.info(f"HTML report saved: {output_path}")
7979

80-
def _generate_html(
80+
def _prepare_coverage_data(
8181
self,
82-
title: str,
83-
exact_dups: list[list[str]],
84-
subset_dups: list[tuple[str, str, float]],
85-
similar: list[tuple[str, str, float]],
86-
threshold: float,
87-
) -> str:
88-
"""Generate HTML content."""
89-
total_tests = len(self.finder.tests)
90-
duplicate_count = self.finder.get_duplicate_count()
82+
) -> tuple[dict[str, dict[int, str]], set[tuple[str, int]], float]:
83+
"""
84+
Collect and analyze source files for coverage display.
9185
92-
# Collect and read source files for the split-screen view
86+
Returns:
87+
Tuple of (source_code_map, unique_lines_covered, coverage_percentage)
88+
"""
9389
source_reader = SourceCodeReader()
9490
all_files = set()
9591
unique_lines_covered = set()
92+
9693
for test in self.finder.tests:
9794
for filename, line in test.covered_lines:
9895
all_files.add(filename)
9996
unique_lines_covered.add((filename, line))
10097

10198
source_code_map = source_reader.read_multiple(list(all_files))
10299

103-
# Calculate total lines in all files
104100
total_lines_in_files = sum(len(lines) for lines in source_code_map.values())
105101
lines_covered = len(unique_lines_covered)
106-
107102
coverage_percentage = (lines_covered / total_lines_in_files * 100) if total_lines_in_files > 0 else 0
103+
104+
return source_code_map, unique_lines_covered, coverage_percentage
105+
106+
def _generate_html(
107+
self,
108+
title: str,
109+
exact_dups: list[list[str]],
110+
subset_dups: list[tuple[str, str, float]],
111+
similar: list[tuple[str, str, float]],
112+
threshold: float,
113+
) -> str:
114+
"""Generate HTML content."""
115+
total_tests = len(self.finder.tests)
116+
duplicate_count = self.finder.get_duplicate_count()
117+
118+
# Collect and read source files for the split-screen view
119+
source_code_map, unique_lines_covered, coverage_percentage = self._prepare_coverage_data()
108120

109121
html = f"""<!DOCTYPE html>
110122
<html lang="en">

0 commit comments

Comments
 (0)