diff --git a/src/Collector/NewWithFollowingSettersCollector.php b/src/Collector/NewWithFollowingSettersCollector.php index f146e621..63f3f3fd 100644 --- a/src/Collector/NewWithFollowingSettersCollector.php +++ b/src/Collector/NewWithFollowingSettersCollector.php @@ -28,6 +28,7 @@ use PHPStan\Reflection\ReflectionProvider; use Symfony\Component\HttpKernel\Kernel; use Symplify\PHPStanRules\Enum\SymfonyClass; +use Symplify\PHPStanRules\PHPUnit\TestClassDetector; use Webmozart\Assert\Assert; /** @@ -76,6 +77,11 @@ public function processNode(Node $node, Scope $scope): ?array return null; } + // tests create objects and exercise their behavior, not configure them for construction + if (TestClassDetector::isTestClass($scope)) { + return null; + } + // basically all nodes that have ->stmts inside if (! $node instanceof ClassMethod && ! $node instanceof Function_ && ! $node instanceof If_ && ! $node instanceof ElseIf_ && ! $node instanceof While_ && ! $node instanceof Foreach_ && ! $node instanceof For_) { return null; diff --git a/tests/Rules/NewOverSettersRule/Fixture/SkipSetterContext.php b/tests/Rules/NewOverSettersRule/Fixture/SkipSetterContext.php new file mode 100644 index 00000000..383e44a6 --- /dev/null +++ b/tests/Rules/NewOverSettersRule/Fixture/SkipSetterContext.php @@ -0,0 +1,24 @@ +setName('John'); + $alwaysSetters->setAge(25); + } + + public function second() + { + $alwaysSetters = new SomeObject(); + $alwaysSetters->setName('Doe'); + $alwaysSetters->setAge(35); + } +} diff --git a/tests/Rules/NewOverSettersRule/NewOverSettersRuleTest.php b/tests/Rules/NewOverSettersRule/NewOverSettersRuleTest.php index 3f47bb25..94b3c91e 100644 --- a/tests/Rules/NewOverSettersRule/NewOverSettersRuleTest.php +++ b/tests/Rules/NewOverSettersRule/NewOverSettersRuleTest.php @@ -54,6 +54,7 @@ public static function provideData(): Iterator yield [__DIR__ . '/Fixture/SkipAttributeEntity.php', []]; yield [__DIR__ . '/Fixture/SkipNotSetterCall.php', []]; yield [__DIR__ . '/Fixture/SkipNoArgSetters.php', []]; + yield [__DIR__ . '/Fixture/SkipSetterContext.php', []]; } /**