import json
from subprocess import check_output

all_entries = []


def save_entry(entry: dict, prefix=""):
    name = entry["name"] = prefix + entry["name"]
    spaces = entry.pop("spaces")
    all_entries.append(entry)
    for space in spaces:
        save_entry(space, f"{name}::")


def main():
    lines = check_output(
        ["rust-code-analysis-cli", "-m", "-p", "src", "-O", "json"], text=True
    ).splitlines()
    for line in lines:
        entry = json.loads(line)
        assert entry["kind"] == "unit"
        assert entry["start_line"] == 1
        assert entry["end_line"] >= entry["start_line"]
        save_entry(entry)
    all_entries.sort(
        key=lambda entry: (
            entry["metrics"]["halstead"]["bugs"] or 0,
            entry["metrics"]["halstead"]["volume"],
        ),
        reverse=True,
    )
    t = 0
    for entry in all_entries:
        if entry["kind"] == "unit":
            t += entry["metrics"]["loc"]["ploc"]
    print(t)


main()