[CodingStyle] Remove UseMessageVariableForSprintfInSymfonyStyleRector as local custom rule (#1419)

This commit is contained in:
Tomas Votruba 2021-12-08 01:15:20 +03:00 committed by GitHub
parent 16f9dc7d00
commit 9d8e5c9011
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 2 additions and 225 deletions

View File

@ -1,4 +1,4 @@
# 502 Rules Overview
# 501 Rules Overview
<br>
@ -10,7 +10,7 @@
- [CodeQuality](#codequality) (70)
- [CodingStyle](#codingstyle) (35)
- [CodingStyle](#codingstyle) (34)
- [Compatibility](#compatibility) (1)
@ -2471,28 +2471,6 @@ Use ++ increment instead of `$var += 1`
<br>
### UseMessageVariableForSprintfInSymfonyStyleRector
Decouple `$message` property from `sprintf()` calls in `$this->symfonyStyle->method()`
- class: [`Rector\CodingStyle\Rector\MethodCall\UseMessageVariableForSprintfInSymfonyStyleRector`](../rules/CodingStyle/Rector/MethodCall/UseMessageVariableForSprintfInSymfonyStyleRector.php)
```diff
use Symfony\Component\Console\Style\SymfonyStyle;
final class SomeClass
{
public function run(SymfonyStyle $symfonyStyle)
{
- $symfonyStyle->info(sprintf('Hi %s', 'Tom'));
+ $message = sprintf('Hi %s', 'Tom');
+ $symfonyStyle->info($message);
}
}
```
<br>
### VarConstantCommentRector
Constant should have a `@var` comment with type

View File

@ -4,12 +4,10 @@ declare(strict_types=1);
use Rector\CodeQuality\Rector\Identical\FlipTypeControlToUseExclusiveTypeRector;
use Rector\CodingStyle\Rector\FuncCall\CountArrayToEmptyArrayComparisonRector;
use Rector\CodingStyle\Rector\MethodCall\UseMessageVariableForSprintfInSymfonyStyleRector;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
return static function (ContainerConfigurator $containerConfigurator): void {
$services = $containerConfigurator->services();
$services->set(CountArrayToEmptyArrayComparisonRector::class);
$services->set(UseMessageVariableForSprintfInSymfonyStyleRector::class);
$services->set(FlipTypeControlToUseExclusiveTypeRector::class);
};

View File

@ -1,11 +0,0 @@
<?php
declare(strict_types=1);
use Rector\CodingStyle\Rector\MethodCall\UseMessageVariableForSprintfInSymfonyStyleRector;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
return static function (ContainerConfigurator $containerConfigurator): void {
$services = $containerConfigurator->services();
$services->set(UseMessageVariableForSprintfInSymfonyStyleRector::class);
};

View File

@ -20,7 +20,6 @@ use Rector\CodingStyle\Rector\FuncCall\ConsistentPregDelimiterRector;
use Rector\CodingStyle\Rector\FuncCall\VersionCompareFuncCallToConstantRector;
use Rector\CodingStyle\Rector\If_\NullableCompareToNullRector;
use Rector\CodingStyle\Rector\Include_\FollowRequireByDirRector;
use Rector\CodingStyle\Rector\MethodCall\UseMessageVariableForSprintfInSymfonyStyleRector;
use Rector\CodingStyle\Rector\Plus\UseIncrementAssignRector;
use Rector\CodingStyle\Rector\PostInc\PostIncDecToPreIncDecRector;
use Rector\CodingStyle\Rector\Property\AddFalseDefaultToBoolPropertyRector;
@ -57,7 +56,6 @@ return static function (ContainerConfigurator $containerConfigurator): void {
$services->set(MakeInheritedMethodVisibilitySameAsParentRector::class);
$services->set(CallUserFuncArrayToVariadicRector::class);
$services->set(VersionCompareFuncCallToConstantRector::class);
$services->set(UseMessageVariableForSprintfInSymfonyStyleRector::class);
$services->set(FuncCallToConstFetchRector::class)
->configure([

View File

@ -35,11 +35,6 @@ final class SetList implements SetListInterface
*/
final public const CODING_STYLE = __DIR__ . '/../../../config/set/coding-style.php';
/**
* @var string
*/
final public const CODING_STYLE_ADVANCED = __DIR__ . '/../../../config/set/coding-style-advanced.php';
/**
* @var string
*/

View File

@ -24,7 +24,6 @@ return static function (ContainerConfigurator $containerConfigurator): void {
// include sets
$containerConfigurator->import(SetList::CODING_STYLE);
$containerConfigurator->import(SetList::CODING_STYLE_ADVANCED);
$containerConfigurator->import(SetList::CODE_QUALITY);
$containerConfigurator->import(SetList::DEAD_CODE);
$containerConfigurator->import(SetList::PRIVATIZATION);

View File

@ -1,32 +0,0 @@
<?php
namespace Rector\Tests\CodingStyle\Rector\MethodCall\UseMessageVariableForSprintfInSymfonyStyleRector\Fixture;
use Symfony\Component\Console\Style\SymfonyStyle;
final class SomeClass
{
public function run(SymfonyStyle $symfonyStyle)
{
$symfonyStyle->info(sprintf('Hi %s', 'Tom'));
}
}
?>
-----
<?php
namespace Rector\Tests\CodingStyle\Rector\MethodCall\UseMessageVariableForSprintfInSymfonyStyleRector\Fixture;
use Symfony\Component\Console\Style\SymfonyStyle;
final class SomeClass
{
public function run(SymfonyStyle $symfonyStyle)
{
$message = sprintf('Hi %s', 'Tom');
$symfonyStyle->info($message);
}
}
?>

View File

@ -1,33 +0,0 @@
<?php
declare(strict_types=1);
namespace Rector\Tests\CodingStyle\Rector\MethodCall\UseMessageVariableForSprintfInSymfonyStyleRector;
use Iterator;
use Rector\Testing\PHPUnit\AbstractRectorTestCase;
use Symplify\SmartFileSystem\SmartFileInfo;
final class UseMessageVariableForSprintfInSymfonyStyleRectorTest extends AbstractRectorTestCase
{
/**
* @dataProvider provideData()
*/
public function test(SmartFileInfo $fileInfo): void
{
$this->doTestFileInfo($fileInfo);
}
/**
* @return Iterator<SmartFileInfo>
*/
public function provideData(): Iterator
{
return $this->yieldFilesFromDirectory(__DIR__ . '/Fixture');
}
public function provideConfigFilePath(): string
{
return __DIR__ . '/config/configured_rule.php';
}
}

View File

@ -1,11 +0,0 @@
<?php
declare(strict_types=1);
use Rector\CodingStyle\Rector\MethodCall\UseMessageVariableForSprintfInSymfonyStyleRector;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
return static function (ContainerConfigurator $containerConfigurator): void {
$services = $containerConfigurator->services();
$services->set(UseMessageVariableForSprintfInSymfonyStyleRector::class);
};

View File

@ -1,104 +0,0 @@
<?php
declare(strict_types=1);
namespace Rector\CodingStyle\Rector\MethodCall;
use PhpParser\Node;
use PhpParser\Node\Arg;
use PhpParser\Node\Expr\Assign;
use PhpParser\Node\Expr\FuncCall;
use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\Expr\Variable;
use PHPStan\Type\ObjectType;
use Rector\Core\Rector\AbstractRector;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
* @see \Rector\Tests\CodingStyle\Rector\MethodCall\UseMessageVariableForSprintfInSymfonyStyleRector\UseMessageVariableForSprintfInSymfonyStyleRectorTest
*/
final class UseMessageVariableForSprintfInSymfonyStyleRector extends AbstractRector
{
public function getRuleDefinition(): RuleDefinition
{
return new RuleDefinition(
'Decouple $message property from sprintf() calls in $this->symfonyStyle->method()',
[
new CodeSample(
<<<'CODE_SAMPLE'
use Symfony\Component\Console\Style\SymfonyStyle;
final class SomeClass
{
public function run(SymfonyStyle $symfonyStyle)
{
$symfonyStyle->info(sprintf('Hi %s', 'Tom'));
}
}
CODE_SAMPLE
,
<<<'CODE_SAMPLE'
use Symfony\Component\Console\Style\SymfonyStyle;
final class SomeClass
{
public function run(SymfonyStyle $symfonyStyle)
{
$message = sprintf('Hi %s', 'Tom');
$symfonyStyle->info($message);
}
}
CODE_SAMPLE
),
]
);
}
/**
* @return array<class-string<Node>>
*/
public function getNodeTypes(): array
{
return [MethodCall::class];
}
/**
* @param MethodCall $node
*/
public function refactor(Node $node): ?Node
{
if (! $this->isObjectType($node->var, new ObjectType('Symfony\Component\Console\Style\SymfonyStyle'))) {
return null;
}
if (! isset($node->args[0])) {
return null;
}
if (! $node->args[0] instanceof Arg) {
return null;
}
$argValue = $node->args[0]->value;
if (! $argValue instanceof FuncCall) {
return null;
}
if (! $this->nodeNameResolver->isName($argValue, 'sprintf')) {
return null;
}
$messageVariable = new Variable('message');
$assign = new Assign($messageVariable, $argValue);
$this->nodesToAddCollector->addNodeBeforeNode($assign, $node);
if (! $node->args[0] instanceof Arg) {
return null;
}
$node->args[0]->value = $messageVariable;
return $node;
}
}