Python: статистика кода - PullRequest
       14

Python: статистика кода

10 голосов
/ 23 апреля 2011

Знаете ли вы, есть ли библиотека Python, которая генерирует статистику о коде?Я думаю о том, чтобы указать на пакет и получить количество классов, функций, методов, строк докблока и т. Д.

Это может в конечном итоге включать бесполезные вещи, такие как количество лямбд или другую сумасшедшую статистику, просто для удовольствия.

Ответы [ 3 ]

7 голосов
/ 23 апреля 2011

Люди обычно не делают пакеты из вещей, которые можно сделать с помощью дюжины или двух строк кода. Далее анализируется использование синтаксиса Python all и возвращается словарь, отображающий аст-узлы, во сколько раз этот узел появлялся в источнике. Примеры, показывающие количество операторов def и class, также находятся под ним.

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])
4 голосов
/ 23 апреля 2011

вы можете взглянуть на Pymetrics или проверить другие инструменты , перечисленные там

0 голосов
/ 05 января 2013

Может быть Тахар может помочь, он отображает статистику того, как долго каждая функция, метод, класс и модуль (в строках кода). Однако, поскольку он использует модуль проверки, он может работать неожиданным образом, если один из анализируемых им модулей запускает графический интерфейс или что-то в этом роде.

Я когда-нибудь перейду к использованию AST, хотя я не знаю, может ли AST предоставить сервис, аналогичный inspect.getsourcelines ()?

(EDIT)

Mergou (перезапись tahar с использованием модуля tokenize) в альфа-версии, вот видео об этом в действии: http://www.youtube.com/watch?v=PI0iBZmInFU&feature=youtu.be

...