"""Adapter: selene --display-style=json normalized to Finding[].""" from __future__ import annotations import json from scripts.manifest import Finding _SEVERITY = {"Error": "high", "Warning": "medium", "Note": "low"} def parse_selene_output(stdout: str) -> list[Finding]: try: payload = json.loads(stdout) except json.JSONDecodeError: return [] if not isinstance(payload, list): return [] out: list[Finding] = [] for item in payload: code = item.get("code", {}) span = item.get("span", {}) start = span.get("start", {}) end_span = span.get("end", {}) out.append(Finding( tool="selene", rule_id=code.get("name", "unknown"), severity=_SEVERITY.get(code.get("severity", ""), "medium"), file=item.get("filename", ""), line=start.get("line", 0), end_line=end_span.get("line", start.get("line", 0)), message=item.get("primary_label", ""), )) return out