mirror of
https://github.com/rectorphp/rector.git
synced 2024-05-28 23:10:51 +00:00
[CodingStyle] Remove UseMessageVariableForSprintfInSymfonyStyleRector as local custom rule (#1419)
This commit is contained in:
parent
16f9dc7d00
commit
9d8e5c9011
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
|
|
@ -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);
|
||||
};
|
|
@ -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([
|
||||
|
|
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
|
@ -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';
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
};
|
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user