radn-rs/metrics.py
2023-06-20 07:23:05 +00:00

40 lines
983 B
Python

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()