From 4d28cda0b19d2931e0ed89ede8e117963dcb8cd6 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Wed, 11 Jun 2025 10:36:18 +0200 Subject: [PATCH] [typed-collections] Add RemoveAssertNotNullOnCollectionRector --- config/sets/typed-collections.php | 2 + .../coalesce_assign_on_collection.php.inc | 34 +++++++ ...oveAssertNotNullOnCollectionRectorTest.php | 28 ++++++ .../config/configured_rule.php | 10 ++ .../RemoveAssertNotNullOnCollectionRector.php | 95 +++++++++++++++++++ 5 files changed, 169 insertions(+) create mode 100644 rules-tests/TypedCollections/Rector/Expression/RemoveAssertNotNullOnCollectionRector/Fixture/coalesce_assign_on_collection.php.inc create mode 100644 rules-tests/TypedCollections/Rector/Expression/RemoveAssertNotNullOnCollectionRector/RemoveAssertNotNullOnCollectionRectorTest.php create mode 100644 rules-tests/TypedCollections/Rector/Expression/RemoveAssertNotNullOnCollectionRector/config/configured_rule.php create mode 100644 rules/TypedCollections/Rector/Expression/RemoveAssertNotNullOnCollectionRector.php diff --git a/config/sets/typed-collections.php b/config/sets/typed-collections.php index f2082896..e17965af 100644 --- a/config/sets/typed-collections.php +++ b/config/sets/typed-collections.php @@ -20,6 +20,7 @@ use Rector\Doctrine\TypedCollections\Rector\ClassMethod\ReturnArrayToNewArrayCollectionRector; use Rector\Doctrine\TypedCollections\Rector\ClassMethod\ReturnCollectionDocblockRector; use Rector\Doctrine\TypedCollections\Rector\Empty_\EmptyOnCollectionToIsEmptyCallRector; +use Rector\Doctrine\TypedCollections\Rector\Expression\RemoveAssertNotNullOnCollectionRector; use Rector\Doctrine\TypedCollections\Rector\Expression\RemoveCoalesceAssignOnCollectionRector; use Rector\Doctrine\TypedCollections\Rector\FuncCall\ArrayMapOnCollectionToArrayRector; use Rector\Doctrine\TypedCollections\Rector\FuncCall\ArrayMergeOnCollectionToArrayRector; @@ -82,5 +83,6 @@ // cleanup RemoveNullsafeOnCollectionRector::class, AssertNullOnCollectionToAssertEmptyRector::class, + RemoveAssertNotNullOnCollectionRector::class, ]); }; diff --git a/rules-tests/TypedCollections/Rector/Expression/RemoveAssertNotNullOnCollectionRector/Fixture/coalesce_assign_on_collection.php.inc b/rules-tests/TypedCollections/Rector/Expression/RemoveAssertNotNullOnCollectionRector/Fixture/coalesce_assign_on_collection.php.inc new file mode 100644 index 00000000..ca2229f2 --- /dev/null +++ b/rules-tests/TypedCollections/Rector/Expression/RemoveAssertNotNullOnCollectionRector/Fixture/coalesce_assign_on_collection.php.inc @@ -0,0 +1,34 @@ +items); + } +} + +?> +----- + diff --git a/rules-tests/TypedCollections/Rector/Expression/RemoveAssertNotNullOnCollectionRector/RemoveAssertNotNullOnCollectionRectorTest.php b/rules-tests/TypedCollections/Rector/Expression/RemoveAssertNotNullOnCollectionRector/RemoveAssertNotNullOnCollectionRectorTest.php new file mode 100644 index 00000000..40218385 --- /dev/null +++ b/rules-tests/TypedCollections/Rector/Expression/RemoveAssertNotNullOnCollectionRector/RemoveAssertNotNullOnCollectionRectorTest.php @@ -0,0 +1,28 @@ +doTestFile($filePath); + } + + public static function provideData(): Iterator + { + return self::yieldFilesFromDirectory(__DIR__ . '/Fixture'); + } + + public function provideConfigFilePath(): string + { + return __DIR__ . '/config/configured_rule.php'; + } +} diff --git a/rules-tests/TypedCollections/Rector/Expression/RemoveAssertNotNullOnCollectionRector/config/configured_rule.php b/rules-tests/TypedCollections/Rector/Expression/RemoveAssertNotNullOnCollectionRector/config/configured_rule.php new file mode 100644 index 00000000..019c28f3 --- /dev/null +++ b/rules-tests/TypedCollections/Rector/Expression/RemoveAssertNotNullOnCollectionRector/config/configured_rule.php @@ -0,0 +1,10 @@ +rule(RemoveAssertNotNullOnCollectionRector::class); +}; diff --git a/rules/TypedCollections/Rector/Expression/RemoveAssertNotNullOnCollectionRector.php b/rules/TypedCollections/Rector/Expression/RemoveAssertNotNullOnCollectionRector.php new file mode 100644 index 00000000..9ced7f75 --- /dev/null +++ b/rules/TypedCollections/Rector/Expression/RemoveAssertNotNullOnCollectionRector.php @@ -0,0 +1,95 @@ +expr instanceof StaticCall) { + return null; + } + + $staticCall = $node->expr; + if (! $this->isName($staticCall->name, 'assertNotNull')) { + return null; + } + + if (! $this->isName($staticCall->class, PHPUnitClassName::ASSERT)) { + return null; + } + + if (count($staticCall->args) !== 1) { + return null; + } + + $firstArg = $staticCall->getArgs()[0]; + if (! $this->collectionTypeDetector->isCollectionType($firstArg->value)) { + return null; + } + + return NodeVisitor::REMOVE_NODE; + } +}