38 lines
969 B
Python
38 lines
969 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,
|
|
)
|
|
for entry in all_entries:
|
|
# print(*entry["metrics"])
|
|
print(entry["name"], entry["metrics"]["halstead"])
|
|
|
|
|
|
main()
|