Однажды мы с командой обсуждали способ, как можно оценить количество исходных кодов, написанных нами для одного большого проекта. Первой идеей было просто взять общий размер файлов исходников и... но тут сразу посыпались вопросы: мы не хотим учитывать сторонний код, библиотеки, что делать с бинарными файлами и картинками, а как быть с юникод-строками, в которых по несколько байт на символ, сгенерированный код и т.п.
Наша цель была понять, сколько кода для проекта написала именно наша команда. И ещё мы хотели понимать количество символов, строк и примерное количество печатных страниц исходных кодов. Вот так и родился этот мини-проект, чтобы получить ответы на эти вопросы.
mt-howmany - основанная на composer утилита командной строки. Устанавливается она как обычный composer-пакет в качестве зависимости:
composer require mitoteam/mt-howmany
Более подробно процесс установки и использование программы описаны на странице проекта на GitHub.
Поддерживаются как UNIX-совместимые ОС, так и Windows OS. Все пути в конфигурационных файлах задаются относительно рабочей директории, разделители директорий в путях автоматически трансформируются с UNIX-/ на Windows-\ при необходимости.
Мультибайтовые строки Unicode обрабатываются при помощи пакета symfony/string для корректного подсчёта количества символов. Утилита поддерживает исключение файлов из сканирования как по расширению, так и по пути к файлу (через регулярные выражения).Также в конфигах можно указать свои собственные значения для количества символов и количества строк для оценки количества печатных страниц.
Конфигурационные файлы пишутся в формате YAML. Есть возможность разбить конфигурацию на несколько файлов. Например мы используем эту возможность для того, чтобы общую часть конфигурации хранить в общем репозитории, а для каждого конкретного проекта - дополнительную конфигурацию уже только для него.
Пример работы программы для исходников проекта binardo:
mt-howmany by MiTo Team
=======================
Working directory: /www/binardo.mt.test
Config file loaded: /www/binardo.mt.test/web/modules/custom/mtlapbase/mt-howmany.common.yml
Config file loaded: /www/binardo.mt.test/mt-howmany.yml
Results by file extension
=========================
----------- -------- ------------ ------------- -------
Type Size Characters Files Count Lines
----------- -------- ------------ ------------- -------
php 777Kb 782756 174 32225
twig 50.0Kb 51145 26 1471
scss 29.8Kb 30464 47 1886
js 17.1Kb 17276 11 637
yml 15.5Kb 15767 18 621
sh 9.59Kb 9816 11 348
po 3.69Kb 2965 1 164
json 3.27Kb 3344 4 127
module 3.10Kb 3176 2 131
theme 3.06Kb 3133 2 123
gitignore 2.23Kb 2280 2 82
md 2.08Kb 1323 6 38
txt 139 139 1 8
htaccess 38 38 2 4
----------- -------- ------------ ------------- -------
Totals
======
Types count: 14
Paths count: 67
Files count: 307
Size: 916Kb
Characters: 923622
Lines: 37865
Pages by Characters: 257
Pages by Lines: 1052
- Страница проекта: mt-howmany
- GitHub: