From 96901c8233c1638841b946d3679e54c9e1ae57a0 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 14 Jan 2026 18:13:39 +0700 Subject: [PATCH 1/2] Update duplicated rule names test and rollback tweak duplicated rule --- composer.lock | 92 ++++++++++----------- src/FileSystem/RectorFinder.php | 20 ----- src/RuleFilter/ValueObject/RuleMetadata.php | 20 +---- tests/FileSystem/RectorFinderTest.php | 30 +------ tests/RuleFilter/RuleFilterTest.php | 2 - 5 files changed, 49 insertions(+), 115 deletions(-) diff --git a/composer.lock b/composer.lock index 3aab602a..2a7c18c1 100644 --- a/composer.lock +++ b/composer.lock @@ -1177,16 +1177,16 @@ }, { "name": "imagine/imagine", - "version": "1.5.1", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/php-imagine/Imagine.git", - "reference": "8b130cd281efdea67e52d5f0f998572eb62d2f04" + "reference": "f9ed796eefb77c2f0f2167e1d4e36bc2b5ed6b0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-imagine/Imagine/zipball/8b130cd281efdea67e52d5f0f998572eb62d2f04", - "reference": "8b130cd281efdea67e52d5f0f998572eb62d2f04", + "url": "https://api.github.com/repos/php-imagine/Imagine/zipball/f9ed796eefb77c2f0f2167e1d4e36bc2b5ed6b0c", + "reference": "f9ed796eefb77c2f0f2167e1d4e36bc2b5ed6b0c", "shasum": "" }, "require": { @@ -1233,9 +1233,9 @@ ], "support": { "issues": "https://github.com/php-imagine/Imagine/issues", - "source": "https://github.com/php-imagine/Imagine/tree/1.5.1" + "source": "https://github.com/php-imagine/Imagine/tree/1.5.2" }, - "time": "2025-12-09T15:27:47+00:00" + "time": "2026-01-09T10:45:12+00:00" }, { "name": "jajo/jsondb", @@ -1288,16 +1288,16 @@ }, { "name": "laravel/framework", - "version": "v12.46.0", + "version": "v12.47.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "9dcff48d25a632c1fadb713024c952fec489c4ae" + "reference": "ab8114c2e78f32e64eb238fc4b495bea3f8b80ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/9dcff48d25a632c1fadb713024c952fec489c4ae", - "reference": "9dcff48d25a632c1fadb713024c952fec489c4ae", + "url": "https://api.github.com/repos/laravel/framework/zipball/ab8114c2e78f32e64eb238fc4b495bea3f8b80ec", + "reference": "ab8114c2e78f32e64eb238fc4b495bea3f8b80ec", "shasum": "" }, "require": { @@ -1506,20 +1506,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2026-01-07T23:26:53+00:00" + "time": "2026-01-13T15:29:06+00:00" }, { "name": "laravel/prompts", - "version": "v0.3.8", + "version": "v0.3.9", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "096748cdfb81988f60090bbb839ce3205ace0d35" + "reference": "5c41bf0555b7cfefaad4e66d3046675829581ac4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/096748cdfb81988f60090bbb839ce3205ace0d35", - "reference": "096748cdfb81988f60090bbb839ce3205ace0d35", + "url": "https://api.github.com/repos/laravel/prompts/zipball/5c41bf0555b7cfefaad4e66d3046675829581ac4", + "reference": "5c41bf0555b7cfefaad4e66d3046675829581ac4", "shasum": "" }, "require": { @@ -1563,22 +1563,22 @@ "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.3.8" + "source": "https://github.com/laravel/prompts/tree/v0.3.9" }, - "time": "2025-11-21T20:52:52+00:00" + "time": "2026-01-07T21:00:29+00:00" }, { "name": "laravel/serializable-closure", - "version": "v2.0.7", + "version": "v2.0.8", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "cb291e4c998ac50637c7eeb58189c14f5de5b9dd" + "reference": "7581a4407012f5f53365e11bafc520fd7f36bc9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/cb291e4c998ac50637c7eeb58189c14f5de5b9dd", - "reference": "cb291e4c998ac50637c7eeb58189c14f5de5b9dd", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/7581a4407012f5f53365e11bafc520fd7f36bc9b", + "reference": "7581a4407012f5f53365e11bafc520fd7f36bc9b", "shasum": "" }, "require": { @@ -1626,7 +1626,7 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2025-11-21T20:52:36+00:00" + "time": "2026-01-08T16:22:46+00:00" }, { "name": "league/commonmark", @@ -2189,16 +2189,16 @@ }, { "name": "livewire/livewire", - "version": "v3.7.3", + "version": "v3.7.4", "source": { "type": "git", "url": "https://github.com/livewire/livewire.git", - "reference": "a5384df9fbd3eaf02e053bc49aabc8ace293fc1c" + "reference": "5a8dffd4c0ab357ff7ed5b39e7c2453d962a68e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/a5384df9fbd3eaf02e053bc49aabc8ace293fc1c", - "reference": "a5384df9fbd3eaf02e053bc49aabc8ace293fc1c", + "url": "https://api.github.com/repos/livewire/livewire/zipball/5a8dffd4c0ab357ff7ed5b39e7c2453d962a68e0", + "reference": "5a8dffd4c0ab357ff7ed5b39e7c2453d962a68e0", "shasum": "" }, "require": { @@ -2253,7 +2253,7 @@ "description": "A front-end framework for Laravel.", "support": { "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v3.7.3" + "source": "https://github.com/livewire/livewire/tree/v3.7.4" }, "funding": [ { @@ -2261,7 +2261,7 @@ "type": "github" } ], - "time": "2025-12-19T02:00:29+00:00" + "time": "2026-01-13T09:37:21+00:00" }, { "name": "monolog/monolog", @@ -3514,12 +3514,12 @@ "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "9afc1bb43571b25629f353c61a9315b5ef31383a" + "reference": "72228d4167f4b6e36f8ff5b453944977e9c14cd0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/9afc1bb43571b25629f353c61a9315b5ef31383a", - "reference": "9afc1bb43571b25629f353c61a9315b5ef31383a", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/72228d4167f4b6e36f8ff5b453944977e9c14cd0", + "reference": "72228d4167f4b6e36f8ff5b453944977e9c14cd0", "shasum": "" }, "require": { @@ -3559,7 +3559,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/2.3.1" + "source": "https://github.com/rectorphp/rector/tree/main" }, "funding": [ { @@ -3567,25 +3567,25 @@ "type": "github" } ], - "time": "2026-01-13T15:13:58+00:00" + "time": "2026-01-14T10:42:09+00:00" }, { "name": "samsonasik/array-lookup", - "version": "2.1.1", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/samsonasik/ArrayLookup.git", - "reference": "1e0c0e4baa417a1728855908f085d5c52768c176" + "reference": "4ce3b4d76b18bfa2a510d45bbeb124bf3eb44084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/samsonasik/ArrayLookup/zipball/1e0c0e4baa417a1728855908f085d5c52768c176", - "reference": "1e0c0e4baa417a1728855908f085d5c52768c176", + "url": "https://api.github.com/repos/samsonasik/ArrayLookup/zipball/4ce3b4d76b18bfa2a510d45bbeb124bf3eb44084", + "reference": "4ce3b4d76b18bfa2a510d45bbeb124bf3eb44084", "shasum": "" }, "require": { "php": "^8.2", - "webmozart/assert": "^1.11" + "webmozart/assert": "^1.11 || ^2.1" }, "require-dev": { "laminas/laminas-coding-standard": "^3.0", @@ -3625,7 +3625,7 @@ ], "support": { "issues": "https://github.com/samsonasik/ArrayLookup/issues", - "source": "https://github.com/samsonasik/ArrayLookup/tree/2.1.1" + "source": "https://github.com/samsonasik/ArrayLookup/tree/2.2.0" }, "funding": [ { @@ -3633,7 +3633,7 @@ "type": "github" } ], - "time": "2025-12-16T08:10:34+00:00" + "time": "2026-01-11T15:21:19+00:00" }, { "name": "symfony/clock", @@ -7782,16 +7782,16 @@ }, { "name": "rector/swiss-knife", - "version": "2.3.4", + "version": "2.3.5", "source": { "type": "git", "url": "https://github.com/rectorphp/swiss-knife.git", - "reference": "634b651cb62f198a660c7999d8a9e6c80425d844" + "reference": "1e7c2cbe0738beabaf603e7b2bd7582bbdf0212e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/swiss-knife/zipball/634b651cb62f198a660c7999d8a9e6c80425d844", - "reference": "634b651cb62f198a660c7999d8a9e6c80425d844", + "url": "https://api.github.com/repos/rectorphp/swiss-knife/zipball/1e7c2cbe0738beabaf603e7b2bd7582bbdf0212e", + "reference": "1e7c2cbe0738beabaf603e7b2bd7582bbdf0212e", "shasum": "" }, "require": { @@ -7813,7 +7813,7 @@ "description": "Swiss knife in pocket of every upgrade architect", "support": { "issues": "https://github.com/rectorphp/swiss-knife/issues", - "source": "https://github.com/rectorphp/swiss-knife/tree/2.3.4" + "source": "https://github.com/rectorphp/swiss-knife/tree/2.3.5" }, "funding": [ { @@ -7825,7 +7825,7 @@ "type": "github" } ], - "time": "2026-01-06T13:02:13+00:00" + "time": "2026-01-09T10:59:22+00:00" }, { "name": "sebastian/cli-parser", diff --git a/src/FileSystem/RectorFinder.php b/src/FileSystem/RectorFinder.php index 00f55751..4f937ebe 100644 --- a/src/FileSystem/RectorFinder.php +++ b/src/FileSystem/RectorFinder.php @@ -190,29 +190,9 @@ private function findInDirectoriesAndCreateRuleMetadatas(array $directories, arr $ruleDefinition->getCodeSamples(), $currentRuleSets, (string) $rectorReflectionClass->getFileName(), - $this->isDuplicatedLastName($findRectorClasses, $rectorReflectionClass->getShortName()) ); } return $ruleMetadatas; } - - /** - * @param array> $findRectorClasses - */ - private function isDuplicatedLastName(array $findRectorClasses, string $lastName): bool - { - $count = 0; - foreach ($findRectorClasses as $findRectorClass) { - if (\str_ends_with($findRectorClass, '\\' . $lastName)) { - ++$count; - - if ($count === 2) { - return true; - } - } - } - - return false; - } } diff --git a/src/RuleFilter/ValueObject/RuleMetadata.php b/src/RuleFilter/ValueObject/RuleMetadata.php index edf3f508..10d5e361 100644 --- a/src/RuleFilter/ValueObject/RuleMetadata.php +++ b/src/RuleFilter/ValueObject/RuleMetadata.php @@ -30,7 +30,6 @@ public function __construct( private array $codeSamples, private readonly array $sets, private readonly string $rectorRuleFilePath, - private readonly bool $sameNameInDifferentSet ) { Assert::isAOf($ruleClass, RectorInterface::class); Assert::allIsAOf($sets, RectorSet::class); @@ -44,26 +43,9 @@ public function getRuleShortClass(): string public function getSlug(): string { // turn "SomeRector" to "some-rector" - $lastSlug = str($this->getRuleShortClass()) + return str($this->getRuleShortClass()) ->snake('-') ->toString(); - - if ($this->sameNameInDifferentSet === false) { - return $lastSlug; - } - - $currentSet = current($this->sets); - - if ($currentSet === false) { - return $lastSlug; - } - - $slug = $currentSet->getSlug(); - if ($slug !== '') { - $slug .= '-'; - } - - return $slug . $lastSlug; } public function getDescription(): string diff --git a/tests/FileSystem/RectorFinderTest.php b/tests/FileSystem/RectorFinderTest.php index 57a2aa69..5c9d0b00 100644 --- a/tests/FileSystem/RectorFinderTest.php +++ b/tests/FileSystem/RectorFinderTest.php @@ -7,7 +7,6 @@ use App\FileSystem\RectorFinder; use App\Sets\RectorSetsTreeProvider; use PHPUnit\Framework\TestCase; -use Rector\Php84\Rector\Class_\DeprecatedAnnotationToDeprecatedAttributeRector; final class RectorFinderTest extends TestCase { @@ -32,35 +31,10 @@ public function testFindDuplicated(): void $uniqueShortNames = array_unique($shortNames); $uniqueLongNames = array_unique($longNames); - $this->assertNotSame( + $this->assertSame( count($uniqueShortNames), count($uniqueLongNames), - 'There are duplicated short class names.' + 'There are no duplicated short class names.' ); - - // get duplicated short names and report different slug - $duplicatedShortNames = array_diff_key($shortNames, $uniqueShortNames); - - $this->assertContains( - 'DeprecatedAnnotationToDeprecatedAttributeRector', - $duplicatedShortNames, - 'Expected DeprecatedAnnotationToDeprecatedAttributeRector to be one of the duplicated short names.' - ); - - foreach ($foundRectors as $foundRector) { - if ($foundRector->getRectorClass() === DeprecatedAnnotationToDeprecatedAttributeRector::class) { - $this->assertSame( - 'php-php-84-deprecated-annotation-to-deprecated-attribute-rector', - $foundRector->getSlug() - ); - } - - if ($foundRector->getRectorClass() === \Rector\Php85\Rector\Const_\DeprecatedAnnotationToDeprecatedAttributeRector::class) { - $this->assertSame( - 'php-php-85-deprecated-annotation-to-deprecated-attribute-rector', - $foundRector->getSlug() - ); - } - } } } diff --git a/tests/RuleFilter/RuleFilterTest.php b/tests/RuleFilter/RuleFilterTest.php index f66201e1..d840e085 100644 --- a/tests/RuleFilter/RuleFilterTest.php +++ b/tests/RuleFilter/RuleFilterTest.php @@ -21,7 +21,6 @@ public function testFilterBySetGroup(): void [], [], 'some-rector.php', - false ); $ruleMetadataCommunity = new RuleMetadata( MigrateToSimplifiedAttributeRector::class, @@ -29,7 +28,6 @@ public function testFilterBySetGroup(): void [], [], 'some-rector.php', - false, ); $ruleFilter = $this->make(RuleFilter::class); From bd968a908ba371981d624a1179f0a33385b8675b Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 14 Jan 2026 11:14:52 +0000 Subject: [PATCH 2/2] [rector] Rector fixes --- tests/FileSystem/RectorFinderTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/FileSystem/RectorFinderTest.php b/tests/FileSystem/RectorFinderTest.php index 5c9d0b00..22481675 100644 --- a/tests/FileSystem/RectorFinderTest.php +++ b/tests/FileSystem/RectorFinderTest.php @@ -23,9 +23,9 @@ public function testFindDuplicated(): void $shortNames = []; $longNames = []; - foreach ($foundRectors as $ruleMetadata) { - $shortNames[] = $ruleMetadata->getRuleShortClass(); - $longNames[] = $ruleMetadata->getRectorClass(); + foreach ($foundRectors as $foundRector) { + $shortNames[] = $foundRector->getRuleShortClass(); + $longNames[] = $foundRector->getRectorClass(); } $uniqueShortNames = array_unique($shortNames);