From 924342b418abf54474d42ca441d1396c05fe8d3d Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 25 Dec 2024 16:49:52 +0700 Subject: [PATCH 1/5] [CodeQuality] Skip loose compare float vs integer on AssertEqualsToSameRector --- .../Fixture/skip_loose_compare.php.inc | 13 +++++++++++++ .../Fixture/skip_loose_compare2.php.inc | 13 +++++++++++++ .../MethodCall/AssertEqualsToSameRector.php | 17 ++++++++++++++--- 3 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 rules-tests/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector/Fixture/skip_loose_compare.php.inc create mode 100644 rules-tests/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector/Fixture/skip_loose_compare2.php.inc diff --git a/rules-tests/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector/Fixture/skip_loose_compare.php.inc b/rules-tests/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector/Fixture/skip_loose_compare.php.inc new file mode 100644 index 00000000..b8f18099 --- /dev/null +++ b/rules-tests/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector/Fixture/skip_loose_compare.php.inc @@ -0,0 +1,13 @@ +assertEquals(1, 1.0); + } +} diff --git a/rules-tests/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector/Fixture/skip_loose_compare2.php.inc b/rules-tests/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector/Fixture/skip_loose_compare2.php.inc new file mode 100644 index 00000000..435be0ad --- /dev/null +++ b/rules-tests/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector/Fixture/skip_loose_compare2.php.inc @@ -0,0 +1,13 @@ +assertEquals(1.0, 1); + } +} diff --git a/rules/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector.php b/rules/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector.php index 6d5ae2e4..328fb19a 100644 --- a/rules/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector.php +++ b/rules/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector.php @@ -86,7 +86,7 @@ public function refactor(Node $node): ?Node } $args = $node->getArgs(); - if (! isset($args[0])) { + if (! isset($args[0], $args[1])) { return null; } @@ -99,13 +99,24 @@ public function refactor(Node $node): ?Node return null; } + $firstArgType = $this->nodeTypeResolver->getNativeType($args[0]->value); + $secondArgType = $this->nodeTypeResolver->getNativeType($args[1]->value); + + if ($firstArgType instanceof FloatType && $secondArgType instanceof IntegerType) { + return null; + } + + if ($firstArgType instanceof IntegerType && $secondArgType instanceof FloatType) { + return null; + } + $hasChanged = $this->identifierManipulator->renameNodeWithMap($node, self::RENAME_METHODS_MAP); return $hasChanged ? $node : null; } private function shouldSkipConstantArrayType(Expr $expr): bool { - $type = $this->getType($expr); + $type = $this->nodeTypeResolver->getNativeType($expr); if (! $type instanceof ConstantArrayType) { return false; @@ -162,7 +173,7 @@ private function isScalarOrEnumValue(Expr $expr): bool return true; } - $valueNodeType = $this->nodeTypeResolver->getType($expr); + $valueNodeType = $this->nodeTypeResolver->getNativeType($expr); return $this->isScalarType($valueNodeType); } } From 30733d35529095516d9364e544adbb01b1a01604 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 25 Dec 2024 16:55:24 +0700 Subject: [PATCH 2/5] skip array dim fetch --- .../Rector/MethodCall/AssertEqualsToSameRector.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/rules/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector.php b/rules/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector.php index 328fb19a..1b5f2b61 100644 --- a/rules/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector.php +++ b/rules/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector.php @@ -6,6 +6,7 @@ use PhpParser\Node; use PhpParser\Node\Expr; +use PhpParser\Node\Expr\ArrayDimFetch; use PhpParser\Node\Expr\ClassConstFetch; use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\StaticCall; @@ -15,6 +16,7 @@ use PHPStan\Type\Constant\ConstantBooleanType; use PHPStan\Type\FloatType; use PHPStan\Type\IntegerType; +use PHPStan\Type\MixedType; use PHPStan\Type\StringType; use PHPStan\Type\Type; use Rector\PHPUnit\NodeAnalyzer\IdentifierManipulator; @@ -110,6 +112,10 @@ public function refactor(Node $node): ?Node return null; } + if ($args[1]->value instanceof ArrayDimFetch && $secondArgType instanceof MixedType) { + return null; + } + $hasChanged = $this->identifierManipulator->renameNodeWithMap($node, self::RENAME_METHODS_MAP); return $hasChanged ? $node : null; } From 626363b13372c670fa2b09c6efa04dab69083259 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 25 Dec 2024 16:55:28 +0700 Subject: [PATCH 3/5] skip array dim fetch --- .../skip_mixed_array_dim_fetch.php.inc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 rules-tests/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector/Fixture/skip_mixed_array_dim_fetch.php.inc diff --git a/rules-tests/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector/Fixture/skip_mixed_array_dim_fetch.php.inc b/rules-tests/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector/Fixture/skip_mixed_array_dim_fetch.php.inc new file mode 100644 index 00000000..73fb616e --- /dev/null +++ b/rules-tests/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector/Fixture/skip_mixed_array_dim_fetch.php.inc @@ -0,0 +1,19 @@ +getData(); + $this->assertEquals(1.0, $data[0]); + } + + private function getData(): array + { + return [1]; + } +} From 2d3629ff0d5a7f49871313fe759f0cf0fd1c3f81 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 25 Dec 2024 17:29:45 +0700 Subject: [PATCH 4/5] skip --- .../MethodCall/AssertEqualsToSameRector.php | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/rules/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector.php b/rules/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector.php index 1b5f2b61..ad4c67c1 100644 --- a/rules/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector.php +++ b/rules/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector.php @@ -101,19 +101,18 @@ public function refactor(Node $node): ?Node return null; } - $firstArgType = $this->nodeTypeResolver->getNativeType($args[0]->value); - $secondArgType = $this->nodeTypeResolver->getNativeType($args[1]->value); + if ($this->isName($node->name, 'assertEquals')) { + $firstArgType = $this->nodeTypeResolver->getNativeType($args[0]->value); + $secondArgType = $this->nodeTypeResolver->getNativeType($args[1]->value); - if ($firstArgType instanceof FloatType && $secondArgType instanceof IntegerType) { - return null; - } - - if ($firstArgType instanceof IntegerType && $secondArgType instanceof FloatType) { - return null; - } + // loose comparison + if ($firstArgType instanceof IntegerType && ($secondArgType instanceof FloatType || $secondArgType instanceof MixedType)) { + return null; + } - if ($args[1]->value instanceof ArrayDimFetch && $secondArgType instanceof MixedType) { - return null; + if ($firstArgType instanceof FloatType && ($secondArgType instanceof IntegerType || $secondArgType instanceof MixedType)) { + return null; + } } $hasChanged = $this->identifierManipulator->renameNodeWithMap($node, self::RENAME_METHODS_MAP); From 6bb5b7fe8eee37e10b2c2bf7ad0c8454da9f8e37 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 25 Dec 2024 10:30:39 +0000 Subject: [PATCH 5/5] [ci-review] Rector Rectify --- rules/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector.php | 1 - 1 file changed, 1 deletion(-) diff --git a/rules/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector.php b/rules/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector.php index ad4c67c1..a92eca87 100644 --- a/rules/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector.php +++ b/rules/CodeQuality/Rector/MethodCall/AssertEqualsToSameRector.php @@ -6,7 +6,6 @@ use PhpParser\Node; use PhpParser\Node\Expr; -use PhpParser\Node\Expr\ArrayDimFetch; use PhpParser\Node\Expr\ClassConstFetch; use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\StaticCall;