From 21386158efd0deb918e996518afeaaf05fd78e4c Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Tue, 30 Sep 2025 01:23:13 +0700 Subject: [PATCH] [DX] Make configurable include post rector classes in result --- config/config.php | 2 ++ e2e/applied-auto-import/expected-output.diff | 4 ++++ e2e/applied-auto-import/rector.php | 1 + src/Config/RectorConfig.php | 5 +++++ src/Configuration/Option.php | 5 +++++ src/Configuration/RectorConfigBuilder.php | 12 ++++++++++++ .../PHPUnit/ValueObject/RectorTestResult.php | 5 +++-- src/Util/RectorClassesSorter.php | 16 ++++++++++++++-- src/ValueObject/Reporting/FileDiff.php | 5 +++-- 9 files changed, 49 insertions(+), 6 deletions(-) diff --git a/config/config.php b/config/config.php index fa62bbed1f5..9899794161f 100644 --- a/config/config.php +++ b/config/config.php @@ -46,4 +46,6 @@ $rectorConfig->reportingRealPath(false); $rectorConfig->treatClassesAsFinal(false); + + $rectorConfig->includePostRectorsInReports(false); }; diff --git a/e2e/applied-auto-import/expected-output.diff b/e2e/applied-auto-import/expected-output.diff index fa67573289c..5ab0dad5769 100644 --- a/e2e/applied-auto-import/expected-output.diff +++ b/e2e/applied-auto-import/expected-output.diff @@ -23,6 +23,10 @@ Applied rules: * RenameClassRector + * DocblockNameImportingPostRector + * NameImportingPostRector + * UnusedImportRemovingPostRector + * UseAddingPostRector [OK] 1 file would have been changed (dry-run) by Rector diff --git a/e2e/applied-auto-import/rector.php b/e2e/applied-auto-import/rector.php index e6de67b6c3e..931e206951a 100644 --- a/e2e/applied-auto-import/rector.php +++ b/e2e/applied-auto-import/rector.php @@ -16,4 +16,5 @@ $rectorConfig->importNames(); $rectorConfig->removeUnusedImports(); + $rectorConfig->includePostRectorsInReports(true); }; diff --git a/src/Config/RectorConfig.php b/src/Config/RectorConfig.php index a4710622791..4b8bf9d59ec 100644 --- a/src/Config/RectorConfig.php +++ b/src/Config/RectorConfig.php @@ -451,4 +451,9 @@ public function setOverflowLevels(array $levelOverflows): void { SimpleParameterProvider::addParameter(Option::LEVEL_OVERFLOWS, $levelOverflows); } + + public function includePostRectorsInReports(bool $includePostRectorsInReports = true): void + { + SimpleParameterProvider::setParameter(Option::INCLUDE_POST_RECTORS_IN_REPORTS, $includePostRectorsInReports); + } } diff --git a/src/Configuration/Option.php b/src/Configuration/Option.php index 2df4a0a0d44..50d4ac7f445 100644 --- a/src/Configuration/Option.php +++ b/src/Configuration/Option.php @@ -327,4 +327,9 @@ final class Option * @var string */ public const KAIZEN = 'kaizen'; + + /** + * @var string + */ + public const INCLUDE_POST_RECTORS_IN_REPORTS = 'include_post_rectors_in_reports'; } diff --git a/src/Configuration/RectorConfigBuilder.php b/src/Configuration/RectorConfigBuilder.php index 13e5e3b2512..391c9c702b0 100644 --- a/src/Configuration/RectorConfigBuilder.php +++ b/src/Configuration/RectorConfigBuilder.php @@ -177,6 +177,8 @@ final class RectorConfigBuilder private ?bool $isWithPhpLevelUsed = null; + private ?bool $includePostRectorsInReports = null; + /** * @var array,bool> */ @@ -390,6 +392,10 @@ public function __invoke(RectorConfig $rectorConfig): void if ($this->levelOverflows !== []) { $rectorConfig->setOverflowLevels($this->levelOverflows); } + + if ($this->includePostRectorsInReports !== null) { + $rectorConfig->includePostRectorsInReports($this->includePostRectorsInReports); + } } /** @@ -1291,4 +1297,10 @@ public function withSetProviders(string ...$setProviders): self return $this; } + + public function withIncludePostRectorsInReports(bool $includePostRectorsInReports = true): self + { + $this->includePostRectorsInReports = $includePostRectorsInReports; + return $this; + } } diff --git a/src/Testing/PHPUnit/ValueObject/RectorTestResult.php b/src/Testing/PHPUnit/ValueObject/RectorTestResult.php index 3b234b3b359..d831f22be64 100644 --- a/src/Testing/PHPUnit/ValueObject/RectorTestResult.php +++ b/src/Testing/PHPUnit/ValueObject/RectorTestResult.php @@ -5,6 +5,7 @@ namespace Rector\Testing\PHPUnit\ValueObject; use Rector\Contract\Rector\RectorInterface; +use Rector\PostRector\Contract\Rector\PostRectorInterface; use Rector\Util\RectorClassesSorter; use Rector\ValueObject\ProcessResult; @@ -25,7 +26,7 @@ public function getChangedContents(): string } /** - * @return array> + * @return array> */ public function getAppliedRectorClasses(): array { @@ -35,6 +36,6 @@ public function getAppliedRectorClasses(): array $rectorClasses = array_merge($rectorClasses, $fileDiff->getRectorClasses()); } - return RectorClassesSorter::sortAndFilterOutPostRectors($rectorClasses); + return RectorClassesSorter::sort($rectorClasses); } } diff --git a/src/Util/RectorClassesSorter.php b/src/Util/RectorClassesSorter.php index 830ab6f2325..ed9b2348f49 100644 --- a/src/Util/RectorClassesSorter.php +++ b/src/Util/RectorClassesSorter.php @@ -4,6 +4,8 @@ namespace Rector\Util; +use Rector\Configuration\Option; +use Rector\Configuration\Parameter\SimpleParameterProvider; use Rector\Contract\Rector\RectorInterface; use Rector\PostRector\Contract\Rector\PostRectorInterface; @@ -11,9 +13,9 @@ final class RectorClassesSorter { /** * @param array> $rectorClasses - * @return array> + * @return array> */ - public static function sortAndFilterOutPostRectors(array $rectorClasses): array + public static function sort(array $rectorClasses): array { $rectorClasses = array_unique($rectorClasses); @@ -23,6 +25,16 @@ public static function sortAndFilterOutPostRectors(array $rectorClasses): array ); sort($mainRectorClasses); + if (SimpleParameterProvider::provideBoolParameter(Option::INCLUDE_POST_RECTORS_IN_REPORTS)) { + $postRectorClasses = array_filter( + $rectorClasses, + fn (string $rectorClass): bool => is_a($rectorClass, PostRectorInterface::class, true) + ); + sort($postRectorClasses); + + return array_merge($mainRectorClasses, $postRectorClasses); + } + return $mainRectorClasses; } } diff --git a/src/ValueObject/Reporting/FileDiff.php b/src/ValueObject/Reporting/FileDiff.php index 850235c8969..2b6928a86d6 100644 --- a/src/ValueObject/Reporting/FileDiff.php +++ b/src/ValueObject/Reporting/FileDiff.php @@ -8,6 +8,7 @@ use Rector\ChangesReporting\ValueObject\RectorWithLineChange; use Rector\Contract\Rector\RectorInterface; use Rector\Parallel\ValueObject\BridgeItem; +use Rector\PostRector\Contract\Rector\PostRectorInterface; use Rector\Util\RectorClassesSorter; use Symplify\EasyParallel\Contract\SerializableInterface; use Webmozart\Assert\Assert; @@ -82,7 +83,7 @@ public function getRectorShortClasses(): array } /** - * @return array> + * @return array> */ public function getRectorClasses(): array { @@ -92,7 +93,7 @@ public function getRectorClasses(): array $rectorClasses[] = $rectorWithLineChange->getRectorClass(); } - return RectorClassesSorter::sortAndFilterOutPostRectors($rectorClasses); + return RectorClassesSorter::sort($rectorClasses); } public function getFirstLineNumber(): ?int