From 9598ed85d65e2b82d5ff1ab81cd055cdc71c9caf Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Fri, 3 Oct 2025 12:41:30 +0200 Subject: [PATCH 1/2] add support for boolean vs constant boolean type --- .../Fixture/identical_bool.php.inc | 45 +++++++++++++++++++ ...seIdenticalOverEqualWithSameTypeRector.php | 5 ++- 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 rules-tests/CodeQuality/Rector/Equal/UseIdenticalOverEqualWithSameTypeRector/Fixture/identical_bool.php.inc diff --git a/rules-tests/CodeQuality/Rector/Equal/UseIdenticalOverEqualWithSameTypeRector/Fixture/identical_bool.php.inc b/rules-tests/CodeQuality/Rector/Equal/UseIdenticalOverEqualWithSameTypeRector/Fixture/identical_bool.php.inc new file mode 100644 index 00000000000..46aa0de51fb --- /dev/null +++ b/rules-tests/CodeQuality/Rector/Equal/UseIdenticalOverEqualWithSameTypeRector/Fixture/identical_bool.php.inc @@ -0,0 +1,45 @@ +getValue() == true) { + return 'yes'; + } + + return 'no'; + } + + private function getValue(): bool + { + return true; + } +} + +?> +----- +getValue() === true) { + return 'yes'; + } + + return 'no'; + } + + private function getValue(): bool + { + return true; + } +} + +?> diff --git a/rules/CodeQuality/Rector/Equal/UseIdenticalOverEqualWithSameTypeRector.php b/rules/CodeQuality/Rector/Equal/UseIdenticalOverEqualWithSameTypeRector.php index 8b763799b5c..e50d6a8f5b8 100644 --- a/rules/CodeQuality/Rector/Equal/UseIdenticalOverEqualWithSameTypeRector.php +++ b/rules/CodeQuality/Rector/Equal/UseIdenticalOverEqualWithSameTypeRector.php @@ -10,6 +10,7 @@ use PhpParser\Node\Expr\BinaryOp\Identical; use PhpParser\Node\Expr\BinaryOp\NotEqual; use PhpParser\Node\Expr\BinaryOp\NotIdentical; +use PHPStan\Type\BooleanType; use PHPStan\Type\MixedType; use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -86,7 +87,9 @@ public function refactor(Node $node): ?Node } // different types - if (! $leftStaticType->equals($rightStaticType)) { + if (! $leftStaticType->equals( + $rightStaticType + ) && (! $leftStaticType instanceof BooleanType && ! $rightStaticType instanceof BooleanType)) { return null; } From 4cf5c5729bda3aad668e0b0331d3b77da45be345 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Sat, 4 Oct 2025 00:10:01 +0200 Subject: [PATCH 2/2] fixup! add support for boolean vs constant boolean type --- .../Fixture/identical_string.php.inc | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 rules-tests/CodeQuality/Rector/Equal/UseIdenticalOverEqualWithSameTypeRector/Fixture/identical_string.php.inc diff --git a/rules-tests/CodeQuality/Rector/Equal/UseIdenticalOverEqualWithSameTypeRector/Fixture/identical_string.php.inc b/rules-tests/CodeQuality/Rector/Equal/UseIdenticalOverEqualWithSameTypeRector/Fixture/identical_string.php.inc new file mode 100644 index 00000000000..9ff1e51cb49 --- /dev/null +++ b/rules-tests/CodeQuality/Rector/Equal/UseIdenticalOverEqualWithSameTypeRector/Fixture/identical_string.php.inc @@ -0,0 +1,45 @@ +getValue() == 'hi') { + return 'yes'; + } + + return 'no'; + } + + private function getValue(): string + { + return 'hello'; + } +} + +?> +----- +getValue() === 'hi') { + return 'yes'; + } + + return 'no'; + } + + private function getValue(): string + { + return 'hello'; + } +} + +?>