thefoldwithin-earth/tools/coherence/check-frontmatter.py

61 lines
1.5 KiB
Python
Raw Permalink Normal View History

#!/usr/bin/env python3
"""
check-frontmatter.py - Validates markdown files have frontmatter
One thing: Check if files have YAML frontmatter.
"""
import sys
import yaml
from pathlib import Path
def has_frontmatter(filepath):
"""Check if file has YAML frontmatter."""
try:
with open(filepath, "r", encoding="utf-8") as f:
content = f.read()
if content.startswith("---"):
parts = content.split("---", 3)
if len(parts) >= 3:
yaml.safe_load(parts[1])
return True
except Exception:
pass
return False
def main():
"""Check markdown files for frontmatter."""
path_arg = sys.argv[1] if len(sys.argv) > 1 else "."
issues = []
checked = 0
path = Path(path_arg)
if path.is_file() and path.suffix == ".md":
checked = 1
if not has_frontmatter(path):
issues.append(str(path))
elif path.is_dir():
for filepath in path.rglob("*.md"):
checked += 1
if not has_frontmatter(filepath):
issues.append(str(filepath))
else:
print(f"Error: {path_arg} is not a file or directory")
sys.exit(2)
print(f"Checked: {checked}")
print(f"Missing frontmatter: {len(issues)}")
if issues:
print("\nFiles missing frontmatter:")
for issue in issues:
print(f" {issue}")
sys.exit(1)
else:
print("All files have frontmatter. OK")
sys.exit(0)
if __name__ == "__main__":
main()