"""Adapter: eslint -f json normalized to Finding[].""" from __future__ import annotations import json import os from scripts.manifest import Finding def _severity(rule_id: str, sev_num: int) -> str: if rule_id and "security" in rule_id: return "high" if sev_num == 2: return "medium" return "low" def parse_eslint_output(stdout: str, repo_root: str) -> list[Finding]: try: payload = json.loads(stdout) except json.JSONDecodeError: return [] if not isinstance(payload, list): return [] out: list[Finding] = [] for entry in payload: file_path = entry.get("filePath", "") rel = os.path.relpath(file_path, repo_root) if file_path.startswith(repo_root) else file_path for msg in entry.get("messages", []): rule_id = msg.get("ruleId") or "" out.append(Finding( tool="eslint", rule_id=rule_id, severity=_severity(rule_id, msg.get("severity", 1)), file=rel, line=msg.get("line", 0), end_line=msg.get("endLine", msg.get("line", 0)), message=msg.get("message", ""), )) return out