"""Adapter: lizard --csv output → Finding[].""" from __future__ import annotations from scripts.manifest import Finding def _severity_for_ccn(ccn: int) -> str | None: if ccn >= 20: return "high" if ccn >= 10: return "medium" return None def parse_lizard_output(stdout: str) -> list[Finding]: out: list[Finding] = [] for raw in stdout.splitlines(): parts = raw.strip().split(",") if len(parts) < 6: continue try: ccn = int(parts[1]) except ValueError: continue severity = _severity_for_ccn(ccn) if severity is None: continue location = parts[5] loc_parts = location.split("@") if len(loc_parts) < 3: continue name, line_str, file_path = loc_parts[0], loc_parts[1], loc_parts[2] try: line = int(line_str) except ValueError: continue out.append(Finding( tool="lizard", rule_id=f"lizard:ccn={ccn}", severity=severity, file=file_path, line=line, end_line=line, message=f"function {name} has CCN {ccn}", )) return out