mirror of
https://github.com/rectorphp/rector.git
synced 2024-06-30 22:53:31 +00:00
2d19ff31f4
55a13c0020
test run in phpstan 1.4.8 (#1904)
94 lines
4.5 KiB
PHP
94 lines
4.5 KiB
PHP
<?php
|
|
|
|
declare (strict_types=1);
|
|
namespace Rector\Core\Configuration;
|
|
|
|
use Rector\ChangesReporting\Output\ConsoleOutputFormatter;
|
|
use Rector\Core\Contract\Console\OutputStyleInterface;
|
|
use Rector\Core\ValueObject\Configuration;
|
|
use RectorPrefix20220306\Symfony\Component\Console\Input\InputInterface;
|
|
use RectorPrefix20220306\Symplify\PackageBuilder\Parameter\ParameterProvider;
|
|
final class ConfigurationFactory
|
|
{
|
|
/**
|
|
* @readonly
|
|
* @var \Symplify\PackageBuilder\Parameter\ParameterProvider
|
|
*/
|
|
private $parameterProvider;
|
|
/**
|
|
* @readonly
|
|
* @var \Rector\Core\Contract\Console\OutputStyleInterface
|
|
*/
|
|
private $rectorOutputStyle;
|
|
public function __construct(\RectorPrefix20220306\Symplify\PackageBuilder\Parameter\ParameterProvider $parameterProvider, \Rector\Core\Contract\Console\OutputStyleInterface $rectorOutputStyle)
|
|
{
|
|
$this->parameterProvider = $parameterProvider;
|
|
$this->rectorOutputStyle = $rectorOutputStyle;
|
|
}
|
|
/**
|
|
* @param string[] $paths
|
|
*/
|
|
public function createForTests(array $paths) : \Rector\Core\ValueObject\Configuration
|
|
{
|
|
$fileExtensions = $this->parameterProvider->provideArrayParameter(\Rector\Core\Configuration\Option::FILE_EXTENSIONS);
|
|
return new \Rector\Core\ValueObject\Configuration(\true, \true, \false, \Rector\ChangesReporting\Output\ConsoleOutputFormatter::NAME, $fileExtensions, $paths);
|
|
}
|
|
/**
|
|
* Needs to run in the start of the life cycle, since the rest of workflow uses it.
|
|
*/
|
|
public function createFromInput(\RectorPrefix20220306\Symfony\Component\Console\Input\InputInterface $input) : \Rector\Core\ValueObject\Configuration
|
|
{
|
|
$isDryRun = (bool) $input->getOption(\Rector\Core\Configuration\Option::DRY_RUN);
|
|
$shouldClearCache = (bool) $input->getOption(\Rector\Core\Configuration\Option::CLEAR_CACHE);
|
|
$outputFormat = (string) $input->getOption(\Rector\Core\Configuration\Option::OUTPUT_FORMAT);
|
|
$showProgressBar = $this->shouldShowProgressBar($input, $outputFormat);
|
|
$showDiffs = !(bool) $input->getOption(\Rector\Core\Configuration\Option::NO_DIFFS);
|
|
$paths = $this->resolvePaths($input);
|
|
$fileExtensions = $this->parameterProvider->provideArrayParameter(\Rector\Core\Configuration\Option::FILE_EXTENSIONS);
|
|
$isParallel = $this->parameterProvider->provideBoolParameter(\Rector\Core\Configuration\Option::PARALLEL);
|
|
$parallelPort = (string) $input->getOption(\Rector\Core\Configuration\Option::PARALLEL_PORT);
|
|
$parallelIdentifier = (string) $input->getOption(\Rector\Core\Configuration\Option::PARALLEL_IDENTIFIER);
|
|
/** @var string|null $memoryLimit */
|
|
$memoryLimit = $input->getOption(\Rector\Core\Configuration\Option::MEMORY_LIMIT);
|
|
return new \Rector\Core\ValueObject\Configuration($isDryRun, $showProgressBar, $shouldClearCache, $outputFormat, $fileExtensions, $paths, $showDiffs, $parallelPort, $parallelIdentifier, $isParallel, $memoryLimit);
|
|
}
|
|
private function shouldShowProgressBar(\RectorPrefix20220306\Symfony\Component\Console\Input\InputInterface $input, string $outputFormat) : bool
|
|
{
|
|
$noProgressBar = (bool) $input->getOption(\Rector\Core\Configuration\Option::NO_PROGRESS_BAR);
|
|
if ($noProgressBar) {
|
|
return \false;
|
|
}
|
|
if ($this->rectorOutputStyle->isVerbose()) {
|
|
return \false;
|
|
}
|
|
return $outputFormat === \Rector\ChangesReporting\Output\ConsoleOutputFormatter::NAME;
|
|
}
|
|
/**
|
|
* @param string[] $commandLinePaths
|
|
* @return string[]
|
|
*/
|
|
private function correctBashSpacePaths(array $commandLinePaths) : array
|
|
{
|
|
// fixes bash edge-case that to merges string with space to one
|
|
foreach ($commandLinePaths as $commandLinePath) {
|
|
if (\strpos($commandLinePath, ' ') !== \false) {
|
|
$commandLinePaths = \explode(' ', $commandLinePath);
|
|
}
|
|
}
|
|
return $commandLinePaths;
|
|
}
|
|
/**
|
|
* @return string[]|mixed[]
|
|
*/
|
|
private function resolvePaths(\RectorPrefix20220306\Symfony\Component\Console\Input\InputInterface $input) : array
|
|
{
|
|
$commandLinePaths = (array) $input->getArgument(\Rector\Core\Configuration\Option::SOURCE);
|
|
// command line has priority
|
|
if ($commandLinePaths !== []) {
|
|
return $this->correctBashSpacePaths($commandLinePaths);
|
|
}
|
|
// fallback to parameter
|
|
return $this->parameterProvider->provideArrayParameter(\Rector\Core\Configuration\Option::PATHS);
|
|
}
|
|
}
|