From e4eeb19c45e40661c209e59b81755e8022d77f1d Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Thu, 26 Sep 2019 13:43:26 +0200 Subject: [PATCH] [CodeQuality] Add RemoveSoleValueSprintfRector --- config/set/code-quality/code-quality.yaml | 1 + .../FuncCall/RemoveSoleValueSprintfRector.php | 87 +++++++++++++++++++ .../Fixture/fixture.php.inc | 33 +++++++ .../RemoveSoleValueSprintfRectorTest.php | 30 +++++++ 4 files changed, 151 insertions(+) create mode 100644 packages/CodeQuality/src/Rector/FuncCall/RemoveSoleValueSprintfRector.php create mode 100644 packages/CodeQuality/tests/Rector/FuncCall/RemoveSoleValueSprintfRector/Fixture/fixture.php.inc create mode 100644 packages/CodeQuality/tests/Rector/FuncCall/RemoveSoleValueSprintfRector/RemoveSoleValueSprintfRectorTest.php diff --git a/config/set/code-quality/code-quality.yaml b/config/set/code-quality/code-quality.yaml index 7646201a2bda..0603e2467513 100644 --- a/config/set/code-quality/code-quality.yaml +++ b/config/set/code-quality/code-quality.yaml @@ -40,3 +40,4 @@ services: Rector\CodeQuality\Rector\FuncCall\StrlenZeroToIdenticalEmptyStringRector: ~ Rector\CodeQuality\Rector\If_\RemoveAlwaysTrueConditionSetInConstructorRector: ~ Rector\CodeQuality\Rector\Catch_\ThrowWithPreviousExceptionRector: ~ + Rector\CodeQuality\Rector\FuncCall\RemoveSoleValueSprintfRector: ~ diff --git a/packages/CodeQuality/src/Rector/FuncCall/RemoveSoleValueSprintfRector.php b/packages/CodeQuality/src/Rector/FuncCall/RemoveSoleValueSprintfRector.php new file mode 100644 index 000000000000..6922b5a9b134 --- /dev/null +++ b/packages/CodeQuality/src/Rector/FuncCall/RemoveSoleValueSprintfRector.php @@ -0,0 +1,87 @@ +isName($node, 'sprintf')) { + return null; + } + + if (count($node->args) !== 2) { + return null; + } + + $maskArgument = $node->args[0]->value; + if (! $maskArgument instanceof Node\Scalar\String_) { + return null; + } + + if ($maskArgument->value !== '%s') { + return null; + } + + $valueArgument = $node->args[1]->value; + if (! $this->isStaticType($valueArgument, StringType::class)) { + return null; + } + + return $valueArgument; + } +} diff --git a/packages/CodeQuality/tests/Rector/FuncCall/RemoveSoleValueSprintfRector/Fixture/fixture.php.inc b/packages/CodeQuality/tests/Rector/FuncCall/RemoveSoleValueSprintfRector/Fixture/fixture.php.inc new file mode 100644 index 000000000000..c383986a97c5 --- /dev/null +++ b/packages/CodeQuality/tests/Rector/FuncCall/RemoveSoleValueSprintfRector/Fixture/fixture.php.inc @@ -0,0 +1,33 @@ + +----- + diff --git a/packages/CodeQuality/tests/Rector/FuncCall/RemoveSoleValueSprintfRector/RemoveSoleValueSprintfRectorTest.php b/packages/CodeQuality/tests/Rector/FuncCall/RemoveSoleValueSprintfRector/RemoveSoleValueSprintfRectorTest.php new file mode 100644 index 000000000000..f3b2b38afeb9 --- /dev/null +++ b/packages/CodeQuality/tests/Rector/FuncCall/RemoveSoleValueSprintfRector/RemoveSoleValueSprintfRectorTest.php @@ -0,0 +1,30 @@ +doTestFile($file); + } + + /** + * @return string[] + */ + public function provideDataForTest(): iterable + { + yield [__DIR__ . '/Fixture/fixture.php.inc']; + } + + protected function getRectorClass(): string + { + return RemoveSoleValueSprintfRector::class; + } +}