Codebase Inspection

Анализ кодовой базы через pygount: LOC, языки, соотношения.

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

ИсточникВстроенный (установлен по умолчанию)
Путьskills/github/codebase-inspection
Версия1.0.0
АвторHermes Agent
ЛицензияMIT
Платформыlinux, macos, windows
ТегиLOC, Code Analysis, pygount, Codebase, Metrics, Repository
Связанные навыкиgithub-repo-management

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

инфо

Ниже — полное определение навыка, которое Hermes Agent загружает при его активации. Именно это агент видит как инструкции во время работы навыка.

Codebase Inspection with pygount

Анализируй репозитории по строкам кода, разбивке языков, количеству файлов и соотношению кода к комментариям с помощью pygount.

Когда использовать

  • Пользователь просит посчитать LOC (lines of code)
  • Нужна разбивка по языкам для репозитория
  • Вопрос о размере или составе кодовой базы
  • Нужно соотношение кода к комментариям
  • Общие вопросы вида «насколько большой этот репозиторий»

Требования

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 .

# Pipe-совместимый формат: язык, кол-во файлов, код, документация, пустые строки, строковые литералы
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 консервативно. Для точного подсчёта используй wc -l напрямую.
  4. Большие монорепозитории — для очень крупных репо лучше применять --suffix и нацеливаться на конкретные языки, а не сканировать всё подряд.
ESC