diff --git a/config/set/coding-style/coding-style.yaml b/config/set/coding-style/coding-style.yaml index bbfa8dc714b..15d80249deb 100644 --- a/config/set/coding-style/coding-style.yaml +++ b/config/set/coding-style/coding-style.yaml @@ -23,3 +23,4 @@ services: Rector\CodingStyle\Rector\Assign\SplitDoubleAssignRector: ~ Rector\CodingStyle\Rector\ClassConst\VarConstantCommentRector: ~ + Rector\CodingStyle\Rector\Encapsed\EncapsedStringsToSprintfRector: ~ diff --git a/packages/CodingStyle/src/Rector/Encapsed/EncapsedStringsToSprintfRector.php b/packages/CodingStyle/src/Rector/Encapsed/EncapsedStringsToSprintfRector.php new file mode 100644 index 00000000000..f1e7e58230c --- /dev/null +++ b/packages/CodingStyle/src/Rector/Encapsed/EncapsedStringsToSprintfRector.php @@ -0,0 +1,75 @@ +parts as $part) { + if ($part instanceof Node\Scalar\EncapsedStringPart) { + $string .= $part->value; + continue; + } + + if ($part instanceof Node\Expr\Variable) { + $string .= '%s'; + $arguments[] = new Node\Arg($part); + } + } + + $arguments = array_merge([new Node\Arg(new Node\Scalar\String_($string))], $arguments); + + return new Node\Expr\FuncCall(new Node\Name('sprintf'), $arguments); + } +} diff --git a/packages/CodingStyle/tests/Rector/Encapsed/EncapsedStringsToSprintfRector/EncapsedStringsToSprintfRectorTest.php b/packages/CodingStyle/tests/Rector/Encapsed/EncapsedStringsToSprintfRector/EncapsedStringsToSprintfRectorTest.php new file mode 100644 index 00000000000..cbfbdd59cd3 --- /dev/null +++ b/packages/CodingStyle/tests/Rector/Encapsed/EncapsedStringsToSprintfRector/EncapsedStringsToSprintfRectorTest.php @@ -0,0 +1,19 @@ +doTestFiles([__DIR__ . '/Fixture/fixture.php.inc', __DIR__ . '/Fixture/numberz.php.inc']); + } + + protected function getRectorClass(): string + { + return EncapsedStringsToSprintfRector::class; + } +} diff --git a/packages/CodingStyle/tests/Rector/Encapsed/EncapsedStringsToSprintfRector/Fixture/fixture.php.inc b/packages/CodingStyle/tests/Rector/Encapsed/EncapsedStringsToSprintfRector/Fixture/fixture.php.inc new file mode 100644 index 00000000000..b6e90e65e1b --- /dev/null +++ b/packages/CodingStyle/tests/Rector/Encapsed/EncapsedStringsToSprintfRector/Fixture/fixture.php.inc @@ -0,0 +1,27 @@ + +----- + diff --git a/packages/CodingStyle/tests/Rector/Encapsed/EncapsedStringsToSprintfRector/Fixture/numberz.php.inc b/packages/CodingStyle/tests/Rector/Encapsed/EncapsedStringsToSprintfRector/Fixture/numberz.php.inc new file mode 100644 index 00000000000..fc006f97bc2 --- /dev/null +++ b/packages/CodingStyle/tests/Rector/Encapsed/EncapsedStringsToSprintfRector/Fixture/numberz.php.inc @@ -0,0 +1,27 @@ + +----- +