Move from SETS parameter to explicit import() (#6375)

This commit is contained in:
Tomas Votruba 2021-05-06 22:06:31 +02:00 committed by GitHub
parent 0800c7cdc3
commit ac82ae6a63
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 91 additions and 101 deletions

View File

@ -112,17 +112,14 @@ And modify it:
```php ```php
// rector.php // rector.php
use Rector\Core\Configuration\Option;
use Rector\Php74\Rector\Property\TypedPropertyRector; use Rector\Php74\Rector\Property\TypedPropertyRector;
use Rector\Set\ValueObject\SetList; use Rector\Set\ValueObject\SetList;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
return static function (ContainerConfigurator $containerConfigurator): void { return static function (ContainerConfigurator $containerConfigurator): void {
// here we can define, what sets of rules will be applied // here we can define, what sets of rules will be applied
$parameters = $containerConfigurator->parameters();
// tip: use "SetList" class to autocomplete sets // tip: use "SetList" class to autocomplete sets
$parameters->set(Option::SETS, [SetList::CODE_QUALITY]); $containerConfigurator->import(SetList::CODE_QUALITY);
// register single rule // register single rule
$services = $containerConfigurator->services(); $services = $containerConfigurator->services();

View File

@ -16,13 +16,11 @@ return static function (ContainerConfigurator $containerConfigurator): void {
$parameters->set(Option::PHPSTAN_FOR_RECTOR_PATH, __DIR__ . '/phpstan-for-downgrade.neon'); $parameters->set(Option::PHPSTAN_FOR_RECTOR_PATH, __DIR__ . '/phpstan-for-downgrade.neon');
$parameters->set(Option::SETS, [ $containerConfigurator->import(DowngradeSetList::PHP_80);
DowngradeSetList::PHP_80, $containerConfigurator->import(DowngradeSetList::PHP_74);
DowngradeSetList::PHP_74, $containerConfigurator->import(DowngradeSetList::PHP_73);
DowngradeSetList::PHP_73, $containerConfigurator->import(DowngradeSetList::PHP_72);
DowngradeSetList::PHP_72, $containerConfigurator->import(DowngradeSetList::PHP_71);
DowngradeSetList::PHP_71,
]);
}; };
/** /**

View File

@ -25,12 +25,10 @@ return static function (ContainerConfigurator $containerConfigurator): void {
$parameters->set(Option::PHPSTAN_FOR_RECTOR_PATH, __DIR__ . '/phpstan-for-downgrade.neon'); $parameters->set(Option::PHPSTAN_FOR_RECTOR_PATH, __DIR__ . '/phpstan-for-downgrade.neon');
$parameters->set(Option::SETS, [ $containerConfigurator->import(DowngradeSetList::PHP_80);
DowngradeSetList::PHP_80, $containerConfigurator->import(DowngradeSetList::PHP_74);
DowngradeSetList::PHP_74, $containerConfigurator->import(DowngradeSetList::PHP_73);
DowngradeSetList::PHP_73, $containerConfigurator->import(DowngradeSetList::PHP_72);
DowngradeSetList::PHP_72,
]);
}; };
/** /**

View File

@ -17,8 +17,7 @@ use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigura
return static function (ContainerConfigurator $containerConfigurator): void { return static function (ContainerConfigurator $containerConfigurator): void {
// here we can define, what sets of rules will be applied // here we can define, what sets of rules will be applied
$parameters = $containerConfigurator->parameters(); $containerConfigurator->import(SetList::CODE_QUALITY);
$parameters->set(Option::SETS, [SetList::CODE_QUALITY]);
// register single rule // register single rule
$services = $containerConfigurator->services(); $services = $containerConfigurator->services();

View File

@ -52,7 +52,10 @@ return static function (ContainerConfigurator $containerConfigurator): void {
__DIR__ . '/config/set', __DIR__ . '/config/set',
]); ]);
$parameters->set(Option::SETS, [SetList::PSR_12, SetList::SYMPLIFY, SetList::COMMON, SetList::CLEAN_CODE]); $containerConfigurator->import(SetList::PSR_12);
$containerConfigurator->import(SetList::SYMPLIFY);
$containerConfigurator->import(SetList::COMMON);
$containerConfigurator->import(SetList::CLEAN_CODE);
$parameters->set(Option::SKIP, [ $parameters->set(Option::SKIP, [
'*/Source/*', '*/Source/*',

View File

@ -23,6 +23,25 @@ use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigura
use Symplify\SymfonyPhpConfig\ValueObjectInliner; use Symplify\SymfonyPhpConfig\ValueObjectInliner;
return static function (ContainerConfigurator $containerConfigurator): void { return static function (ContainerConfigurator $containerConfigurator): void {
$parameters = $containerConfigurator->parameters();
$parameters->set(Option::SETS, [SetList::NAMING]);
// include sets
$containerConfigurator->import(SetList::CODING_STYLE);
$containerConfigurator->import(SetList::CODE_QUALITY);
$containerConfigurator->import(SetList::CODE_QUALITY_STRICT);
$containerConfigurator->import(SetList::DEAD_CODE);
$containerConfigurator->import(SetList::PRIVATIZATION);
$containerConfigurator->import(SetList::NAMING);
$containerConfigurator->import(SetList::TYPE_DECLARATION);
$containerConfigurator->import(SetList::PHP_71);
$containerConfigurator->import(SetList::PHP_72);
$containerConfigurator->import(SetList::PHP_73);
$containerConfigurator->import(SetList::EARLY_RETURN);
$containerConfigurator->import(SetList::TYPE_DECLARATION_STRICT);
$containerConfigurator->import(NetteSetList::NETTE_UTILS_CODE_QUALITY);
$containerConfigurator->import(PHPUnitSetList::PHPUNIT_CODE_QUALITY);
$services = $containerConfigurator->services(); $services = $containerConfigurator->services();
$configuration = ValueObjectInliner::inline([ $configuration = ValueObjectInliner::inline([
@ -42,23 +61,6 @@ return static function (ContainerConfigurator $containerConfigurator): void {
$parameters = $containerConfigurator->parameters(); $parameters = $containerConfigurator->parameters();
$parameters->set(Option::SETS, [
SetList::CODING_STYLE,
SetList::CODE_QUALITY,
SetList::CODE_QUALITY_STRICT,
SetList::DEAD_CODE,
SetList::PRIVATIZATION,
SetList::NAMING,
SetList::TYPE_DECLARATION,
SetList::PHP_71,
SetList::PHP_72,
SetList::PHP_73,
SetList::EARLY_RETURN,
SetList::TYPE_DECLARATION_STRICT,
NetteSetList::NETTE_UTILS_CODE_QUALITY,
PHPUnitSetList::PHPUNIT_CODE_QUALITY,
]);
$parameters->set(Option::PATHS, [ $parameters->set(Option::PATHS, [
__DIR__ . '/src', __DIR__ . '/src',
__DIR__ . '/rules', __DIR__ . '/rules',

View File

@ -99,6 +99,7 @@ final class Option
public const AUTOLOAD_PATHS = 'autoload_paths'; public const AUTOLOAD_PATHS = 'autoload_paths';
/** /**
* @deprecated Use $containerConfigurator->import() as it does the same job, just better and more explicit
* @var string * @var string
*/ */
public const SETS = 'sets'; public const SETS = 'sets';
@ -138,11 +139,6 @@ final class Option
*/ */
public const OPTION_CONFIG = 'config'; public const OPTION_CONFIG = 'config';
/**
* @var string
*/
public const FIX = 'fix';
/** /**
* @var string * @var string
*/ */

View File

@ -4,7 +4,6 @@ declare(strict_types=1);
namespace Rector\Core\Console\Command; namespace Rector\Core\Console\Command;
use Rector\Core\Configuration\Option;
use Rector\Core\Contract\Rector\RectorInterface; use Rector\Core\Contract\Rector\RectorInterface;
use Rector\PostRector\Contract\Rector\PostRectorInterface; use Rector\PostRector\Contract\Rector\PostRectorInterface;
use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Command\Command;
@ -12,8 +11,6 @@ use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle; use Symfony\Component\Console\Style\SymfonyStyle;
use Symplify\PackageBuilder\Console\ShellCode; use Symplify\PackageBuilder\Console\ShellCode;
use Symplify\PackageBuilder\Parameter\ParameterProvider;
use Symplify\SmartFileSystem\SmartFileInfo;
final class ShowCommand extends Command final class ShowCommand extends Command
{ {
@ -22,11 +19,6 @@ final class ShowCommand extends Command
*/ */
private $symfonyStyle; private $symfonyStyle;
/**
* @var ParameterProvider
*/
private $parameterProvider;
/** /**
* @var RectorInterface[] * @var RectorInterface[]
*/ */
@ -35,10 +27,9 @@ final class ShowCommand extends Command
/** /**
* @param RectorInterface[] $rectors * @param RectorInterface[] $rectors
*/ */
public function __construct(SymfonyStyle $symfonyStyle, ParameterProvider $parameterProvider, array $rectors) public function __construct(SymfonyStyle $symfonyStyle, array $rectors)
{ {
$this->symfonyStyle = $symfonyStyle; $this->symfonyStyle = $symfonyStyle;
$this->parameterProvider = $parameterProvider;
$this->rectors = $rectors; $this->rectors = $rectors;
parent::__construct(); parent::__construct();
@ -52,7 +43,6 @@ final class ShowCommand extends Command
protected function execute(InputInterface $input, OutputInterface $output): int protected function execute(InputInterface $input, OutputInterface $output): int
{ {
$this->reportLoadedRectors(); $this->reportLoadedRectors();
$this->reportLoadedSets();
return ShellCode::SUCCESS; return ShellCode::SUCCESS;
} }
@ -83,28 +73,4 @@ final class ShowCommand extends Command
$this->symfonyStyle->warning($warningMessage); $this->symfonyStyle->warning($warningMessage);
} }
} }
private function reportLoadedSets(): void
{
$sets = (array) $this->parameterProvider->provideParameter(Option::SETS);
if ($sets === []) {
return;
}
$this->symfonyStyle->newLine(2);
$this->symfonyStyle->title('Loaded Sets');
sort($sets);
$setFilePaths = [];
foreach ($sets as $set) {
$setFileInfo = new SmartFileInfo($set);
$setFilePaths[] = $setFileInfo->getRelativeFilePathFromCwd();
}
$this->symfonyStyle->listing($setFilePaths);
$message = sprintf('%d loaded sets', count($sets));
$this->symfonyStyle->success($message);
}
} }

View File

@ -0,0 +1,40 @@
<?php
declare(strict_types=1);
namespace Rector\Core\DependencyInjection\CompilerPass;
use Rector\Core\Configuration\Option;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
final class DeprecationWarningCompilerPass implements CompilerPassInterface
{
/**
* @var array<string, string>
*/
private const DEPRECATED_PARAMETERS = [
Option::SETS => 'Use $containerConfigurator->import(<set>); instead',
];
public function process(ContainerBuilder $containerBuilder): void
{
$parametersBag = $containerBuilder->getParameterBag();
foreach (self::DEPRECATED_PARAMETERS as $parameter => $message) {
if (! $parametersBag->has($parameter)) {
continue;
}
$setsParameters = $parametersBag->get($parameter);
if ($setsParameters === []) {
continue;
}
$message = sprintf('The "%s" parameter is deprecated. %s', $parameter, $message);
trigger_error($message);
// to make it noticable
sleep(2);
}
}
}

View File

@ -6,6 +6,7 @@ namespace Rector\Core\HttpKernel;
use Rector\Core\Contract\Rector\RectorInterface; use Rector\Core\Contract\Rector\RectorInterface;
use Rector\Core\DependencyInjection\Collector\ConfigureCallValuesCollector; use Rector\Core\DependencyInjection\Collector\ConfigureCallValuesCollector;
use Rector\Core\DependencyInjection\CompilerPass\DeprecationWarningCompilerPass;
use Rector\Core\DependencyInjection\CompilerPass\MakeRectorsPublicCompilerPass; use Rector\Core\DependencyInjection\CompilerPass\MakeRectorsPublicCompilerPass;
use Rector\Core\DependencyInjection\CompilerPass\MergeImportedRectorConfigureCallValuesCompilerPass; use Rector\Core\DependencyInjection\CompilerPass\MergeImportedRectorConfigureCallValuesCompilerPass;
use Rector\Core\DependencyInjection\CompilerPass\RemoveSkippedRectorsCompilerPass; use Rector\Core\DependencyInjection\CompilerPass\RemoveSkippedRectorsCompilerPass;
@ -108,6 +109,8 @@ final class RectorKernel extends Kernel
$containerBuilder->addCompilerPass(new AutowireInterfacesCompilerPass([RectorInterface::class])); $containerBuilder->addCompilerPass(new AutowireInterfacesCompilerPass([RectorInterface::class]));
$containerBuilder->addCompilerPass(new MakeRectorsPublicCompilerPass()); $containerBuilder->addCompilerPass(new MakeRectorsPublicCompilerPass());
$containerBuilder->addCompilerPass(new DeprecationWarningCompilerPass());
// add all merged arguments of Rector services // add all merged arguments of Rector services
$containerBuilder->addCompilerPass( $containerBuilder->addCompilerPass(
new MergeImportedRectorConfigureCallValuesCompilerPass($this->configureCallValuesCollector) new MergeImportedRectorConfigureCallValuesCompilerPass($this->configureCallValuesCollector)

View File

@ -55,8 +55,7 @@ final class MissingRectorRulesReporter
$this->symfonyStyle->newLine(1); $this->symfonyStyle->newLine(1);
$this->symfonyStyle->title('2. Add set of rules to "rector.php"'); $this->symfonyStyle->title('2. Add set of rules to "rector.php"');
$this->symfonyStyle->writeln(' $parameters = $containerConfigurator->parameters();'); $this->symfonyStyle->writeln(' $containerConfigurator->import(SetList::...);');
$this->symfonyStyle->writeln(' $parameters->set(Option::SETS, [...]);');
$this->symfonyStyle->newLine(1); $this->symfonyStyle->newLine(1);
$this->symfonyStyle->title('Missing "rector.php" in your project? Let Rector create it for you'); $this->symfonyStyle->title('Missing "rector.php" in your project? Let Rector create it for you');

View File

@ -12,9 +12,7 @@ return static function (ContainerConfigurator $containerConfigurator): void {
$parameters = $containerConfigurator->parameters(); $parameters = $containerConfigurator->parameters();
// Define what rule sets will be applied // Define what rule sets will be applied
$parameters->set(Option::SETS, [ $containerConfigurator->import(SetList::DEAD_CODE);
SetList::DEAD_CODE,
]);
// get services (needed for register a single rule) // get services (needed for register a single rule)
// $services = $containerConfigurator->services(); // $services = $containerConfigurator->services();

View File

@ -79,13 +79,13 @@ final class ConfigurableRectorImportConfigCallsMergeTest extends AbstractRectorT
yield [ yield [
__DIR__ . '/config/one_set_with_own_rename.php', [ __DIR__ . '/config/one_set_with_own_rename.php', [
'Old' => 'New',
'PHPUnit_Framework_MockObject_Stub' => 'PHPUnit\Framework\MockObject\Stub', 'PHPUnit_Framework_MockObject_Stub' => 'PHPUnit\Framework\MockObject\Stub',
'PHPUnit_Framework_MockObject_Stub_Return' => 'PHPUnit\Framework\MockObject\Stub\ReturnStub', 'PHPUnit_Framework_MockObject_Stub_Return' => 'PHPUnit\Framework\MockObject\Stub\ReturnStub',
'PHPUnit_Framework_MockObject_Matcher_Parameters' => 'PHPUnit\Framework\MockObject\Matcher\Parameters', 'PHPUnit_Framework_MockObject_Matcher_Parameters' => 'PHPUnit\Framework\MockObject\Matcher\Parameters',
'PHPUnit_Framework_MockObject_Matcher_Invocation' => 'PHPUnit\Framework\MockObject\Matcher\Invocation', 'PHPUnit_Framework_MockObject_Matcher_Invocation' => 'PHPUnit\Framework\MockObject\Matcher\Invocation',
'PHPUnit_Framework_MockObject_MockObject' => 'PHPUnit\Framework\MockObject\MockObject', 'PHPUnit_Framework_MockObject_MockObject' => 'PHPUnit\Framework\MockObject\MockObject',
'PHPUnit_Framework_MockObject_Invocation_Object' => 'PHPUnit\Framework\MockObject\Invocation\ObjectInvocation', 'PHPUnit_Framework_MockObject_Invocation_Object' => 'PHPUnit\Framework\MockObject\Invocation\ObjectInvocation',
'Old' => 'New',
], ],
]; ];
@ -105,6 +105,7 @@ final class ConfigurableRectorImportConfigCallsMergeTest extends AbstractRectorT
yield [ yield [
__DIR__ . '/config/two_sets_with_own_rename.php', [ __DIR__ . '/config/two_sets_with_own_rename.php', [
'Old' => 'New',
'Twig_SimpleFilter' => 'Twig_Filter', 'Twig_SimpleFilter' => 'Twig_Filter',
'Twig_SimpleFunction' => 'Twig_Function', 'Twig_SimpleFunction' => 'Twig_Function',
'Twig_SimpleTest' => 'Twig_Test', 'Twig_SimpleTest' => 'Twig_Test',
@ -114,7 +115,6 @@ final class ConfigurableRectorImportConfigCallsMergeTest extends AbstractRectorT
'PHPUnit_Framework_MockObject_Matcher_Invocation' => 'PHPUnit\Framework\MockObject\Matcher\Invocation', 'PHPUnit_Framework_MockObject_Matcher_Invocation' => 'PHPUnit\Framework\MockObject\Matcher\Invocation',
'PHPUnit_Framework_MockObject_MockObject' => 'PHPUnit\Framework\MockObject\MockObject', 'PHPUnit_Framework_MockObject_MockObject' => 'PHPUnit\Framework\MockObject\MockObject',
'PHPUnit_Framework_MockObject_Invocation_Object' => 'PHPUnit\Framework\MockObject\Invocation\ObjectInvocation', 'PHPUnit_Framework_MockObject_Invocation_Object' => 'PHPUnit\Framework\MockObject\Invocation\ObjectInvocation',
'Old' => 'New',
], ],
]; ];
} }

View File

@ -2,12 +2,9 @@
declare(strict_types=1); declare(strict_types=1);
use Rector\Core\Configuration\Option;
use Rector\Set\ValueObject\SetList; use Rector\Set\ValueObject\SetList;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
return static function (ContainerConfigurator $containerConfigurator): void { return static function (ContainerConfigurator $containerConfigurator): void {
$parameters = $containerConfigurator->parameters(); $containerConfigurator->import(SetList::PHPUNIT_60);
$parameters->set(Option::SETS, [SetList::PHPUNIT_60]);
}; };

View File

@ -2,15 +2,12 @@
declare(strict_types=1); declare(strict_types=1);
use Rector\Core\Configuration\Option;
use Rector\Renaming\Rector\Name\RenameClassRector; use Rector\Renaming\Rector\Name\RenameClassRector;
use Rector\Set\ValueObject\SetList; use Rector\Set\ValueObject\SetList;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
return static function (ContainerConfigurator $containerConfigurator): void { return static function (ContainerConfigurator $containerConfigurator): void {
$parameters = $containerConfigurator->parameters(); $containerConfigurator->import(SetList::PHPUNIT_60);
$parameters->set(Option::SETS, [SetList::PHPUNIT_60]);
$services = $containerConfigurator->services(); $services = $containerConfigurator->services();
$services->set(RenameClassRector::class) $services->set(RenameClassRector::class)

View File

@ -2,12 +2,10 @@
declare(strict_types=1); declare(strict_types=1);
use Rector\Core\Configuration\Option;
use Rector\Set\ValueObject\SetList; use Rector\Set\ValueObject\SetList;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
return static function (ContainerConfigurator $containerConfigurator): void { return static function (ContainerConfigurator $containerConfigurator): void {
$parameters = $containerConfigurator->parameters(); $containerConfigurator->import(SetList::PHPUNIT_60);
$containerConfigurator->import(SetList::TWIG_20);
$parameters->set(Option::SETS, [SetList::PHPUNIT_60, SetList::TWIG_20]);
}; };

View File

@ -2,15 +2,14 @@
declare(strict_types=1); declare(strict_types=1);
use Rector\Core\Configuration\Option; use Rector\PHPUnit\Set\PHPUnitSetList;
use Rector\Renaming\Rector\Name\RenameClassRector; use Rector\Renaming\Rector\Name\RenameClassRector;
use Rector\Set\ValueObject\SetList; use Rector\Symfony\Set\TwigSetList;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
return static function (ContainerConfigurator $containerConfigurator): void { return static function (ContainerConfigurator $containerConfigurator): void {
$parameters = $containerConfigurator->parameters(); $containerConfigurator->import(PHPUnitSetList::PHPUNIT_60);
$containerConfigurator->import(TwigSetList::TWIG_20);
$parameters->set(Option::SETS, [SetList::PHPUNIT_60, SetList::TWIG_20]);
$services = $containerConfigurator->services(); $services = $containerConfigurator->services();
$services->set(RenameClassRector::class) $services->set(RenameClassRector::class)