mirror of
https://github.com/rectorphp/rector.git
synced 2024-06-02 09:20:52 +00:00
20291b25c8
* trigger CI * upgrade to symplify configs instead of bundles * update config files infos to config files * use ConfigureCallMerginLoaderFactory * remove symfony/http-kernel * remove symplify/phpstan-twig-rules
92 lines
2.6 KiB
PHP
92 lines
2.6 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Rector\Core\Bootstrap;
|
|
|
|
use Rector\Core\ValueObject\Bootstrap\BootstrapConfigs;
|
|
use Symfony\Component\Console\Input\ArgvInput;
|
|
use Symplify\SmartFileSystem\Exception\FileNotFoundException;
|
|
|
|
final class RectorConfigsResolver
|
|
{
|
|
public function provide(): BootstrapConfigs
|
|
{
|
|
$argvInput = new ArgvInput();
|
|
$mainConfigFile = $this->resolveFromInputWithFallback($argvInput, 'rector.php');
|
|
|
|
$rectorRecipeConfigFile = $this->resolveRectorRecipeConfig($argvInput);
|
|
|
|
$configFiles = [];
|
|
if ($rectorRecipeConfigFile !== null) {
|
|
$configFiles[] = $rectorRecipeConfigFile;
|
|
}
|
|
|
|
return new BootstrapConfigs($mainConfigFile, $configFiles);
|
|
}
|
|
|
|
private function resolveRectorRecipeConfig(ArgvInput $argvInput): ?string
|
|
{
|
|
if ($argvInput->getFirstArgument() !== 'generate') {
|
|
return null;
|
|
}
|
|
|
|
// autoload rector recipe file if present, just for \Rector\RectorGenerator\Command\GenerateCommand
|
|
$rectorRecipeFilePath = getcwd() . '/rector-recipe.php';
|
|
if (! file_exists($rectorRecipeFilePath)) {
|
|
return null;
|
|
}
|
|
|
|
return $rectorRecipeFilePath;
|
|
}
|
|
|
|
private function resolveFromInput(ArgvInput $argvInput): ?string
|
|
{
|
|
$configFile = $this->getOptionValue($argvInput, ['--config', '-c']);
|
|
if ($configFile === null) {
|
|
return null;
|
|
}
|
|
|
|
if (! file_exists($configFile)) {
|
|
$message = sprintf('File "%s" was not found', $configFile);
|
|
throw new FileNotFoundException($message);
|
|
}
|
|
|
|
return $configFile;
|
|
}
|
|
|
|
private function resolveFromInputWithFallback(ArgvInput $argvInput, string $fallbackFile): ?string
|
|
{
|
|
$configFileInfo = $this->resolveFromInput($argvInput);
|
|
if ($configFileInfo !== null) {
|
|
return $configFileInfo;
|
|
}
|
|
|
|
return $this->createFallbackFileInfoIfFound($fallbackFile);
|
|
}
|
|
|
|
private function createFallbackFileInfoIfFound(string $fallbackFile): ?string
|
|
{
|
|
$rootFallbackFile = getcwd() . DIRECTORY_SEPARATOR . $fallbackFile;
|
|
if (! is_file($rootFallbackFile)) {
|
|
return null;
|
|
}
|
|
|
|
return $rootFallbackFile;
|
|
}
|
|
|
|
/**
|
|
* @param string[] $optionNames
|
|
*/
|
|
private function getOptionValue(ArgvInput $argvInput, array $optionNames): ?string
|
|
{
|
|
foreach ($optionNames as $optionName) {
|
|
if ($argvInput->hasParameterOption($optionName, true)) {
|
|
return $argvInput->getParameterOption($optionName, null, true);
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|