import io, os, re, sys, json

ROOT = "crates"
sites = {}
fnpat = re.compile(r"^\s*(pub(\(crate\))?\s+)?(async\s+)?fn\s+([A-Za-z0-9_]+)")
for dirpath, _dirs, files in os.walk(ROOT):
    for f in files:
        if not f.endswith(".rs"):
            continue
        p = os.path.join(dirpath, f).replace("\\", "/")
        lines = io.open(p, "r", encoding="utf-8", newline="").read().split("\n")
        cur_fn, cur_indent = None, None
        hits = []
        for i, ln in enumerate(lines, 1):
            m = fnpat.match(ln)
            if m:
                cur_fn = m.group(4)
                cur_indent = len(ln) - len(ln.lstrip())
            if ".read_event()" in ln:
                # is it inside a loop/while/for above, within this fn?
                hits.append((i, cur_fn, ln.strip()[:90]))
        if hits:
            sites[p] = hits

total = sum(len(v) for v in sites.values())
print("TOTAL SITES", total)
for p, hits in sorted(sites.items()):
    fns = {}
    for (i, fn, _t) in hits:
        fns.setdefault(fn, []).append(i)
    print("")
    print(p, "(", len(hits), ")")
    for fn, ls in fns.items():
        print("   ", fn, ls)
