Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python: code statistics

Do you know if there's a Python library that generates statistics about code? I'm thinking about pointing to a package and getting number of classes, functions, methods, docblock lines etc.

It could eventually include useless stuff like number of lambdas or other crazy statistics, just for fun.

like image 715
moraes Avatar asked Apr 23 '11 13:04

moraes


2 Answers

People don't generally make packages out of things that can be done in a dozen or two lines of code. The following analyzes usage of all python syntax and returns a dictionary mapping ast nodes to how many times that node came up in the source. Examples showing the number of def and class statements are below it as well.

import collections
import os
import ast

def analyze(packagedir):
    stats = collections.defaultdict(int)
    for (dirpath, dirnames, filenames) in os.walk(packagedir):
        for filename in filenames:
            if not filename.endswith('.py'):
                continue

            filename = os.path.join(dirpath, filename)

            syntax_tree = ast.parse(open(filename).read(), filename)
            for node in ast.walk(syntax_tree):
                stats[type(node)] += 1   

    return stats

print("Number of def statements:", analyze('.')[ast.FunctionDef])
print("Number of class statements:", analyze('.')[ast.ClassDef])
like image 80
Devin Jeanpierre Avatar answered Oct 18 '22 14:10

Devin Jeanpierre


you can have a look at Pymetrics, or check other tools enumerated there

like image 33
Cédric Julien Avatar answered Oct 18 '22 12:10

Cédric Julien