使用symfony 6/php8配置Rector并使用简单规则



我想使用Rector来重构我的代码,因为我将我的项目更新为symfony 5.4到6.1。我的php项目版本:8.1.5

所以,我想使用一个简单的规则,谁将我的注释更改为attribut with rector。但当我用命令执行rector时:vendor/bin/rector process src

校长通知我:[好的]校长完了!

但我的文件不会更改,实体注释也不会更改。我试着按照这个文档来配置我的rector.php,并将rector与symfony一起使用。

https://github.com/rectorphp/rector-symfony

https://github.com/rectorphp/rector

我做错了什么?

这是我的校长php

<?php
declare(strict_types=1);
use RectorConfigRectorConfig;
use RectorPhp80ValueObjectAnnotationToAttribute;
use RectorPhp80RectorClass_AnnotationToAttributeRector;
use RectorSymfonyRectorMethodCallStringFormTypeToClassRector;
use RectorSymfonyRectorClass_CommandPropertyToAttributeRector;
return static function (RectorConfig $rectorConfig): void {
$rectorConfig->paths([
__DIR__ . '/src'
]);
$rectorConfig->phpstanConfig(__DIR__ . '/phpstan.neon');
$rectorConfig->symfonyContainerXml(__DIR__ . '/var/cache/dev/App_KernelDevDebugContainer.xml');

$rectorConfig->ruleWithConfiguration(
AnnotationToAttributeRector::class,
[new AnnotationToAttribute('SymfonyRoutingAnnotationRoute')]
);
// register a single rule
//$rectorConfig->rule(CommandPropertyToAttributeRector::class);
// define sets of rules
/* $rectorConfig->sets([
SymfonySetList::SYMFONY_60,
SymfonySetList::SYMFONY_CODE_QUALITY,
SymfonySetList::SYMFONY_CONSTRUCTOR_INJECTION,
]);*/
};

这是我的composer.json


{
"type": "project",
"license": "proprietary",
"minimum-stability": "dev",
"prefer-stable": true,
"require": {
"php": ">=7.2.5",
"ext-ctype": "*",
"ext-iconv": "*",
"composer/package-versions-deprecated": "1.11.99.1",
"doctrine/annotations": "^1.12",
"doctrine/dbal": "^2.0",
"doctrine/doctrine-bundle": "^2.2",
"doctrine/doctrine-fixtures-bundle": "^3.4",
"doctrine/doctrine-migrations-bundle": "^3.0",
"doctrine/orm": "^2.8",
"fakerphp/faker": "^1.19",
"gedmo/doctrine-extensions": "^3.8",
"giggsey/libphonenumber-for-php": "^8.12",
"knplabs/knp-paginator-bundle": "^5.3",
"phpdocumentor/reflection-docblock": "^5.2",
"sensio/framework-extra-bundle": "^6.2",
"symfony/asset": "6.1.*",
"symfony/console": "6.1.*",
"symfony/doctrine-bridge": "6.1.*",
"symfony/dotenv": "6.1.*",
"symfony/expression-language": "6.1.*",
"symfony/flex": "^1.3.1",
"symfony/form": "6.1.*",
"symfony/framework-bundle": "6.1.*",
"symfony/http-client": "6.1.*",
"symfony/http-foundation": "6.1.*",
"symfony/intl": "6.1.*",
"symfony/mailer": "6.1.*",
"symfony/mime": "6.1.*",
"symfony/monolog-bundle": "^3.1",
"symfony/notifier": "6.1.*",
"symfony/options-resolver": "6.1.*",
"symfony/process": "6.1.*",
"symfony/property-access": "6.1.*",
"symfony/property-info": "5.4.*",
"symfony/proxy-manager-bridge": "6.1.*",
"symfony/rate-limiter": "6.1.*",
"symfony/runtime": "6.1.*",
"symfony/security-bundle": "6.1.*",
"symfony/serializer": "6.1.*",
"symfony/string": "6.1.*",
"symfony/translation": "6.1.*",
"symfony/twig-bundle": "6.1.*",
"symfony/validator": "6.1.*",
"symfony/web-link": "6.1.*",
"symfony/webpack-encore-bundle": "^1.14",
"symfony/yaml": "6.0.*",
"twig/extra-bundle": "^2.12|^3.0",
"twig/twig": "^2.12|^3.0"
},
"require-dev": {
"fakerphp/faker": "^1.19",
"phpstan/phpstan": "^1.8",
"phpstan/phpstan-doctrine": "^1.3",
"rector/rector": "^0.13.9",
"symfony/browser-kit": "6.1.*",
"symfony/css-selector": "6.1.*",
"symfony/debug-bundle": "6.1.*",
"symfony/maker-bundle": "^1.30",
"symfony/phpunit-bridge": "6.1.*",
"symfony/stopwatch": "6.1.*",
"symfony/var-dumper": "6.1.*",
"symfony/web-profiler-bundle": "6.1.*"
},

谢谢你的帮助!

清除校长缓存对我有效:

vendor/bin/rector process --clear-cache --dry-run

所以,这里的问题是composer.json 中的php版本

我们只需要将php版本7更改为8

"php":"gt=7.2.5";至";php":"8.0〃;

再见

它对我有效:

use RectorSymfonySetSymfonySetList;
use RectorConfigRectorConfig;
use RectorDoctrineSetDoctrineSetList;
use RectorSymfonySetSensiolabsSetList;
use RectorSetValueObjectSetList;
return static function (RectorConfig $rectorConfig): void {
$rectorConfig->paths([
__DIR__ . '/src'
]);
$rectorConfig->symfonyContainerXml(__DIR__ . '/var/cache/dev/App_KernelDevDebugContainer.xml');
$rectorConfig->sets([
SymfonySetList::SYMFONY_60,
SymfonySetList::SYMFONY_CODE_QUALITY,
SymfonySetList::SYMFONY_CONSTRUCTOR_INJECTION
]);

$rectorConfig->sets([
DoctrineSetList::ANNOTATIONS_TO_ATTRIBUTES,
SymfonySetList::ANNOTATIONS_TO_ATTRIBUTES,
SensiolabsSetList::FRAMEWORK_EXTRA_61 

]);

};

我不确定确切的原因,但对我来说,解决方案是删除路径配置:

$rectorConfig->paths([
__DIR__ . '/src'
]);

并且只使用该路径作为二进制调用的参数:

php vendor/bin/rector process <PATH>

最新更新