Перейти к основному содержимому

Инспекция кодовой базы

Инспекция кодовых баз с помощью pygount: LOC, языки, соотношения.

Метаданные навыка​

ИсточникВстроенный (установлен по умолчанию)
Путьskills/github/codebase-inspection
Версия1.0.0
АвторVibeOS
ЛицензияMIT
Платформыlinux, macos, windows
ТегиLOC, Анализ кода, pygount, Кодовая база, Метрики, Репозиторий
Связанные навыкиgithub-repo-management

Справочник: полный SKILL.md​

к сведению

Ниже приведено полное описание навыка, которое VibeOS загружает при его активации. Это инструкции, которые видит агент, когда навык активен.

Инспекция кодовой базы с помощью 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" .

# Сортировка по строкам кода (через 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__ — нераспознанные типы файлов

Подводные камни​

  1. Всегда исключайте .git, node_modules, venv — без --folders-to-skip pygount просканирует всё и может занять минуты или зависнуть на больших деревьях зависимостей.
  2. Markdown показывает 0 строк кода — pygount классифицирует всё содержимое Markdown как комментарии, а не код. Это ожидаемое поведение.
  3. Файлы JSON показывают низкое количество кода — pygount может консервативно подсчитывать строки JSON. Для точного подсчёта строк JSON используйте wc -l напрямую.
  4. Большие монорепозитории — для очень больших репозиториев рассмотрите использование --suffix для нацеливания на конкретные языки вместо сканирования всего.