Skip to content

Commit 09b90fb

Browse files
fix(cc): reduce CC violations 19→18
- metrics_core.py: _compute_fan_in CC12→4 (_update_importers_from_called_by, _update_importers_from_calls) All 278 tests pass. Co-authored-by: Koru Agent <agent@coru.dev>
1 parent c99276a commit 09b90fb

1 file changed

Lines changed: 27 additions & 18 deletions

File tree

code2llm/exporters/toon/metrics_core.py

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -82,31 +82,40 @@ def _build_suffix_index(
8282
idx[simple].append((qn, fi))
8383
return idx
8484

85+
@staticmethod
86+
def _update_importers_from_called_by(
87+
fi, src_file: str, importers: dict, functions: dict
88+
) -> None:
89+
"""Record that src_file is imported by each caller in fi.called_by."""
90+
for callee in fi.called_by:
91+
ci = functions.get(callee)
92+
if ci and ci.file != src_file:
93+
importers[src_file].add(ci.file)
94+
95+
@staticmethod
96+
def _update_importers_from_calls(
97+
fi, src_file: str, importers: dict, functions: dict, suffix_idx: dict
98+
) -> None:
99+
"""Record fan-in contribution from each outgoing call in fi.calls."""
100+
for callee in fi.calls:
101+
ci = functions.get(callee)
102+
if ci and ci.file != src_file:
103+
importers[ci.file].add(src_file)
104+
elif not ci:
105+
for _qn, ci2 in suffix_idx.get(callee, []):
106+
if ci2.file != src_file:
107+
importers[ci2.file].add(src_file)
108+
break
109+
85110
@staticmethod
86111
def _compute_fan_in(files: Dict, result: AnalysisResult) -> None:
87112
"""Compute fan-in per file (how many other files call into this file)."""
88113
importers: Dict[str, set] = defaultdict(set)
89114
suffix_idx = CoreMetricsComputer._build_suffix_index(result)
90-
91115
for fname, fi in result.functions.items():
92116
src_file = fi.file
93-
# Forward: who calls me? (called_by)
94-
for callee in fi.called_by:
95-
callee_info = result.functions.get(callee)
96-
if callee_info and callee_info.file != src_file:
97-
importers[src_file].add(callee_info.file)
98-
# Reverse: who do I call? → target file gets fan-in
99-
for callee in fi.calls:
100-
callee_info = result.functions.get(callee)
101-
if callee_info and callee_info.file != src_file:
102-
importers[callee_info.file].add(src_file)
103-
elif not callee_info:
104-
# O(1) suffix lookup instead of O(F) scan
105-
for qn, ci in suffix_idx.get(callee, []):
106-
if ci.file != src_file:
107-
importers[ci.file].add(src_file)
108-
break
109-
117+
CoreMetricsComputer._update_importers_from_called_by(fi, src_file, importers, result.functions)
118+
CoreMetricsComputer._update_importers_from_calls(fi, src_file, importers, result.functions, suffix_idx)
110119
for fpath in files:
111120
files[fpath]["fan_in"] = len(importers.get(fpath, set()))
112121

0 commit comments

Comments
 (0)