rector/src/Console/ConsoleApplication.php
Tomas Votruba 695c190be3 Updated Rector to commit 94b5561ca87ee6825a098c7c506b774582bf3354
94b5561ca8 chore: bump min version of github actions (fix deprecations) (#5675)
2024-03-01 20:02:28 +00:00

93 lines
3.8 KiB
PHP

<?php
declare (strict_types=1);
namespace Rector\Console;
use RectorPrefix202403\Composer\XdebugHandler\XdebugHandler;
use Rector\Application\VersionResolver;
use Rector\ChangesReporting\Output\ConsoleOutputFormatter;
use Rector\Configuration\Option;
use RectorPrefix202403\Symfony\Component\Console\Application;
use RectorPrefix202403\Symfony\Component\Console\Command\Command;
use RectorPrefix202403\Symfony\Component\Console\Input\InputDefinition;
use RectorPrefix202403\Symfony\Component\Console\Input\InputInterface;
use RectorPrefix202403\Symfony\Component\Console\Input\InputOption;
use RectorPrefix202403\Symfony\Component\Console\Output\OutputInterface;
use RectorPrefix202403\Webmozart\Assert\Assert;
final class ConsoleApplication extends Application
{
/**
* @var string
*/
private const NAME = 'Rector';
/**
* @param Command[] $commands
*/
public function __construct(array $commands)
{
parent::__construct(self::NAME, VersionResolver::PACKAGE_VERSION);
Assert::notEmpty($commands);
Assert::allIsInstanceOf($commands, Command::class);
$this->addCommands($commands);
// run this command, if no command name is provided
$this->setDefaultCommand('process');
}
public function doRun(InputInterface $input, OutputInterface $output) : int
{
$isXdebugAllowed = $input->hasParameterOption('--xdebug');
if (!$isXdebugAllowed) {
$xdebugHandler = new XdebugHandler('rector');
$xdebugHandler->setPersistent();
$xdebugHandler->check();
unset($xdebugHandler);
}
$shouldFollowByNewline = \false;
// skip in this case, since generate content must be clear from meta-info
if ($this->shouldPrintMetaInformation($input)) {
$output->writeln($this->getLongVersion());
$shouldFollowByNewline = \true;
}
if ($shouldFollowByNewline) {
$output->write(\PHP_EOL);
}
return parent::doRun($input, $output);
}
protected function getDefaultInputDefinition() : InputDefinition
{
$defaultInputDefinition = parent::getDefaultInputDefinition();
$this->removeUnusedOptions($defaultInputDefinition);
$this->addCustomOptions($defaultInputDefinition);
return $defaultInputDefinition;
}
private function shouldPrintMetaInformation(InputInterface $input) : bool
{
$hasNoArguments = $input->getFirstArgument() === null;
if ($hasNoArguments) {
return \false;
}
$hasVersionOption = $input->hasParameterOption('--version');
if ($hasVersionOption) {
return \false;
}
$outputFormat = $input->getParameterOption(['-o', '--output-format']);
return $outputFormat === ConsoleOutputFormatter::NAME;
}
private function removeUnusedOptions(InputDefinition $inputDefinition) : void
{
$options = $inputDefinition->getOptions();
unset($options['quiet'], $options['no-interaction']);
$inputDefinition->setOptions($options);
}
private function addCustomOptions(InputDefinition $inputDefinition) : void
{
$inputDefinition->addOption(new InputOption(Option::CONFIG, 'c', InputOption::VALUE_REQUIRED, 'Path to config file', $this->getDefaultConfigPath()));
$inputDefinition->addOption(new InputOption(Option::DEBUG, null, InputOption::VALUE_NONE, 'Enable debug verbosity (-vvv)'));
$inputDefinition->addOption(new InputOption(Option::XDEBUG, null, InputOption::VALUE_NONE, 'Allow running xdebug'));
$inputDefinition->addOption(new InputOption(Option::CLEAR_CACHE, null, InputOption::VALUE_NONE, 'Clear cache'));
}
private function getDefaultConfigPath() : string
{
return \getcwd() . '/rector.php';
}
}