From 9dd43747b7191759d0ec56eff90c87411ad042d2 Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Fri, 27 Dec 2019 17:44:29 +0100 Subject: [PATCH] [CodeQuality] Add IntvalToTypeCastRector --- config/set/code-quality/code-quality.yaml | 1 + .../FuncCall/IntvalToTypeCastRector.php | 77 +++++++++++++++++++ .../Fixture/fixture.php.inc | 35 +++++++++ .../IntvalToTypeCastRectorTest.php | 30 ++++++++ .../src/TemplateVariablesFactory.php | 10 +-- .../src/Rector/_Category_/_Name_.php.inc | 3 +- 6 files changed, 147 insertions(+), 9 deletions(-) create mode 100644 packages/CodeQuality/src/Rector/FuncCall/IntvalToTypeCastRector.php create mode 100644 packages/CodeQuality/tests/Rector/FuncCall/IntvalToTypeCastRector/Fixture/fixture.php.inc create mode 100644 packages/CodeQuality/tests/Rector/FuncCall/IntvalToTypeCastRector/IntvalToTypeCastRectorTest.php diff --git a/config/set/code-quality/code-quality.yaml b/config/set/code-quality/code-quality.yaml index be98ac6407d..5558e91b450 100644 --- a/config/set/code-quality/code-quality.yaml +++ b/config/set/code-quality/code-quality.yaml @@ -45,3 +45,4 @@ services: Rector\SOLID\Rector\ClassMethod\UseInterfaceOverImplementationInConstructorRector: ~ Rector\CodeQuality\Rector\FuncCall\AddPregQuoteDelimiterRector: ~ Rector\CodeQuality\Rector\FuncCall\ArrayMergeOfNonArraysToSimpleArrayRector: ~ + Rector\CodeQuality\Rector\FuncCall\IntvalToTypeCastRector: ~ diff --git a/packages/CodeQuality/src/Rector/FuncCall/IntvalToTypeCastRector.php b/packages/CodeQuality/src/Rector/FuncCall/IntvalToTypeCastRector.php new file mode 100644 index 00000000000..b08dc995470 --- /dev/null +++ b/packages/CodeQuality/src/Rector/FuncCall/IntvalToTypeCastRector.php @@ -0,0 +1,77 @@ +isName($node, 'intval')) { + return null; + } + + if (isset($node->args[1])) { + $secondArgumentValue = $this->getValue($node->args[1]->value); + // default value + if ($secondArgumentValue !== 10) { + return null; + } + } + + return new Int_($node->args[0]->value); + } +} diff --git a/packages/CodeQuality/tests/Rector/FuncCall/IntvalToTypeCastRector/Fixture/fixture.php.inc b/packages/CodeQuality/tests/Rector/FuncCall/IntvalToTypeCastRector/Fixture/fixture.php.inc new file mode 100644 index 00000000000..b2949ecf56a --- /dev/null +++ b/packages/CodeQuality/tests/Rector/FuncCall/IntvalToTypeCastRector/Fixture/fixture.php.inc @@ -0,0 +1,35 @@ + +----- + diff --git a/packages/CodeQuality/tests/Rector/FuncCall/IntvalToTypeCastRector/IntvalToTypeCastRectorTest.php b/packages/CodeQuality/tests/Rector/FuncCall/IntvalToTypeCastRector/IntvalToTypeCastRectorTest.php new file mode 100644 index 00000000000..86a9761e183 --- /dev/null +++ b/packages/CodeQuality/tests/Rector/FuncCall/IntvalToTypeCastRector/IntvalToTypeCastRectorTest.php @@ -0,0 +1,30 @@ +doTestFile($file); + } + + public function provideDataForTest(): Iterator + { + return $this->yieldFilesFromDirectory(__DIR__ . '/Fixture'); + } + + protected function getRectorClass(): string + { + return IntvalToTypeCastRector::class; + } +} diff --git a/utils/RectorGenerator/src/TemplateVariablesFactory.php b/utils/RectorGenerator/src/TemplateVariablesFactory.php index b84a91e4d4f..093d580f26e 100644 --- a/utils/RectorGenerator/src/TemplateVariablesFactory.php +++ b/utils/RectorGenerator/src/TemplateVariablesFactory.php @@ -67,18 +67,14 @@ final class TemplateVariablesFactory return ''; } - $sourceDocBlock = <<<'PHP' -/** -%s - */ -PHP; - $sourceAsString = ''; foreach ($source as $singleSource) { $sourceAsString .= ' * @see ' . $singleSource . PHP_EOL; } - return sprintf($sourceDocBlock, rtrim($sourceAsString)); + $sourceAsString .= ' *'; + + return rtrim($sourceAsString); } private function createNodeTypePhp(Configuration $configuration): string diff --git a/utils/RectorGenerator/templates/packages/_Package_/src/Rector/_Category_/_Name_.php.inc b/utils/RectorGenerator/templates/packages/_Package_/src/Rector/_Category_/_Name_.php.inc index f52a83c37a9..f5bbd7e36ef 100644 --- a/utils/RectorGenerator/templates/packages/_Package_/src/Rector/_Category_/_Name_.php.inc +++ b/utils/RectorGenerator/templates/packages/_Package_/src/Rector/_Category_/_Name_.php.inc @@ -9,9 +9,8 @@ use Rector\Rector\AbstractRector; use Rector\RectorDefinition\CodeSample; use Rector\RectorDefinition\RectorDefinition; -_Source_ - /** +_Source_ * @see \Rector\_Package_\Tests\Rector\_Category_\_Name_\_Name_Test */ final class _Name_ extends AbstractRector