Утилита Linux для сбора статистики о кодовой базе

Предположим, у меня есть какой-то программный проект, над которым я работаю, и я хочу вычислить некоторую статистику по нему:

  • Количество строк (всего и на файл)
  • Комментарий, интервал и другие строки
  • Количество функций, классов, методов
  • Средняя длина файла, функции, класса, метода
  • Цикломатическая сложность
  • Глубина зависимостей DAG для файлов, типов и т. д.

Конечно, я соглашусь только на некоторые из них — чем больше, тем лучше. Я не гарантирую, что репозиторий имеет какую-либо форму контроля версий (хотя лично я сейчас работаю с mercurial); и это не клон онлайн-репозитория (так что ничего похожего на gitstats).

Требования:

  • бесплатно
  • Бесплатно
  • Работает в Linux (процессоры AMD x86_64)
  • Поддерживает как минимум C, C++98, C++11
  • Поддержка нескольких форматов вывода
  • Может выводить в виде консольных диаграмм "ASCII-art" (а-ля, скажем, hg diff --stat)

Желательная функция:

  • Небольшая автономная утилита
  • Не слишком много зависимостей от других программ и библиотек
  • Быстро

Ответы (2)

CLOC — Count Lines of Code — делает некоторые (не все) из этих вещей, отвечая всем требованиям. Он также быстрый, маленький и зависит только от Perl и пары Perl-библиотек.

Выход образца:

http://cloc.sourceforge.net v 1.60  T=0.46 s (354.6 files/s, 64728.0 lines/s)
--------------------------------------------------------------------------------
Language                      files          blank        comment           code
--------------------------------------------------------------------------------
C/C++ Header                    108           2761           2452          10226
C++                              47           1626            772           9703
make                              1            476            193            931
Bourne Again Shell                3             50             25            346
CMake                             2             48             68            225
XML                               1              0              0             11
YAML                              1              1              6              8
Bourne Shell                      1              1              2              5
--------------------------------------------------------------------------------
SUM:                            164           4963           3518          21455
--------------------------------------------------------------------------------

Существует кросс-платформенная библиотека метрик Python, которая дает вам метрики либо в одном файле, либо может рекурсивно использовать дерево каталогов. Он доступен в исходном проекте или в моем форке добавлен рекурсивный вариант на github.

Запуск старого проекта, который мне нужно передать с опцией рекурсии:

Files                       Language        SLOC Comment McCabe
----- ------------------------------ ----------- ------- ------
 102                            XML       10601    2415      0
   7                            VGL        4837      14     49
 588                              C      441797  135164  11715   
 302                              D        7750       0      0    
  27                           XSLT         691     313      0    
  13                         Python         881     203    141
   4                        XML+PHP       21489       0      0
  38                       Makefile        1747    3948     18
   7                      Batchfile          45       8      7
   2                           HTML           9      36      0    
  17                      Text only           0       0      0
   1                         POVRay           8      19      0
----- ------------------------------ ----------- ------- ------
1108                          Total      489855  142120  11930
  • Бесплатно Да
  • Бесплатно Да
  • Работает на Linux (процессоры AMD x86_64) Да , это python
  • Поддерживает как минимум C, C++98, C++11 Да
  • Поддержка нескольких выходных форматов Да Может выводиться как текст, xml или csv
  • Может выводить в виде консольных диаграмм "ASCII-art" (например, hg diff --stat) Да См. выше
  • Небольшая автономная утилита Небольшая (крошечная) библиотека Python, которая добавляет утилиту командной строки.
  • Не слишком много зависимостей от других программ и библиотек Зависит от python, его стандартных библиотек и pygments
  • Быстро В разумных пределах
Как он соотносится с CLOC по видам статистики, которую он собирает и представляет? Помимо общей разбивки строк на код/комментарии/пробел? Кроме того, что такое «Маккейб»?
МакКейб — это цикломатическая сложность.