From c69a7b919a183c26a18d5fc9bbaeae4c67313a5f Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Mon, 3 Nov 2025 15:01:09 +0100 Subject: [PATCH] Make AssertSameNullExpectedRule auto-fixable --- .../PHPUnit/AssertSameNullExpectedRule.php | 23 ++++++++++++++++++- .../AssertSameNullExpectedRuleTest.php | 5 ++++ .../assert-same-null-expected-fixable.php | 22 ++++++++++++++++++ ...ssert-same-null-expected-fixable.php.fixed | 22 ++++++++++++++++++ 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 tests/Rules/PHPUnit/data/assert-same-null-expected-fixable.php create mode 100644 tests/Rules/PHPUnit/data/assert-same-null-expected-fixable.php.fixed diff --git a/src/Rules/PHPUnit/AssertSameNullExpectedRule.php b/src/Rules/PHPUnit/AssertSameNullExpectedRule.php index 3362f443..f6032efb 100644 --- a/src/Rules/PHPUnit/AssertSameNullExpectedRule.php +++ b/src/Rules/PHPUnit/AssertSameNullExpectedRule.php @@ -47,11 +47,32 @@ public function processNode(Node $node, Scope $scope): array if ($expectedArgumentValue->name->toLowerString() === 'null') { return [ - RuleErrorBuilder::message('You should use assertNull() instead of assertSame(null, $actual).')->identifier('phpunit.assertNull')->build(), + RuleErrorBuilder::message('You should use assertNull() instead of assertSame(null, $actual).') + ->identifier('phpunit.assertNull') + ->fixNode($node, static function (CallLike $node) { + $node->name = new Node\Identifier('assertNull'); + $node->args = self::rewriteArgs($node->args); + + return $node; + }) + ->build(), ]; } return []; } + /** + * @param array $args + * @return list + */ + private static function rewriteArgs(array $args): array + { + $newArgs = []; + for ($i = 1; $i < count($args); $i++) { + $newArgs[] = $args[$i]; + } + return $newArgs; + } + } diff --git a/tests/Rules/PHPUnit/AssertSameNullExpectedRuleTest.php b/tests/Rules/PHPUnit/AssertSameNullExpectedRuleTest.php index 1e802dc0..e29096d9 100644 --- a/tests/Rules/PHPUnit/AssertSameNullExpectedRuleTest.php +++ b/tests/Rules/PHPUnit/AssertSameNullExpectedRuleTest.php @@ -34,6 +34,11 @@ public function testRule(): void ]); } + public function testFix(): void + { + $this->fix(__DIR__ . '/data/assert-same-null-expected-fixable.php', __DIR__ . '/data/assert-same-null-expected-fixable.php.fixed'); + } + /** * @return string[] */ diff --git a/tests/Rules/PHPUnit/data/assert-same-null-expected-fixable.php b/tests/Rules/PHPUnit/data/assert-same-null-expected-fixable.php new file mode 100644 index 00000000..f95fadd6 --- /dev/null +++ b/tests/Rules/PHPUnit/data/assert-same-null-expected-fixable.php @@ -0,0 +1,22 @@ +assertSame(null, 'a'); + + \PHPUnit\Framework\Assert::assertSame($this->returnNull(), 'foo'); + } + +} diff --git a/tests/Rules/PHPUnit/data/assert-same-null-expected-fixable.php.fixed b/tests/Rules/PHPUnit/data/assert-same-null-expected-fixable.php.fixed new file mode 100644 index 00000000..a3c91042 --- /dev/null +++ b/tests/Rules/PHPUnit/data/assert-same-null-expected-fixable.php.fixed @@ -0,0 +1,22 @@ +assertNull('a'); + + \PHPUnit\Framework\Assert::assertSame($this->returnNull(), 'foo'); + } + +}