metrics.py

This commit is contained in:
AF 2023-06-16 18:30:13 +00:00
parent ad6e381830
commit a89fd3416c
3 changed files with 40 additions and 1 deletions

1
.gitignore vendored
View File

@ -3,3 +3,4 @@
/Cargo.lock
**/*.rs.bk
metrics.ansi
metrics.txt

View File

@ -10,5 +10,6 @@
99,
100
]
}
},
"python.analysis.typeCheckingMode": "basic"
}

37
metrics.py Normal file
View File

@ -0,0 +1,37 @@
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()