"""Adapter: interrogate --quiet --output-format=json output → Finding[].""" from __future__ import annotations import json from scripts.manifest import Finding def parse_interrogate_output(stdout: str) -> list[Finding]: try: payload = json.loads(stdout) except json.JSONDecodeError: return [] if not isinstance(payload, dict): return [] files = payload.get("files") if not isinstance(files, dict): return [] out: list[Finding] = [] for file_path, file_data in files.items(): if not isinstance(file_data, dict): continue for entry in file_data.get("missing", []): if entry.get("private"): continue full_name = entry.get("name", "") symbol = full_name.split(":", 1)[-1] if ":" in full_name else full_name if symbol.startswith("_"): continue kind = entry.get("type", "symbol") line = entry.get("lineno", 0) out.append(Finding( tool="interrogate", rule_id="interrogate:missing-docstring", severity="low", file=file_path, line=line, end_line=line, message=f"missing docstring for public {kind} {symbol}", )) return out