Инспекция кодовой базы
Анализирует репозитории через pygount: LOC, языки, соотношения.
Метаданные навыка
| Источник | Встроенный (установлен по умолчанию) |
| Путь | skills/software-development/codebase-inspection |
| Версия | 1.0.0 |
| Автор | Hermes Agent |
| Лицензия | MIT |
| Платформы | linux, macos, windows |
| Теги | LOC, Code Analysis, pygount, Codebase, Metrics, Repository |
| Похожие навыки | github |
Справочник: полный SKILL.md
Ниже приведено полное определение навыка, которое Hermes загружает при его срабатывании. Именно это агент видит как инструкцию, когда навык активен.
Инспекция кодовой базы с pygount
Анализируйте репозитории на количество строк кода, разбивку по языкам, число файлов и соотношение кода к комментариям с помощью pygount.
Когда использовать
- Пользователь просит посчитать LOC (количество строк кода)
- Нужна разбивка репозитория по языкам
- Вопрос о размере или составе кодовой базы
- Нужно соотношение кода к комментариям
- Общие вопросы вида «насколько велик этот репозиторий»
Требования
pip install --break-system-packages pygount 2>/dev/null || pip install pygount
1. Базовая сводка (самый частый случай)
Полная разбивка по языкам с числом файлов, строками кода и строками комментариев:
cd /path/to/repo
pygount --format=summary \
--folders-to-skip=".git,node_modules,venv,.venv,__pycache__,.cache,dist,build,.next,.tox,.eggs,*.egg-info" \
.
ВАЖНО: всегда используйте --folders-to-skip, чтобы исключить папки с зависимостями и сборками — иначе pygount будет их обходить и может работать очень долго или зависнуть.
2. Типичные исключения папок
Подбирайте под тип проекта:
# Python-проекты
--folders-to-skip=".git,venv,.venv,__pycache__,.cache,dist,build,.tox,.eggs,.mypy_cache"
# JavaScript/TypeScript-проекты
--folders-to-skip=".git,node_modules,dist,build,.next,.cache,.turbo,coverage"
# Общий вариант на все случаи
--folders-to-skip=".git,node_modules,venv,.venv,__pycache__,.cache,dist,build,.next,.tox,vendor,third_party"
3. Фильтр по конкретному языку
# Считать только файлы Python
pygount --suffix=py --format=summary .
# Считать только Python и YAML
pygount --suffix=py,yaml,yml --format=summary .
4. Подробный вывод по файлам
# Формат по умолчанию показывает разбивку по каждому файлу
pygount --folders-to-skip=".git,node_modules,venv" .
# Сортировка по строкам кода (через pipe в sort)
pygount --folders-to-skip=".git,node_modules,venv" . | sort -t$'\t' -k1 -nr | head -20
5. Форматы вывода
# Таблица-сводка (рекомендуется по умолчанию)
pygount --format=summary .
# JSON-вывод для программной обработки
pygount --format=json .
# Удобно для конвейера: язык, число файлов, код, документация, пустые строки, строковые литералы
pygount --format=summary . 2>/dev/null
6. Интерпретация результатов
Столбцы сводной таблицы:
- Language — определённый язык программирования
- Files — число файлов на этом языке
- Code — строки реального кода (исполняемого/декларативного)
- Comment — строки комментариев или документации
- % — доля от общего числа
Специальные псевдоязыки:
__empty__— пустые файлы__binary__— бинарные файлы (изображения, скомпилированные файлы и т.п.)__generated__— автоматически сгенерированные файлы (определяются эвристически)__duplicate__— файлы с одинаковым содержимым__unknown__— нераспознанные типы файлов
Подводные камни
- Всегда исключайте .git, node_modules, venv — без
--folders-to-skippygount обойдёт всё подряд и на больших деревьях зависимостей может работать минутами или зависнуть. - Markdown показывает 0 строк кода — pygount относит всё содержимое Markdown к комментариям, а не к коду. Это ожидаемое поведение.
- JSON-файлы показывают заниженное число строк кода — pygount может считать строки JSON консервативно. Для точного подсчёта строк в JSON используйте
wc -lнапрямую. - Крупные монорепозитории — для очень больших репозиториев используйте
--suffix, чтобы нацелиться на конкретные языки, а не сканировать всё подряд.