Skip to content

Commit

Permalink
[DX] Various config merge, improve RectorConfig methods (#2371)
Browse files Browse the repository at this point in the history
  • Loading branch information
TomasVotruba committed May 27, 2022
1 parent a2d6da8 commit 45eef47
Show file tree
Hide file tree
Showing 9 changed files with 106 additions and 92 deletions.
55 changes: 53 additions & 2 deletions config/config.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,65 @@

declare(strict_types=1);

use OndraM\CiDetector\CiDetector;
use Rector\Caching\ValueObject\Storage\MemoryCacheStorage;
use Rector\Config\RectorConfig;
use Rector\Core\Bootstrap\ExtensionConfigResolver;
use Symplify\EasyParallel\ValueObject\EasyParallelConfig;
use Symplify\PackageBuilder\Yaml\ParametersMerger;

return static function (RectorConfig $rectorConfig): void {
$rectorConfig->import(__DIR__ . '/services.php');
$rectorConfig->import(__DIR__ . '/services-rules.php');
$rectorConfig->import(__DIR__ . '/services-packages.php');
$rectorConfig->import(__DIR__ . '/parameters.php');

// make use of https://github.com/symplify/easy-parallel
$rectorConfig->import(EasyParallelConfig::FILE_PATH);

$rectorConfig->paths([]);
$rectorConfig->skip([]);

$rectorConfig->autoloadPaths([]);
$rectorConfig->bootstrapFiles([]);
$rectorConfig->parallel(seconds: 120, maxNumberOfProcess: 16, jobSize: 20);

$rectorConfig->disableImportNames();
$rectorConfig->importShortClasses();

$rectorConfig->fileExtensions(['php']);
$rectorConfig->nestedChainMethodCallLimit(60);

$rectorConfig->cacheDirectory(sys_get_temp_dir() . '/rector_cached_files');

$services = $rectorConfig->services();
$services->defaults()
->public()
->autowire()
->autoconfigure();

$services->load('Rector\\', __DIR__ . '/../packages')
->exclude([
__DIR__ . '/../packages/Config/RectorConfig.php',
__DIR__ . '/../packages/*/{ValueObject,Contract,Exception}',
__DIR__ . '/../packages/BetterPhpDocParser/PhpDocInfo/PhpDocInfo.php',
__DIR__ . '/../packages/Testing/PHPUnit',
__DIR__ . '/../packages/BetterPhpDocParser/PhpDoc',
__DIR__ . '/../packages/PHPStanStaticTypeMapper/Enum',
__DIR__ . '/../packages/Caching/Cache.php',

// used in PHPStan
__DIR__ . '/../packages/NodeTypeResolver/Reflection/BetterReflection/RectorBetterReflectionSourceLocatorFactory.php',
__DIR__ . '/../packages/NodeTypeResolver/Reflection/BetterReflection/SourceLocatorProvider/DynamicSourceLocatorProvider.php',
]);

// parallel
$services->set(ParametersMerger::class);

// use faster in-memory cache in CI.
// CI always starts from scratch, therefore IO intensive caching is not worth it
$ciDetector = new CiDetector();
if ($ciDetector->isCiDetected()) {
$rectorConfig->cacheClass(MemoryCacheStorage::class);
}

$extensionConfigResolver = new ExtensionConfigResolver();
$extensionConfigFiles = $extensionConfigResolver->provide();
Expand Down
49 changes: 0 additions & 49 deletions config/parameters.php

This file was deleted.

38 changes: 0 additions & 38 deletions config/services-packages.php

This file was deleted.

1 change: 0 additions & 1 deletion config/services.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
declare(strict_types=1);

use Composer\Semver\VersionParser;

use Doctrine\Inflector\Inflector;
use Doctrine\Inflector\Rules\English\InflectorFactory;
use Ergebnis\Json\Printer\Printer;
Expand Down
35 changes: 35 additions & 0 deletions packages/Config/RectorConfig.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

namespace Rector\Config;

use Rector\Caching\Contract\ValueObject\Storage\CacheStorageInterface;
use Rector\Core\Configuration\Option;
use Rector\Core\Configuration\ValueObjectInliner;
use Rector\Core\Contract\Rector\ConfigurableRectorInterface;
Expand Down Expand Up @@ -193,4 +194,38 @@ public function symfonyContainerPhp(string $filePath): void
$parameters = $this->parameters();
$parameters->set(Option::SYMFONY_CONTAINER_PHP_PATH_PARAMETER, $filePath);
}

/**
* @param string[] $extensions
*/
public function fileExtensions(array $extensions): void
{
Assert::allString($extensions);

$parameters = $this->parameters();
$parameters->set(Option::FILE_EXTENSIONS, $extensions);
}

public function nestedChainMethodCallLimit(int $limit): void
{
$parameters = $this->parameters();
$parameters->set(Option::NESTED_CHAIN_METHOD_CALL_LIMIT, $limit);
}

public function cacheDirectory(string $directoryPath): void
{
$parameters = $this->parameters();
$parameters->set(Option::CACHE_DIR, $directoryPath);
}

/**
* @param class-string<CacheStorageInterface> $cacheClass
*/
public function cacheClass(string $cacheClass): void
{
Assert::isAOf($cacheClass, CacheStorageInterface::class);

$parameters = $this->parameters();
$parameters->set(Option::CACHE_CLASS, $cacheClass);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,10 @@ public function __construct(ParameterProvider $parameterProvider)

$additionalConfigFiles = [];

$additionalConfigFiles[] = $parameterProvider->provideStringParameter(Option::PHPSTAN_FOR_RECTOR_PATH);
if ($parameterProvider->hasParameter(Option::PHPSTAN_FOR_RECTOR_PATH)) {
$additionalConfigFiles[] = $parameterProvider->provideStringParameter(Option::PHPSTAN_FOR_RECTOR_PATH);
}

$additionalConfigFiles[] = __DIR__ . '/../../../config/phpstan/static-reflection.neon';
$additionalConfigFiles[] = __DIR__ . '/../../../config/phpstan/better-infer.neon';
$additionalConfigFiles[] = __DIR__ . '/../../../config/phpstan/parser.neon';
Expand Down
3 changes: 3 additions & 0 deletions phpstan.neon
Original file line number Diff line number Diff line change
Expand Up @@ -692,3 +692,6 @@ parameters:

# list() function accepts null arguments
- '#Parameter \#2 \$args of class PhpParser\\Node\\Expr\\FuncCall constructor expects array<PhpParser\\Node\\Arg\|PhpParser\\Node\\VariadicPlaceholder>, array<int, PhpParser\\Node\\Arg\|null> given#'

# validate class-string input
- '#Call to static method Webmozart\\Assert\\Assert\:\:isInstanceOf\(\) with class\-string<Rector\\Caching\\Contract\\ValueObject\\Storage\\CacheStorageInterface> and (.*?) will always evaluate to false#'
6 changes: 6 additions & 0 deletions rules/DogFood/Rector/Closure/UpgradeRectorConfigRector.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,12 @@ final class UpgradeRectorConfigRector extends AbstractRector
Option::PARALLEL => 'parallel',
Option::PHPSTAN_FOR_RECTOR_PATH => 'phpstanConfig',
Option::PHP_VERSION_FEATURES => 'phpVersion',
Option::CACHE_CLASS => 'cacheClass',
Option::CACHE_DIR => 'cacheDirectory',
Option::NESTED_CHAIN_METHOD_CALL_LIMIT => 'nestedChainMethodCallLimit',
Option::FILE_EXTENSIONS => 'fileExtensions',
Option::SYMFONY_CONTAINER_PHP_PATH_PARAMETER => 'symfonyContainerPhp',
Option::SYMFONY_CONTAINER_XML_PATH_PARAMETER => 'symfonyContainerXml',
];

/**
Expand Down
6 changes: 5 additions & 1 deletion src/Configuration/Option.php
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ final class Option
public const SYMFONY_CONTAINER_XML_PATH_PARAMETER = 'symfony_container_xml_path';

/**
* @internal Use @see \Rector\Config\RectorConfig::symfonyContainerPhp()
* @deprecated Use @see \Rector\Config\RectorConfig::symfonyContainerPhp()
* @var string
*/
public const SYMFONY_CONTAINER_PHP_PATH_PARAMETER = 'symfony_container_php_path';
Expand Down Expand Up @@ -113,22 +113,26 @@ final class Option
public const SKIP = SkipperOption::SKIP;

/**
* @deprecated Use RectorConfig::fileExtensions() instead
* @var string
*/
public const FILE_EXTENSIONS = 'file_extensions';

/**
* @deprecated Use RectorConfig::nestedChainMethodCallLimit() instead
* @var string
*/
public const NESTED_CHAIN_METHOD_CALL_LIMIT = 'nested_chain_method_call_limit';

/**
* @deprecated Use RectorConfig::cacheDirectory() instead
* @var string
*/
public const CACHE_DIR = 'cache_dir';

/**
* Cache backend. Most of the time we cache in files, but in ephemeral environment (e.g. CI), a faster `MemoryCacheStorage` can be usefull.
* @deprecated Use RectorConfig::cacheClass() instead
*
* @var class-string<CacheStorageInterface>
* @internal
Expand Down

0 comments on commit 45eef47

Please sign in to comment.