# Автоматизированный рефакторинг (ректор) XC_VM использует [Rector](https://getrector.com/) для модернизации устаревших PHP механических и безопасно. Ректор переписывает код на **АСТ** (не текст), поэтому каждое преобразование выполняется детерминированный и воспроизводимый. Он скорее дополняет существующие инструменты, чем заменяет их: |Инструмент|Роль| | --- | --- | | **Rector** |*Изменения* код — механическая модернизация и упрощение| |ПХПСтан|Тип отчетов/логические проблемы (`make phpstan`)| |phpcs / Слевомат|Сообщает и исправляет стиль кодирования (`make cs` / `make cs-fix`)| |Модуль PHP|Проверяет поведение (`tests/phpunit.phar`)| **Золотое правило: обнаружить → показать разницу → проверить → только после этого применить.** Никогда не наносите средство массово. к производственному коду без предварительного просмотра пробного запуска. ## Устанавливать Rector является зависимостью `require-dev` от `src/composer.json` (как PHPStan и phpcs). Это **никогда** отгружено: зафиксированное `src/vendor/` доступно только для производства. ```bash make dev-tools # composer install (incl. require-dev) — adds Rector to src/vendor ``` Перед приготовлением всегда подрезайте их: ```bash make dev-clean # composer install --no-dev — restores a production-only vendor ``` Шлюз `check-vendor-prod-only` завершается сбоем, если Rector когда-либо попадает к зарегистрированному поставщику, так что `make dev-clean` является обязательным перед любой фиксацией, которая затрагивает зависимости. ## Бежать ```bash make rector # dry-run: prints the diff, writes nothing (non-zero exit if changes pend) make rector-fix # applies the changes in place ``` Эквивалентные Composer скрипты (запускаемые из `src/`): ```bash composer refactor:dry composer refactor ``` После изменений **обратившийся** всегда запускайте полный конвейер проверки и просматривайте разницу: ```bash make cs-fix # reconcile style (tabs / K&R) with the rewritten files make phpstan php tests/phpunit.phar -c tests/phpunit.xml.dist ``` ## Конфигурация Единственная конфигурация - это [`build/rector.php`](https://github.com/Vateron-Media/XC_VM/blob/main/build/rector.php) (рядом с `build/phpstan.dist.neon` и `build/phpcs.xml.dist`). Пути привязываются с помощью `__DIR__`, поэтому он ведет себя одинаково как из корневого хранилища, так и из `src/`. ### Масштаб В области видимости находятся только деревья на основе классов PSR-4: ```text src/Core src/Domain src/Cli src/Infrastructure ``` Все остальное равно **исключенный** и должно оставаться исключенным: - `src/Public/**`, `src/Ministra/**` — view templates use short tags (`withRules([...])`. 4. Добавьте обязательные тесты (ректорские `AbstractRectorTestCase`, `before/after`, разделенные на `-----`) в **разделять** PHPUnit suite, а не `tests/Unit/`, поскольку основное тестовое задание выполняется на основе поставщик только для производства, в котором отсутствуют тестовые классы ректора. ## КИ Вакансии ректора-консультанта пока нет. Планируется, что это будет отдельная работа только для проверки (промежуточная), которая сообщает, но никогда не изменяет репозиторий — смотрите дорожную карту рефакторинга проекта.