rector/src/Bootstrap/RectorConfigsResolver.php
Tomas Votruba 20291b25c8
Upgrade to Symplify not using symfony/http-kernel (#1119)
* 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
2021-11-01 14:20:45 +01:00

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;
}
}