From 0914ba90f1833b4885c62d9a009ef75ba894e098 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Mon, 28 Apr 2025 15:43:15 +0200 Subject: [PATCH] skip dynamic class const fetch --- .../NoGetRepositoryOutsideServiceRule.php | 8 +++++++- .../Fixture/SkipDynamicClassConstFetch.php | 18 ++++++++++++++++++ ...ipDymamicFetch.php => SkipDynamicFetch.php} | 2 +- .../NoGetRepositoryOutsideServiceRuleTest.php | 3 ++- 4 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/Fixture/SkipDynamicClassConstFetch.php rename tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/Fixture/{SkipDymamicFetch.php => SkipDynamicFetch.php} (92%) diff --git a/src/Rules/Doctrine/NoGetRepositoryOutsideServiceRule.php b/src/Rules/Doctrine/NoGetRepositoryOutsideServiceRule.php index 5a6ffbc5..82564f75 100644 --- a/src/Rules/Doctrine/NoGetRepositoryOutsideServiceRule.php +++ b/src/Rules/Doctrine/NoGetRepositoryOutsideServiceRule.php @@ -7,6 +7,7 @@ use PhpParser\Node; use PhpParser\Node\Expr\ClassConstFetch; use PhpParser\Node\Expr\MethodCall; +use PhpParser\Node\Name; use PhpParser\Node\Scalar\String_; use PHPStan\Analyser\Scope; use PHPStan\Rules\Rule; @@ -76,6 +77,11 @@ private function isDynamicArg(MethodCall $methodCall): bool return false; } - return ! $firstArg->value instanceof ClassConstFetch; + if ($firstArg->value instanceof ClassConstFetch) { + $classConstFetch = $firstArg->value; + return ! $classConstFetch->class instanceof Name; + } + + return true; } } diff --git a/tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/Fixture/SkipDynamicClassConstFetch.php b/tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/Fixture/SkipDynamicClassConstFetch.php new file mode 100644 index 00000000..616b860b --- /dev/null +++ b/tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/Fixture/SkipDynamicClassConstFetch.php @@ -0,0 +1,18 @@ +getRepository($someObject::class); + } +} diff --git a/tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/Fixture/SkipDymamicFetch.php b/tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/Fixture/SkipDynamicFetch.php similarity index 92% rename from tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/Fixture/SkipDymamicFetch.php rename to tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/Fixture/SkipDynamicFetch.php index a6765811..67a23065 100644 --- a/tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/Fixture/SkipDymamicFetch.php +++ b/tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/Fixture/SkipDynamicFetch.php @@ -7,7 +7,7 @@ use Doctrine\ORM\EntityManager; use Symplify\PHPStanRules\Tests\Rules\Doctrine\NoGetRepositoryOutsideServiceRule\Source\SomeRandomEntity; -final readonly class SkipDymamicFetch +final readonly class SkipDynamicFetch { public function run( EntityManager $entityManager, diff --git a/tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/NoGetRepositoryOutsideServiceRuleTest.php b/tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/NoGetRepositoryOutsideServiceRuleTest.php index 0622ee47..ef58b63d 100644 --- a/tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/NoGetRepositoryOutsideServiceRuleTest.php +++ b/tests/Rules/Doctrine/NoGetRepositoryOutsideServiceRule/NoGetRepositoryOutsideServiceRuleTest.php @@ -34,7 +34,8 @@ public static function provideData(): Iterator ]]]; yield [__DIR__ . '/Fixture/SkipInRepository.php', []]; - yield [__DIR__ . '/Fixture/SkipDymamicFetch.php', []]; + yield [__DIR__ . '/Fixture/SkipDynamicFetch.php', []]; + yield [__DIR__ . '/Fixture/SkipDynamicClassConstFetch.php', []]; } protected function getRule(): Rule