"""Adapter: vulture text output → Finding[].""" from __future__ import annotations import re from scripts.manifest import Finding _LINE_RE = re.compile( r"^(?P[^:]+):(?P\d+):\s*(?P.+?)\s*\((?P\d+)%\s*confidence\)$" ) def parse_vulture_output(stdout: str) -> list[Finding]: out: list[Finding] = [] for raw in stdout.splitlines(): m = _LINE_RE.match(raw.strip()) if not m: continue conf = int(m.group("conf")) severity = "medium" if conf >= 80 else "low" out.append(Finding( tool="vulture", rule_id=f"vulture:{conf}pct", severity=severity, file=m.group("file"), line=int(m.group("line")), end_line=int(m.group("line")), message=m.group("msg"), )) return out