from __future__ import annotations
import re
import sys
from pathlib import Path
ASSERT_MACRO = re.compile(r"(?<![\w!])(?:debug_)?assert(?:_eq|_ne)?!\s*\(")
def main() -> int:
roots = [Path("src"), Path("hegel-c/src")]
offences: list[str] = []
for root in roots:
for path in sorted(root.rglob("*.rs")):
for lineno, line in enumerate(path.read_text().splitlines(), start=1):
if line.lstrip().startswith("//"):
continue
if ASSERT_MACRO.search(line):
offences.append(f" {path}:{lineno}: {line.strip()}")
if offences:
print("std assertion macros are not allowed in src/ or hegel-c/src/.")
print("Use hegel_internal_assert! (internal invariants) or")
print("invalid_argument! (user-facing argument validation) instead:")
print()
print("\n".join(offences))
return 1
print("check-internal-asserts: OK")
return 0
if __name__ == "__main__":
sys.exit(main())