bearsunday/rector-bearsunday

升级 BEAR.Sunday 框架的 Rector 规则

1.x-dev 2023-09-26 09:30 UTC

This package is auto-updated.

Last update: 2024-09-11 00:57:14 UTC


README

rector/rector 对 BEAR.Sunday 的规则。

规则

RayDiNamedAnnotationRector

将方法中的 @Named 注解更改为参数中的 #[Named] 属性。

class SomeClass
{
    /**
-    * @Named("a=foo, b=bar")
     * @Foo
     */
-    public function __construct(int $a, int $b)
+    public function __construct(#[Named('foo')] int $a, #[Named('bar')] int $b)
    {
    }

安装

composer require bearsunday/rector-bearsunday 1.x-dev --dev

如何将基于注解的 Ray 或 BEAR 应用程序转换为属性

  1. rector的安装

运行rector-bearsunday需要rector v0.12。为了安装特定版本的rector,需要安装bamarni/composer-bin-plugin。安装完成后,复制配置文件。

运行rector-bearsunday需要rector v0.12。安装 bamarni/composer-bin-plugin 以安装特定版本的rector。安装后,复制配置文件。

composer require --dev bamarni/composer-bin-plugin
composer bin rector require bearsunday/rector-bearsunday 1.x-dev --dev
cp ./vendor-bin/rector/vendor/bearsunday/rector-bearsunday/rector.php rector-bearsunday.php

rector-bearsunday.php配置文件中指定要转换的属性和要应用的目录。

<?php

declare(strict_types=1);

use BEAR\Package\Annotation\ReturnCreatedResource;
use BEAR\RepositoryModule\Annotation\Cacheable;
use BEAR\RepositoryModule\Annotation\Purge;
use BEAR\RepositoryModule\Annotation\Refresh;
use BEAR\Resource\Annotation\AppName;
use BEAR\Resource\Annotation\ContextScheme;
use BEAR\Resource\Annotation\Embed;
use BEAR\Resource\Annotation\ImportAppConfig;
use BEAR\Resource\Annotation\Link;
use BEAR\Resource\Annotation\OptionsBody;
use BEAR\Resource\Annotation\ResourceParam;
use Ray\AuraSqlModule\Annotation\ReadOnlyConnection;
use Ray\AuraSqlModule\Annotation\Transactional;
use Ray\AuraSqlModule\Annotation\WriteConnection;
use Ray\Di\Di\Assisted;
use Ray\Di\Di\Inject;
use Ray\Di\Di\Named;
use Ray\Di\Di\PostConstruct;
use Ray\Di\Di\Qualifier;
use Ray\Di\Di\Set;
use Ray\PsrCacheModule\Annotation\CacheDir;
use Ray\PsrCacheModule\Annotation\CacheNamespace;
use Ray\PsrCacheModule\Annotation\Local;
use Ray\PsrCacheModule\Annotation\Shared;
use Ray\Query\Annotation\Query;
use Ray\RoleModule\Annotation\RequiresRoles;
use Ray\WebContextParam\Annotation\CookieParam;
use Ray\WebContextParam\Annotation\EnvParam;
use Ray\WebContextParam\Annotation\FilesParam;
use Ray\WebContextParam\Annotation\FormParam;
use Ray\WebContextParam\Annotation\QueryParam;
use Ray\WebContextParam\Annotation\ServerParam;
use Rector\BearSunday\RayDiNamedAnnotation\Rector\ClassMethod\RayDiNamedAnnotationRector;
use Rector\Config\RectorConfig;
use Rector\Php80\Rector\Class_\AnnotationToAttributeRector;
use Rector\Php80\ValueObject\AnnotationToAttribute;

require __DIR__ . '/vendor/autoload.php';
require __DIR__ . '/vendor-bin/rector/vendor/autoload.php';

return static function (RectorConfig $rectorConfig): void {
    $services = $rectorConfig->services();
    $rectorConfig->paths([
        __DIR__ . '/src',
        __DIR__ . '/tests',
    ]);

    // Update @Named method annotations to #[Named] parameter attributes
    $services->set(RayDiNamedAnnotationRector::class);

    $rectorConfig->ruleWithConfiguration(AnnotationToAttributeRector::class, [
        // ray/aura-sql-module
        new AnnotationToAttribute(ReadOnlyConnection::class),
        new AnnotationToAttribute(WriteConnection::class),
        new AnnotationToAttribute(Transactional::class),
        // ray/di
        new AnnotationToAttribute(Assisted::class),
        new AnnotationToAttribute(Inject::class),
        new AnnotationToAttribute(Named::class),
        new AnnotationToAttribute(PostConstruct::class),
        new AnnotationToAttribute(Set::class),
        new AnnotationToAttribute(Qualifier::class),
        // ray/psr-cache-module
        new AnnotationToAttribute(CacheNamespace::class),
        new AnnotationToAttribute(Local::class),
        new AnnotationToAttribute(Shared::class),
        new AnnotationToAttribute(CacheDir::class),
        new AnnotationToAttribute(AppName::class),
        new AnnotationToAttribute(ContextScheme::class),
        // ray/role-module
        new AnnotationToAttribute(RequiresRoles::class),
        // ray/web-context
        new AnnotationToAttribute(CookieParam::class),
        new AnnotationToAttribute(EnvParam::class),
        new AnnotationToAttribute(FilesParam::class),
        new AnnotationToAttribute(FormParam::class),
        new AnnotationToAttribute(QueryParam::class),
        new AnnotationToAttribute(ServerParam::class),
        new AnnotationToAttribute(ReturnCreatedResource::class),

        // bear/query-module
        new AnnotationToAttribute(Query::class),
        // bear/query-repository
        new AnnotationToAttribute(Cacheable::class),
        new AnnotationToAttribute(Purge::class),
        new AnnotationToAttribute(Refresh::class),
        // bear/resource
        new AnnotationToAttribute(Embed::class),
        new AnnotationToAttribute(ImportAppConfig::class),
        new AnnotationToAttribute(Link::class),
        new AnnotationToAttribute(OptionsBody::class),
        new AnnotationToAttribute(ResourceParam::class),
};

执行

composer-bin-plugin的设置会改变rector的执行路径。

rector的执行路径取决于composer-bin-plugin的设置。

./vendor/bin/rector -c ./rector-bearsunday.php --dry-run

或者

./vendor-bin/rector/vendor/bin/rector -c ./rector-bearsunday.php --dry-run

参阅