diff --git a/composer.json b/composer.json index 84c6cfeae666..13f595e2c6a1 100644 --- a/composer.json +++ b/composer.json @@ -66,7 +66,6 @@ "Rector\\Celebrity\\": "rules/celebrity/src", "Rector\\ChangesReporting\\": "packages/changes-reporting/src", "Rector\\CodeQuality\\": "rules/code-quality/src", - "Rector\\Extension\\": "packages/extension/src", "Rector\\Reporting\\": "packages/reporting/src", "Rector\\CodingStyle\\": "rules/coding-style/src", "Rector\\ConsoleDiffer\\": "packages/console-differ/src", diff --git a/config/services.yaml b/config/services.yaml index 4bc07e3e2a44..34297f6e7512 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -44,3 +44,5 @@ services: Symplify\PackageBuilder\Strings\StringFormatConverter: null OndraM\CiDetector\CiDetector: null + + Symfony\Component\EventDispatcher\EventDispatcherInterface: '@Rector\Core\EventDispatcher\AutowiredEventDispatcher' diff --git a/packages/extension/config/config.yaml b/packages/extension/config/config.yaml deleted file mode 100644 index 85252fe27d51..000000000000 --- a/packages/extension/config/config.yaml +++ /dev/null @@ -1,7 +0,0 @@ -services: - _defaults: - autowire: true - public: true - - Rector\Extension\: - resource: '../src' diff --git a/packages/extension/src/Contract/FinishingExtensionInterface.php b/packages/extension/src/Contract/FinishingExtensionInterface.php deleted file mode 100644 index cc746555b8f9..000000000000 --- a/packages/extension/src/Contract/FinishingExtensionInterface.php +++ /dev/null @@ -1,10 +0,0 @@ -reportingExtensions = $reportingExtensions; - } - - public function run(): void - { - foreach ($this->reportingExtensions as $reportingExtension) { - $reportingExtension->run(); - } - } -} diff --git a/packages/reporting/src/Extension/GenericReportMessageReportingExtension.php b/packages/reporting/src/EventSibscriber/PrintReportCollectorEventSubscriber.php similarity index 76% rename from packages/reporting/src/Extension/GenericReportMessageReportingExtension.php rename to packages/reporting/src/EventSibscriber/PrintReportCollectorEventSubscriber.php index 8de6c05e41a7..029ce1753fae 100644 --- a/packages/reporting/src/Extension/GenericReportMessageReportingExtension.php +++ b/packages/reporting/src/EventSibscriber/PrintReportCollectorEventSubscriber.php @@ -2,15 +2,16 @@ declare(strict_types=1); -namespace Rector\Reporting\Extension; +namespace Rector\Reporting\EventSibscriber; use Rector\ChangesReporting\Output\ConsoleOutputFormatter; use Rector\Core\Configuration\Configuration; -use Rector\Extension\Contract\ReportingExtensionInterface; +use Rector\Core\EventDispatcher\Event\AfterReportEvent; use Rector\Reporting\DataCollector\ReportCollector; use Symfony\Component\Console\Style\SymfonyStyle; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; -final class GenericReportMessageReportingExtension implements ReportingExtensionInterface +final class PrintReportCollectorEventSubscriber implements EventSubscriberInterface { /** * @var ReportCollector @@ -37,7 +38,15 @@ public function __construct( $this->symfonyStyle = $symfonyStyle; } - public function run(): void + /** + * @return string[] + */ + public static function getSubscribedEvents(): array + { + return [AfterReportEvent::class => 'printReportCollector']; + } + + public function printReportCollector(): void { if ($this->shouldSkip()) { return; diff --git a/rules/doctrine/src/Extension/ReportEntitiesWithAddedPropertiesFinishExtension.php b/rules/doctrine/src/EventSubscriber/ReportEntitiesWithAddedPropertiesEventSubscriber.php similarity index 78% rename from rules/doctrine/src/Extension/ReportEntitiesWithAddedPropertiesFinishExtension.php rename to rules/doctrine/src/EventSubscriber/ReportEntitiesWithAddedPropertiesEventSubscriber.php index 24f41fe3d265..130eb7e2e01c 100644 --- a/rules/doctrine/src/Extension/ReportEntitiesWithAddedPropertiesFinishExtension.php +++ b/rules/doctrine/src/EventSubscriber/ReportEntitiesWithAddedPropertiesEventSubscriber.php @@ -2,15 +2,16 @@ declare(strict_types=1); -namespace Rector\Doctrine\Extension; +namespace Rector\Doctrine\EventSubscriber; use Nette\Utils\FileSystem; use Nette\Utils\Json; +use Rector\Core\EventDispatcher\Event\AfterProcessEvent; use Rector\Doctrine\Collector\UuidMigrationDataCollector; -use Rector\Extension\Contract\FinishingExtensionInterface; use Symfony\Component\Console\Style\SymfonyStyle; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; -final class ReportEntitiesWithAddedPropertiesFinishExtension implements FinishingExtensionInterface +final class ReportEntitiesWithAddedPropertiesEventSubscriber implements EventSubscriberInterface { /** * @var UuidMigrationDataCollector @@ -30,7 +31,7 @@ public function __construct( $this->symfonyStyle = $symfonyStyle; } - public function run(): void + public function reportEntities(): void { $this->generatePropertiesJsonWithFileName( 'uuid-migration-new-column-properties.json', @@ -43,6 +44,11 @@ public function run(): void ); } + public static function getSubscribedEvents(): array + { + return [AfterProcessEvent::class => 'reportEntities']; + } + /** * @param mixed[] $data */ diff --git a/src/Application/RectorApplication.php b/src/Application/RectorApplication.php index 5d211c185f23..8d51132bd601 100644 --- a/src/Application/RectorApplication.php +++ b/src/Application/RectorApplication.php @@ -10,10 +10,11 @@ use Rector\Core\Application\FileSystem\RemovedAndAddedFilesCollector; use Rector\Core\Application\FileSystem\RemovedAndAddedFilesProcessor; use Rector\Core\Configuration\Configuration; -use Rector\Core\Extension\FinishingExtensionRunner; +use Rector\Core\EventDispatcher\Event\AfterProcessEvent; use Rector\FileSystemRector\FileSystemFileProcessor; use Symfony\Component\Console\Helper\ProgressBar; use Symfony\Component\Console\Style\SymfonyStyle; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symplify\PackageBuilder\Reflection\PrivatesAccessor; use Symplify\SmartFileSystem\SmartFileInfo; use Throwable; @@ -75,9 +76,9 @@ final class RectorApplication private $nodeScopeResolver; /** - * @var FinishingExtensionRunner + * @var EventDispatcherInterface */ - private $finishingExtensionRunner; + private $eventDispatcher; public function __construct( SymfonyStyle $symfonyStyle, @@ -88,7 +89,7 @@ public function __construct( RemovedAndAddedFilesCollector $removedAndAddedFilesCollector, RemovedAndAddedFilesProcessor $removedAndAddedFilesProcessor, NodeScopeResolver $nodeScopeResolver, - FinishingExtensionRunner $finishingExtensionRunner + EventDispatcherInterface $eventDispatcher ) { $this->symfonyStyle = $symfonyStyle; $this->fileSystemFileProcessor = $fileSystemFileProcessor; @@ -98,7 +99,7 @@ public function __construct( $this->removedAndAddedFilesCollector = $removedAndAddedFilesCollector; $this->removedAndAddedFilesProcessor = $removedAndAddedFilesProcessor; $this->nodeScopeResolver = $nodeScopeResolver; - $this->finishingExtensionRunner = $finishingExtensionRunner; + $this->eventDispatcher = $eventDispatcher; } /** @@ -150,7 +151,7 @@ public function runOnFileInfos(array $fileInfos): void $this->removedAndAddedFilesProcessor->run(); // 5. various extensions on finish - $this->finishingExtensionRunner->run(); + $this->eventDispatcher->dispatch(new AfterProcessEvent()); } /** diff --git a/src/Console/Command/ProcessCommand.php b/src/Console/Command/ProcessCommand.php index dc1240f15f81..6e2b28f16d34 100644 --- a/src/Console/Command/ProcessCommand.php +++ b/src/Console/Command/ProcessCommand.php @@ -13,17 +13,18 @@ use Rector\Core\Configuration\Configuration; use Rector\Core\Configuration\Option; use Rector\Core\Console\Output\OutputFormatterCollector; +use Rector\Core\EventDispatcher\Event\AfterReportEvent; use Rector\Core\FileSystem\FilesFinder; use Rector\Core\Guard\RectorGuard; use Rector\Core\PhpParser\NodeTraverser\RectorNodeTraverser; use Rector\Core\Stubs\StubLoader; use Rector\Core\Yaml\YamlProcessor; -use Rector\Extension\Runner\ReportingExtensionRunner; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symplify\PackageBuilder\Console\Command\CommandNaming; use Symplify\PackageBuilder\Console\ShellCode; use Symplify\SmartFileSystem\SmartFileInfo; @@ -65,11 +66,6 @@ final class ProcessCommand extends AbstractCommand */ private $outputFormatterCollector; - /** - * @var ReportingExtensionRunner - */ - private $reportingExtensionRunner; - /** * @var RectorNodeTraverser */ @@ -100,6 +96,11 @@ final class ProcessCommand extends AbstractCommand */ private $symfonyStyle; + /** + * @var EventDispatcherInterface + */ + private $eventDispatcher; + public function __construct( FilesFinder $phpFilesFinder, AdditionalAutoloader $additionalAutoloader, @@ -108,13 +109,13 @@ public function __construct( Configuration $configuration, RectorApplication $rectorApplication, OutputFormatterCollector $outputFormatterCollector, - ReportingExtensionRunner $reportingExtensionRunner, RectorNodeTraverser $rectorNodeTraverser, StubLoader $stubLoader, YamlProcessor $yamlProcessor, ChangedFilesDetector $changedFilesDetector, UnchangedFilesFilter $unchangedFilesFilter, - SymfonyStyle $symfonyStyle + SymfonyStyle $symfonyStyle, + EventDispatcherInterface $eventDispatcher ) { $this->filesFinder = $phpFilesFinder; $this->additionalAutoloader = $additionalAutoloader; @@ -123,7 +124,6 @@ public function __construct( $this->configuration = $configuration; $this->rectorApplication = $rectorApplication; $this->outputFormatterCollector = $outputFormatterCollector; - $this->reportingExtensionRunner = $reportingExtensionRunner; $this->rectorNodeTraverser = $rectorNodeTraverser; $this->stubLoader = $stubLoader; $this->yamlProcessor = $yamlProcessor; @@ -133,6 +133,7 @@ public function __construct( $this->changedFilesDetector = $changedFilesDetector; $this->symfonyStyle = $symfonyStyle; + $this->eventDispatcher = $eventDispatcher; } protected function configure(): void @@ -234,7 +235,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int $outputFormatter = $this->outputFormatterCollector->getByName($outputFormat); $outputFormatter->report($this->errorAndDiffCollector); - $this->reportingExtensionRunner->run(); + $this->eventDispatcher->dispatch(new AfterReportEvent()); // invalidate affected files $this->invalidateAffectedCacheFiles(); diff --git a/src/EventDispatcher/Event/AfterProcessEvent.php b/src/EventDispatcher/Event/AfterProcessEvent.php new file mode 100644 index 000000000000..621c2a56bedc --- /dev/null +++ b/src/EventDispatcher/Event/AfterProcessEvent.php @@ -0,0 +1,11 @@ +finishingExtensions = $finishingExtensions; - } - - public function run(): void - { - foreach ($this->finishingExtensions as $finishingExtension) { - $finishingExtension->run(); - } - } -}