import hashlib import json import re import sys def parse_clang_tidy(log_file_path: str) -> list[dict]: issues = [] pattern = re.compile( r"^(.*?):(\d+):(\d+):\s+(warning|error|note):\s+(.*?)\s+\[(.*?)\]$" ) with open(log_file_path, "r") as f: for line in f: match = pattern.match(line) if not match: continue path, line, column, severity, message, name = match.groups() severity = "minor" if severity == "warning" else "major" fingerprint_data = f"{path}:{line}:{name}" fingerprint = hashlib.sha256(fingerprint_data.encode()).hexdigest() issues.append( { "description": f"{message} ({name})", "fingerprint": fingerprint, "severity": severity, "location": { "path": path, "lines": { "begin": int(line), }, }, } ) return issues if __name__ == "__main__": if len(sys.argv) < 2: sys.exit("Usage: python3 parse_clang_tidy.py ") issues = parse_clang_tidy(sys.argv[1]) print(json.dumps(issues, indent=2))