From 0314d960ab4790b8c2eccd84668fbc630d8fc6af Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 25 Dec 2024 00:35:09 +0700 Subject: [PATCH 1/4] [TypeDeclaration] Skip assign in if condition on BinaryOpNullableToInstanceofRector --- .../Fixture/skip_assign.php.inc | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 rules-tests/TypeDeclaration/Rector/BooleanAnd/BinaryOpNullableToInstanceofRector/Fixture/skip_assign.php.inc diff --git a/rules-tests/TypeDeclaration/Rector/BooleanAnd/BinaryOpNullableToInstanceofRector/Fixture/skip_assign.php.inc b/rules-tests/TypeDeclaration/Rector/BooleanAnd/BinaryOpNullableToInstanceofRector/Fixture/skip_assign.php.inc new file mode 100644 index 00000000000..4da84c219e9 --- /dev/null +++ b/rules-tests/TypeDeclaration/Rector/BooleanAnd/BinaryOpNullableToInstanceofRector/Fixture/skip_assign.php.inc @@ -0,0 +1,24 @@ +someClass = $this->get()) && $this->someClass->someMethod()) { + return $this->someClass->someMethod(); + } + + return 'no'; + } + + private function get(): ?SomeInstance + { + return rand(0, 1) ? new SomeInstance() : null; + } +} From 8ac12fd66972483b83d0c38c449e02e708b286d7 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 25 Dec 2024 00:37:09 +0700 Subject: [PATCH 2/4] fix --- .../Rector/BooleanAnd/BinaryOpNullableToInstanceofRector.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rules/TypeDeclaration/Rector/BooleanAnd/BinaryOpNullableToInstanceofRector.php b/rules/TypeDeclaration/Rector/BooleanAnd/BinaryOpNullableToInstanceofRector.php index 15aafcaab3a..78e5118db1a 100644 --- a/rules/TypeDeclaration/Rector/BooleanAnd/BinaryOpNullableToInstanceofRector.php +++ b/rules/TypeDeclaration/Rector/BooleanAnd/BinaryOpNullableToInstanceofRector.php @@ -6,6 +6,7 @@ use PhpParser\Node; use PhpParser\Node\Expr; +use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\BinaryOp\BooleanAnd; use PhpParser\Node\Expr\BinaryOp\BooleanOr; use PhpParser\Node\Expr\BooleanNot; @@ -70,6 +71,10 @@ public function getNodeTypes(): array */ public function refactor(Node $node): ?Node { + if ($node->left instanceof Assign) { + return null; + } + if ($node instanceof BooleanOr) { return $this->processNegationBooleanOr($node); } From 528c5060e384fa91472ee2c91b8e73015f1f51f4 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 25 Dec 2024 00:41:11 +0700 Subject: [PATCH 3/4] fix --- .../Rector/BooleanAnd/BinaryOpNullableToInstanceofRector.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules/TypeDeclaration/Rector/BooleanAnd/BinaryOpNullableToInstanceofRector.php b/rules/TypeDeclaration/Rector/BooleanAnd/BinaryOpNullableToInstanceofRector.php index 78e5118db1a..dd5acd94813 100644 --- a/rules/TypeDeclaration/Rector/BooleanAnd/BinaryOpNullableToInstanceofRector.php +++ b/rules/TypeDeclaration/Rector/BooleanAnd/BinaryOpNullableToInstanceofRector.php @@ -71,7 +71,7 @@ public function getNodeTypes(): array */ public function refactor(Node $node): ?Node { - if ($node->left instanceof Assign) { + if ($node->left instanceof Assign || $node->right instanceof Assign) { return null; } From 1e04b28051e23f89a9b373cf1c82316fe6fa206e Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 25 Dec 2024 00:41:15 +0700 Subject: [PATCH 4/4] fix --- .../Fixture/skip_assign2.php.inc | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 rules-tests/TypeDeclaration/Rector/BooleanAnd/BinaryOpNullableToInstanceofRector/Fixture/skip_assign2.php.inc diff --git a/rules-tests/TypeDeclaration/Rector/BooleanAnd/BinaryOpNullableToInstanceofRector/Fixture/skip_assign2.php.inc b/rules-tests/TypeDeclaration/Rector/BooleanAnd/BinaryOpNullableToInstanceofRector/Fixture/skip_assign2.php.inc new file mode 100644 index 00000000000..c835f01f4fc --- /dev/null +++ b/rules-tests/TypeDeclaration/Rector/BooleanAnd/BinaryOpNullableToInstanceofRector/Fixture/skip_assign2.php.inc @@ -0,0 +1,24 @@ +someClass = $this->get()) && $this->someClass->someMethod()) { + return $this->someClass->someMethod(); + } + + return 'no'; + } + + private function get(): ?SomeInstance + { + return rand(0, 1) ? new SomeInstance() : null; + } +}