8000 [Symfony] Add RemoveDefaultGetBlockPrefixRector · rectorphp/rector@d1a8ddc · GitHub
[go: up one dir, main page]

Skip to content

Commit d1a8ddc

Browse files
committed
[Symfony] Add RemoveDefaultGetBlockPrefixRector
1 parent 965cef9 commit d1a8ddc

File tree

5 files changed

+188
-2
lines changed

5 files changed

+188
-2
lines changed

config/set/symfony/symfony30.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,3 +161,4 @@ services:
161161

162162
# swift mailer
163163
'Symfony\Bridge\Swiftmailer\DataCollector\MessageDataCollector': 'Symfony\Bundle\SwiftmailerBundle\DataCollector\MessageDataCollector'
164+
Rector\Symfony\Rector\ClassMethod\RemoveDefaultGetBlockPrefixRector: null

docs/rector_rules_overview.md

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# All 523 Rectors Overview
1+
# All 524 Rectors Overview
22

33
- [Projects](#projects)
44
- [General](#general)
@@ -65,7 +65,7 @@
6565
- [SOLID](#solid) (12)
6666
- [Sensio](#sensio) (3)
6767
- [StrictCodeQuality](#strictcodequality) (1)
68-
- [Symfony](#symfony) (32)
68+
- [Symfony](#symfony) (33)
6969
- [SymfonyCodeQuality](#symfonycodequality) (1)
7070
- [SymfonyPHPUnit](#symfonyphpunit) (1)
7171
- [Twig](#twig) (1)
@@ -11148,6 +11148,27 @@ Turns redirect to route to short helper method in Controller in Symfony
1114811148

1114911149
<br><br>
1115011150

11151+
### `RemoveDefaultGetBlockPrefixRector`
11152+
11153+
- class: [`Rector\Symfony\Rector\ClassMethod\RemoveDefaultGetBlockPrefixRector`](/../master/rules/symfony/src/Rector/ClassMethod/RemoveDefaultGetBlockPrefixRector.php)
11154+
- [test fixtures](/../master/rules/symfony/tests/Rector/ClassMethod/RemoveDefaultGetBlockPrefixRector/Fixture)
11155+
11156+
Rename `getBlockPrefix()` if it returns the default value - class to underscore, e.g. UserFormType = user_form
11157+
11158+
```diff
11159+
use Symfony\Component\Form\AbstractType;
11160+
11161+
class TaskType extends AbstractType
11162+
{
11163+
- public function getBlockPrefix()
11164+
- {
11165+
- return 'task';
11166+
- }
11167+
}
11168+
```
11169+
11170+
<br><br>
11171+
1115111172
### `ResponseStatusCodeRector`
1115211173

1115311174
- class: [`Rector\Symfony\Rector\BinaryOp\ResponseStatusCodeRector`](/../master/rules/symfony/src/Rector/BinaryOp/ResponseStatusCodeRector.php)
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Rector\Symfony\Rector\ClassMethod;
6+
7+
use PhpParser\Node;
8+
use PhpParser\Node\Stmt\ClassMethod;
9+
use PhpParser\Node\Stmt\Return_;
10+
use Rector\Core\Rector\AbstractRector;
11+
use Rector\Core\RectorDefinition\CodeSample;
12+
use Rector\Core\RectorDefinition\RectorDefinition;
13+
use Rector\Core\Util\StaticRectorStrings;
14+
use Rector\NodeTypeResolver\Node\AttributeKey;
15+
16+
/**
17+
* @see https://github.com/symfony/symfony/blob/3.4/UPGRADE-3.0.md#form
18+
*
19+
* @see \Rector\Symfony\Tests\Rector\ClassMethod\RemoveDefaultGetBlockPrefixRector\RemoveDefaultGetBlockPrefixRectorTest
20+
*/
21+
final class RemoveDefaultGetBlockPrefixRector extends AbstractRector
22+
{
23+
public function getDefinition(): RectorDefinition
24+
{
25+
return new RectorDefinition(
26+
'Rename `getBlockPrefix()` if it returns the default value - class to underscore, e.g. UserFormType = user_form',
27+
[
28+
new CodeSample(
29+
<<<'PHP'
30+
use Symfony\Component\Form\AbstractType;
31+
32+
class TaskType extends AbstractType
33+
{
34+
public function getBlockPrefix()
35+
{
36+
return 'task';
37+
}
38+
}
39+
PHP
40+
,
41+
<<<'PHP'
42+
use Symfony\Component\Form\AbstractType;
43+
44+
class TaskType extends AbstractType
45+
{
46+
}
47+
PHP
48+
49+
),
50+
]
51+
);
52+
}
53+
54+
/**
55+
* @return string[]
56+
*/
57+
public function getNodeTypes(): array
58+
{
59+
return [ClassMethod::class];
60+
}
61+
62+
/**
63+
* @param ClassMethod $node
64+
*/
65+
public function refactor(Node $node): ?Node
66+
{
67+
if (! $this->isInObjectType($node, 'Symfony\Component\Form\AbstractType')) {
68+
return null;
69+
}
70+
71+
if (! $this->isName($node->name, 'getBlockPrefix')) {
72+
return null;
73+
}
74+
75+
if (count((array) $node->stmts) !== 1) {
76+
return null;
77+
}
78+
79+
$onlyStmt = $node->stmts[0];
80+
if (! $onlyStmt instanceof Return_) {
81+
return null;
82+
}
83+
84+
if ($onlyStmt->expr === null) {
85+
return null;
86+
}
87+
88+
$returnedValue = $this->getValue($onlyStmt->expr);
89+
if ($returnedValue === null) {
90+
return null;
91+
}
92+
93+
$classShortName = $node->getAttribute(AttributeKey::CLASS_SHORT_NAME);
94+
95+
$classShortName = rtrim($classShortName, 'Type');
96+
$underscoredClassShortName = StaticRectorStrings::camelCaseToUnderscore($classShortName);
97+
98+
if ($underscoredClassShortName !== $returnedValue) {
99+
return null;
100+
}
101+
102+
$this->removeNode($node);
103+
104+
return null;
105+
}
106+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
namespace Rector\Symfony\Tests\Rector\ClassMethod\RemoveDefaultGetBlockPrefixRector\Fixture;
4+
5+
use Symfony\Component\Form\AbstractType;
6+
7+
class TaskType extends AbstractType
8+
{
9+
public function getBlockPrefix()
10+
{
11+
return 'task';
12+
}
13+
}
14+
15+
?>
16+
-----
17+
<?php
18+
19+
namespace Rector\Symfony\Tests\Rector\ClassMethod\RemoveDefaultGetBlockPrefixRector\Fixture;
20+
21+
use Symfony\Component\Form\AbstractType;
22+
23+
class TaskType extends AbstractType
24+
{
25+
}
26+
27+
?>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Rector\Symfony\Tests\Rector\ClassMethod\RemoveDefaultGetBlockPrefixRector;
6+
7+
use Iterator;
8+
use Rector\Core\Testing\PHPUnit\AbstractRectorTestCase;
9+
use Rector\Symfony\Rector\ClassMethod\RemoveDefaultGetBlockPrefixRector;
10+
use Symplify\SmartFileSystem\SmartFileInfo;
11+
12+
final class RemoveDefaultGetBlockPrefixRectorTest extends AbstractRectorTestCase
13+
{
14+
/**
15+
* @dataProvider provideData()
16+
*/
17+
public function test(SmartFileInfo $fileInfo): void
18+
{
19+
$this->doTestFileInfo($fileInfo);
20+
}
21+
22+
public function provideData(): Iterator
23+
{
24+
return $this->yieldFilesFromDirectory(__DIR__ . '/Fixture');
25+
}
26+
27+
protected function getRectorClass(): string
28+
{
29+
return RemoveDefaultGetBlockPrefixRector::class;
30+
}
31+
}

0 commit comments

Comments
 (0)
0