kaspiman / rector-longrunning-rules
Custom Rector rules for long-running PHP apps and more!
Requires
- php: ^8.1
- rector/rector: ^1.0
Requires (Dev)
- phpmd/phpmd: ^2.15
- phpstan/phpstan: ^1.11
- phpstan/phpstan-deprecation-rules: ^1.2
- phpunit/phpunit: ^10.5
- squizlabs/php_codesniffer: ^3.10
- symplify/easy-coding-standard: ^12.3
- vimeo/psalm: ^5.26
This package is auto-updated.
Last update: 2024-11-08 12:33:07 UTC
README
Правила для анализатора Rector для поиска и устранения проблем в долгоживущих приложениях.
Внедрите Rector в пайплайн вашего проекта и постоянно контролируйте качество кода.
Используйте всё или то, что нужно.
Репозиторий подготовлен специально для конференции Podlodka PHP Crew (сезон 5) в рамках доклада "PHP будет долго жить. Переезжаем на Roadrunner" (будет ссылка на запись), презентация доступна по ссылке.
Использование
Установите Rector в проект:
composer require rector/rector --dev
Установите правила из этого репозитория:
composer require kaspiman/rector-longrunning-rules:^1.0 --dev
Добавьте и настройте правила в свой конфиг rector.php
:
<?php use Rector\Renaming\Rector\ConstFetch\RenameConstantRector; return static function (RectorConfig $config): void { // общие настройки, к примеру директория с проектом... $config->paths([ 'src', ]); // Встроенное правило в Rector, запрещаем константу PHP_SAPI, меняя на несуществующую $config->ruleWithConfiguration(RenameConstantRector::class, [ 'PHP_SAPI' => 'FORBID', ]); // Правила без конфигурации $config->rules([ IncludeRequireRector::class, ExitAndDieRector::class, EchoForbidRector::class, ]); // Правила с возможностью настроить поведение // Список глобальных переменных находится в файле, можно указать свой набор $config->ruleWithConfiguration(GlobalVarsForbidRector::class, [ 'vars' => include 'src/Rector/Resources/global-vars.php' ]); // Список запрещённых находится в файле, можно указать свой набор или перезаписать список отдельными функциями $config->ruleWithConfiguration(ForbiddenFunctionsRector::class, [ 'functions' => include 'src/Rector/Resources/forbidden-functions.php', ]); // Поиск скрытых состояний $config->ruleWithConfiguration(ResetStateCheckerRector::class, [ 'className' => ResetInterface::class, // Имя интерфейса для сброса, например у Symfony это Symfony\Contracts\Service\ResetInterface (https://github.com/symfony/contracts/blob/main/Service/ResetInterface.php) 'methodName' => 'reset', // имя метод сброса у этого интерфейса 'ignoreClassNames' => [], // Игнорирование определённых имён классов 'ignoreClassPrefixes' => [ // Игнорирование определённых префиксов, например DTO и прочих объектов-переносчиков состояния 'Dto', 'Mock', 'Stub', 'Item', 'Builder', 'Collection', 'Filter', 'Criteria', 'Context', 'Container', 'Object', 'Aggregate', 'Request', 'Response', 'Payload', 'Event', 'Exception', 'Result', 'Message', 'Config', 'Param', 'Params', 'Data', ], 'ignoreAttributes' => [ // Игнорирование определённых аттрибутов, например сущностей Doctrine 'Doctrine\ORM\Mapping\Entity', ], ]); }
Запустите Rector в пробном режиме:
vendor/bin/rector --dry-run
Проверьте предложенные изменения, по необходимости проигнорируйте некоторые из них с помощью аннотации:
public function work(): { /** * @rector-suppress ForbiddenFunctionsRector */ ini_set('memory_limit', '42G'); }
Возможно игнорировать целый класс или его отдельные поля для правила ResetStateCheckerRector:
/** * @rector-suppress ResetStateCheckerRector */ class SomeBadService { /** * @rector-suppress ResetStateCheckerRector */ private array $cache = []; }
Запустите Rector в рабочем режиме и примените изменения в коду, проверьте корректность:
vendor/bin/rector
Готово.