PHPackages                             doctordanila/scancore - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. doctordanila/scancore

ActiveLibrary

doctordanila/scancore
=====================

Console tool to scan project structure and dump file contents, respecting .scancoreignore

v1.0.6(5d ago)19MITPHPPHP &gt;=7.4

Since Mar 14Pushed 5d agoCompare

[ Source](https://github.com/DoctorDanila/scancore)[ Packagist](https://packagist.org/packages/doctordanila/scancore)[ RSS](/packages/doctordanila-scancore/feed)WikiDiscussions main Synced today

READMEChangelog (7)DependenciesVersions (8)Used By (0)

Scancore
========

[](#scancore)

Консольный инструмент для сканирования файловой структуры PHP-проекта и генерации дампа содержимого файлов с учётом правил игнорирования (`.scancoreignore`). Полезен для передачи контекста проекта в LLM, анализа кода, ревью или документирования.

Возможности
-----------

[](#возможности)

- **init** - команда для явного создания или перезаписи файла `.scancoreignore`. При первом запуске любой команды файл также создаётся автоматически (если отсутствует).
- **tree** - отображение структуры проекта в виде дерева (аналог команды `tree` в Linux).
- **dump** - создание текстового файла со всеми неигнорируемыми файлами и их содержимым.
- **stats** - сбор расширенной статистики по проекту:
    - Общее количество файлов и строк кода (без учёта пустых строк и комментариев).
    - Среднее количество строк на файл.
    - Распределение по типам файлов (PHP, JS, CSS, конфиги и т.д.).
    - Самые большие файлы (топ-10 по размеру).
    - Файлы с наибольшим количеством зависимостей (входящих и исходящих) - анализ `use`, `extends`, `implements` для PHP.
    - Активность по дням (количество изменённых файлов за последние даты).
    - Генерация HTML-отчёта с интерактивным графом зависимостей (на русском языке).
    - Генерация JSON-файла с полной информацией для дальнейшего анализа LLM.
- **Интеллектуальная фильтрация** для команд `dump` и `stats`:
    - Фильтр по именам классов или неймспейсов (`--class`).
    - Фильтр по содержимому файла (регулярное выражение, `--pattern`).
    - Фильтр по типу файла (например, только контроллеры, только модели) на основе имени файла (`--type`).
    - Фильтр по реализуемому интерфейсу (`--impl`).
    - Фильтр по наследуемому классу (`--ext`).
    - Фильтр по использованию трейта/класса (оператор `use`) (`--use`).
    - Возможность комбинировать несколько фильтров (логическое И) и передавать несколько значений через запятую или повторением опции.
- **Временные исключения из командной строки** - флаг `--ignore=шаблон` для команд `tree`, `dump`, `stats`. Позволяет временно добавить правила игнорирования помимо основного файла `.scancoreignore`. Управляется через файл `.env` (можно исключить отдельные команды).
- Поддержка `.scancoreignore` с синтаксисом, близким к `.gitignore` (кроме негативных шаблонов `!`).
- Фильтрация по подпапке для всех команд.
- Кроссплатформенность (Windows, Linux, macOS).

Требования
----------

[](#требования)

- PHP 7.4 или выше.

Установка
---------

[](#установка)

Установите пакет через Composer (рекомендуется в `require-dev`):

```
composer require doctordanila/scancore --dev
```

После установки исполняемый файл будет доступен как `vendor/bin/scancore` (в Windows - `vendor\bin\scancore`).

Настройка игнорирования
-----------------------

[](#настройка-игнорирования)

В корне проекта создайте файл `.scancoreignore` и перечислите пути/шаблоны, которые нужно исключить. Правила обрабатываются аналогично .gitignore.

Не волнуйтесь если не знаете, что добавлять в файл игнорирования. При первом запуске любой команды (`tree`, `dump`, `stats`) файл `.scancoreignore` создаётся автоматически, если его нет. Сначала предпринимается попытка скопировать содержимое `.gitignore` из корня проекта. Если `.gitignore` отсутствует, генерируется базовый шаблон со стандартными исключениями (системные папки, зависимости, логи, конфигурации, git). Для явного создания или принудительной перезаписи используйте команду `init` (см. ниже).

Пример:

```
# Системные папки
.idea
.vscode
.DS_Store

# Зависимости
/vendor
/node_modules

# Логи и временные файлы
*.log
/runtime

# Конфигурации окружения
.env
/phpunit.xml

# Git
.git/
.github/

```

Пояснения:

`/vendor` - игнорируется только папка `vendor` в корне.

`.idea` - игнорируется на любом уровне.

`tests/_output/*` - игнорируются файлы внутри `tests/_output/` (но только в корне).

`**/tests/_output/` - папка `_output` на любом уровне (слеш в конце означает "только директория").

Использование
-------------

[](#использование)

### Команда `tree`

[](#команда-tree)

Вывод полной структуры проекта:

```
vendor/bin/scancore tree

```

Вывод структуры только указанной подпапки (например, modules):

```
vendor/bin/scancore tree modules/tasks

```

Пример вывода:

```
modules/tasks/
├─ Module.php
├─ config/
│   └─ di.php
├─ domain/
│   ├─ entity/
│   │   └─ Task.php
│   └─ valueObject/
│       └─ TaskId.php
└─ presentation/
    └─ controller/
        └─ TaskController.php

```

### Команда `dump`

[](#команда-dump)

Создание файла `scancore_output.txt` со всеми неигнорируемыми файлами и их содержимым:

```
vendor/bin/scancore dump

```

Указать имя выходного файла:

```
vendor/bin/scancore dump my_project_scan.txt

```

Ограничить дамп только файлами из определённой подпапки (например, modules/tasks):

```
vendor/bin/scancore dump . modules/tasks

```

Пояснения:

Команда нужна для того, чтобы вывести в единый файл всё содержимое файлов вашего проекта или отдельной его папки.

`.` во втором аргументе использует вывод в файл по умолчанию, используется, для того, чтобы не менять файл вывода, но указать определённую директорию сканирования

Содержимое результирующего файла:

```
Файл: modules/tasks/Module.php
