"""Adapter: tsc --noEmit text output normalized to Finding[].""" from __future__ import annotations import re from scripts.manifest import Finding _LINE_RE = re.compile( r"^(?P[^(]+)\((?P\d+),\d+\):\s*" r"(?Perror|warning)\s+" r"(?PTS\d+):\s*" r"(?P.+?)\s*$" ) def parse_tsc_output(stdout: str) -> list[Finding]: out: list[Finding] = [] for raw in stdout.splitlines(): m = _LINE_RE.match(raw) if not m: continue sev = "medium" if m.group("severity") == "error" else "low" out.append(Finding( tool="tsc", rule_id=m.group("code"), severity=sev, file=m.group("file"), line=int(m.group("line")), end_line=int(m.group("line")), message=m.group("message"), )) return out