openpilot/scripts/code_stats.py

55 lines
1.3 KiB
Python
Raw Permalink Normal View History

2020-04-24 10:56:12 -06:00
#!/usr/bin/env python3
import os
2020-04-24 10:56:12 -06:00
import ast
import stat
import subprocess
fouts = set([x.decode('utf-8') for x in subprocess.check_output(['git', 'ls-files']).strip().split()])
pyf = []
for d in ["cereal", "common", "scripts", "selfdrive", "tools"]:
for root, dirs, files in os.walk(d):
for f in files:
if f.endswith(".py"):
pyf.append(os.path.join(root, f))
imps = set()
class Analyzer(ast.NodeVisitor):
def visit_Import(self, node):
for alias in node.names:
imps.add(alias.name)
self.generic_visit(node)
2020-04-24 10:56:12 -06:00
def visit_ImportFrom(self, node):
imps.add(node.module)
self.generic_visit(node)
tlns = 0
2020-08-22 15:48:01 -06:00
carlns = 0
scriptlns = 0
testlns = 0
2020-04-24 10:56:12 -06:00
for f in sorted(pyf):
if f not in fouts:
continue
xbit = bool(os.stat(f)[stat.ST_MODE] & stat.S_IXUSR)
src = open(f).read()
lns = len(src.split("\n"))
tree = ast.parse(src)
Analyzer().visit(tree)
print("%5d %s %s" % (lns, f, xbit))
2020-08-22 15:48:01 -06:00
if 'test' in f:
testlns += lns
elif f.startswith('tools/') or f.startswith('scripts/') or f.startswith('selfdrive/debug'):
scriptlns += lns
elif f.startswith('selfdrive/car'):
carlns += lns
else:
tlns += lns
2020-04-24 10:56:12 -06:00
2020-08-22 15:48:01 -06:00
print("%d lines of openpilot python" % tlns)
print("%d lines of car ports" % carlns)
print("%d lines of tools/scripts/debug" % scriptlns)
print("%d lines of tests" % testlns)
2020-04-24 10:56:12 -06:00
#print(sorted(list(imps)))