Вышла новая версия Rector 2.0

Дата публикации: 2024-12-12
Просмотры: 81

Вышла очередная стабильная версия Rector 2.0.
Rector 2 обновлен до PHPStan 2.
Rector 2 теперь работает на 10–15% быстрее.
Так же были добавлены новые функции.

Вышла новая версия Rector 2.0

Некоторые функции частично доступны в предыдущей версии, но хотелось бы выделить их, поскольку начиная с версии 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

Предыдущая статья:

Вышла новая версия Symfony 7.2
Поделиться статьей:

Комментарии:

Все комментарии проходят модерацию.
Подписка на новости
Узнавайте о новых статьях первыми.
Профиль