Вышла новая версия Rector 2.0
Вышла очередная стабильная версия Rector 2.0.
Rector 2 обновлен до PHPStan 2.
Rector 2 теперь работает на 10–15% быстрее.
Так же были добавлены новые функции.
Некоторые функции частично доступны в предыдущей версии, но хотелось бы выделить их, поскольку начиная с версии Rector 1.0 вы можете использовать их все вместе.
The --only Option to run 1 Rule
На данный момент репозиторий Rector имеет rector.php
конфигурацию, которая позволяет запускать более 350 правил. Что, если мы добавим одно пользовательское правило и захотим запустить только его? Нам придется закомментировать все остальные правила, запустить Rector, а затем раскомментировать их обратно. Это много ручной работы, не так ли?
Теперь мы можем использовать --only
опцию для запуска только одного правила:
vendor/bin/rector process src --only="Utils\Rector\MoveTraitsToConstructorRector"
Introducing Composer-based sets
В проектах наборы поставщиков, такие как Symfony, Twig, Laravel или Doctrine, имеют много наборов, каждый из которых содержит группу или правила для определенной версии. У Symfony более 20 наборов, но давайте рассмотрим более простой пример — Twig:
use Rector\Config\RectorConfig;
return RectorConfig::configure()
->withSets([
\Rector\Symfony\Set\TwigSetList::TWIG_112,
\Rector\Symfony\Set\TwigSetList::TWIG_127,
\Rector\Symfony\Set\TwigSetList::TWIG_134,
\Rector\Symfony\Set\TwigSetList::TWIG_20,
\Rector\Symfony\Set\TwigSetList::TWIG_24,
])
Это не кажется правильным по многим причинам. Это может привести к:
- раздутый
rector.php
файл - пропустил новый набор, так как нам приходится всегда добавлять новые наборы по мере их публикации
- конфликтующие изменения, так как версия 2.4 может удалить что-то добавленное в версии 1.12 с разницей во много лет
Вместо этого ректор должен иметь возможность выбрать версию из установленной и предоставить только соответствующие правила.
Полностью автоматизированные, например:
return RectorConfig::configure()
->withComposerBased(twig: true)
В настоящее время поддерживаются наборы на основе twig
, doctrine
и .phpunit
Polyfill Packages by Default
Включены полифиллы по умолчанию при ->withPhpSets()
вызове. Так что вы можете удалить дополнительный метод:
use Rector\Config\RectorConfig;
return RectorConfig::configure()
- ->withPhpPolyfill()
->withPhpSets();
Это работает для всех ->withPhp*Sets()
Smarter Annotations to Attributes sets
Rector предоставляет аннотации к обновлению атрибутов со дня PHP 8.0. Вы можете легко включить их rector.php:
use Rector\Config\RectorConfig;
return RectorConfig::configure()
->withAttributesSets(symfony: true, phpunit: true, doctrine: true);
На самом деле, некоторые пакеты добавляют поддержку атрибутов немного позже, например, Behat
. Чтобы использовать их в ващем проекте, придется изменить конфигурацию:
use Rector\Config\RectorConfig;
return RectorConfig::configure()
- ->withAttributesSets(symfony: true, phpunit: true, doctrine: true);
+ ->withAttributesSets(symfony: true, phpunit: true, doctrine: true, behat: true);
Но у кого есть время проверять, есть ли у того или иного пакета новые наборы атрибутов? Вместо этого сделайте метод пустым:
use Rector\Config\RectorConfig;
return RectorConfig::configure()
- ->withAttributesSets(symfony: true, phpunit: true, doctrine: true);
+ ->withAttributesSets();
Теперь Rector будет автоматически подбирать все наборы атрибутов.
Также Rector теперь будет проверять, существует ли атрибут на самом деле, прежде чем добавлять его.
Например, #[Route]
атрибут не был добавлен до Symfony 5.2. Если вы используете Symfony 5.1, Rector не будет вносить никаких изменений в ваш код.
Leaner Custom Rules
Больше не нужно писать getRuleDefinition()
для пользовательских правил. Теперь можно наконец отказаться от этого метода:
use Rector\Rector\AbstractRector;
-use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
-use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
Final class SimpleRector extends AbstractRector
{
- public function getRuleDefinition(): RuleDefinition
- {
- return new RuleDefinition('// @todo fill the description', [
- new CodeSample('...', '...'),
- ]);
- }
// valuable code starts here
}
Ссылка на источник: https://getrector.com/blog/5-new-features-in-rector-20