From 823c3c076bb7b002e29c9150711d888aec783fe6 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Mon, 31 Dec 2018 12:15:48 +0100 Subject: [PATCH] [CodeQuality] Add SingleInArrayToCompareRector [closes #858] --- config/level/code-quality/code-quality.yml | 1 + .../FuncCall/SingleInArrayToCompareRector.php | 81 +++++++++++++++++++ .../Fixture/fixture.php.inc | 33 ++++++++ .../SingleInArrayToCompareRectorTest.php | 19 +++++ 4 files changed, 134 insertions(+) create mode 100644 packages/CodeQuality/src/Rector/FuncCall/SingleInArrayToCompareRector.php create mode 100644 packages/CodeQuality/tests/Rector/FuncCall/SingleInArrayToCompareRector/Fixture/fixture.php.inc create mode 100644 packages/CodeQuality/tests/Rector/FuncCall/SingleInArrayToCompareRector/SingleInArrayToCompareRectorTest.php diff --git a/config/level/code-quality/code-quality.yml b/config/level/code-quality/code-quality.yml index 759763af8d8..4decf1a3d99 100644 --- a/config/level/code-quality/code-quality.yml +++ b/config/level/code-quality/code-quality.yml @@ -20,3 +20,4 @@ services: Rector\CodeQuality\Rector\BinaryOp\SimplifyDeMorganBinaryRector: ~ Rector\CodeQuality\Rector\Ternary\SimplifyTautologyTernaryRector: ~ Rector\CodeQuality\Rector\Foreach_\SimplifyForeachToArrayFilterRector: ~ + Rector\CodeQuality\Rector\FuncCall\SingleInArrayToCompareRector: ~ diff --git a/packages/CodeQuality/src/Rector/FuncCall/SingleInArrayToCompareRector.php b/packages/CodeQuality/src/Rector/FuncCall/SingleInArrayToCompareRector.php new file mode 100644 index 00000000000..1d4a25d9ef5 --- /dev/null +++ b/packages/CodeQuality/src/Rector/FuncCall/SingleInArrayToCompareRector.php @@ -0,0 +1,81 @@ +isName($node, 'in_array')) { + return null; + } + + if (! $node->args[1]->value instanceof Array_) { + return null; + } + + /** @var Array_ $arrayNode */ + $arrayNode = $node->args[1]->value; + if (count($arrayNode->items) !== 1) { + return null; + } + + $onlyArrayItem = $arrayNode->items[0]->value; + if (isset($node->args[2])) { // strict + return new Identical($node->args[0]->value, $onlyArrayItem); + } + + return new Equal($node->args[0]->value, $onlyArrayItem); + } +} diff --git a/packages/CodeQuality/tests/Rector/FuncCall/SingleInArrayToCompareRector/Fixture/fixture.php.inc b/packages/CodeQuality/tests/Rector/FuncCall/SingleInArrayToCompareRector/Fixture/fixture.php.inc new file mode 100644 index 00000000000..de21814110e --- /dev/null +++ b/packages/CodeQuality/tests/Rector/FuncCall/SingleInArrayToCompareRector/Fixture/fixture.php.inc @@ -0,0 +1,33 @@ + +----- + diff --git a/packages/CodeQuality/tests/Rector/FuncCall/SingleInArrayToCompareRector/SingleInArrayToCompareRectorTest.php b/packages/CodeQuality/tests/Rector/FuncCall/SingleInArrayToCompareRector/SingleInArrayToCompareRectorTest.php new file mode 100644 index 00000000000..a4afc2a9343 --- /dev/null +++ b/packages/CodeQuality/tests/Rector/FuncCall/SingleInArrayToCompareRector/SingleInArrayToCompareRectorTest.php @@ -0,0 +1,19 @@ +doTestFiles([__DIR__ . '/Fixture/fixture.php.inc']); + } + + protected function getRectorClass(): string + { + return SingleInArrayToCompareRector::class; + } +}