-
-
Notifications
You must be signed in to change notification settings - Fork 374
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[PHP8.3] add new rectors for get_class()/get_parent_class() without a…
…rguments (#6405) * add new rectors for php8.3's deprecation of get_class()/get_parent_class() without arguments * relocate reasoning docs to feature constant * combine the two rules into one
- Loading branch information
Showing
9 changed files
with
218 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
27 changes: 27 additions & 0 deletions
27
...ector/FuncCall/RemoveGetClassGetParentClassNoArgsRector/Fixture/fixture_get_class.php.inc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
<?php | ||
|
||
namespace Rector\Tests\Php83\Rector\FuncCall\RemoveGetClassGetParentClassNoArgsRector\Fixture; | ||
|
||
class Fixture | ||
{ | ||
public function test() | ||
{ | ||
echo get_class(); | ||
} | ||
} | ||
|
||
?> | ||
----- | ||
<?php | ||
|
||
namespace Rector\Tests\Php83\Rector\FuncCall\RemoveGetClassGetParentClassNoArgsRector\Fixture; | ||
|
||
class Fixture | ||
{ | ||
public function test() | ||
{ | ||
echo self::class; | ||
} | ||
} | ||
|
||
?> |
27 changes: 27 additions & 0 deletions
27
...uncCall/RemoveGetClassGetParentClassNoArgsRector/Fixture/fixture_get_parent_class.php.inc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
<?php | ||
|
||
namespace Rector\Tests\Php83\Rector\FuncCall\RemoveGetClassGetParentClassNoArgsRector\Fixture; | ||
|
||
class Fixture | ||
{ | ||
public function test() | ||
{ | ||
echo get_parent_class(); | ||
} | ||
} | ||
|
||
?> | ||
----- | ||
<?php | ||
|
||
namespace Rector\Tests\Php83\Rector\FuncCall\RemoveGetClassGetParentClassNoArgsRector\Fixture; | ||
|
||
class Fixture | ||
{ | ||
public function test() | ||
{ | ||
echo parent::class; | ||
} | ||
} | ||
|
||
?> |
11 changes: 11 additions & 0 deletions
11
...uncCall/RemoveGetClassGetParentClassNoArgsRector/Fixture/skip_different_func_call.php.inc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
<?php | ||
|
||
namespace Rector\Tests\Php83\Rector\FuncCall\RemoveGetClassGetParentClassNoArgsRector\Fixture; | ||
|
||
class SkipDifferentFuncCall | ||
{ | ||
public function run($a, $b) | ||
{ | ||
return str_contains($a, $b); | ||
} | ||
} |
15 changes: 15 additions & 0 deletions
15
...3/Rector/FuncCall/RemoveGetClassGetParentClassNoArgsRector/Fixture/skip_with_args.php.inc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
<?php | ||
|
||
namespace Rector\Tests\Php83\Rector\FuncCall\RemoveGetClassGetParentClassNoArgsRector\Fixture; | ||
|
||
use Rector\Php83\Rector\FuncCall\RemoveGetClassGetParentClassNoArgsRector; | ||
|
||
class SkipWithArgs | ||
{ | ||
public function test() | ||
{ | ||
$obj = new RemoveGetClassGetParentClassNoArgsRector(); | ||
echo get_class($obj); | ||
echo get_parent_class($obj); | ||
} | ||
} |
28 changes: 28 additions & 0 deletions
28
...RemoveGetClassGetParentClassNoArgsRector/RemoveGetClassGetParentClassNoArgsRectorTest.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Rector\Tests\Php83\Rector\FuncCall\RemoveGetClassGetParentClassNoArgsRector; | ||
|
||
use Iterator; | ||
use PHPUnit\Framework\Attributes\DataProvider; | ||
use Rector\Testing\PHPUnit\AbstractRectorTestCase; | ||
|
||
final class RemoveGetClassGetParentClassNoArgsRectorTest extends AbstractRectorTestCase | ||
{ | ||
#[DataProvider('provideData')] | ||
public function test(string $filePath): void | ||
{ | ||
$this->doTestFile($filePath); | ||
} | ||
|
||
public static function provideData(): Iterator | ||
{ | ||
return self::yieldFilesFromDirectory(__DIR__ . '/Fixture'); | ||
} | ||
|
||
public function provideConfigFilePath(): string | ||
{ | ||
return __DIR__ . '/config/configured_rule.php'; | ||
} | ||
} |
13 changes: 13 additions & 0 deletions
13
...Php83/Rector/FuncCall/RemoveGetClassGetParentClassNoArgsRector/config/configured_rule.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
use Rector\Config\RectorConfig; | ||
use Rector\Php83\Rector\FuncCall\RemoveGetClassGetParentClassNoArgsRector; | ||
use Rector\ValueObject\PhpVersion; | ||
|
||
return static function (RectorConfig $rectorConfig): void { | ||
$rectorConfig->rule(RemoveGetClassGetParentClassNoArgsRector::class); | ||
|
||
$rectorConfig->phpVersion(PhpVersion::PHP_83); | ||
}; |
88 changes: 88 additions & 0 deletions
88
rules/Php83/Rector/FuncCall/RemoveGetClassGetParentClassNoArgsRector.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Rector\Php83\Rector\FuncCall; | ||
|
||
use PhpParser\Node; | ||
use Rector\Rector\AbstractRector; | ||
use Rector\ValueObject\PhpVersionFeature; | ||
use Rector\VersionBonding\Contract\MinPhpVersionInterface; | ||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; | ||
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; | ||
|
||
/** | ||
* @see \Rector\Tests\Php83\Rector\FuncCall\RemoveGetClassGetParentClassNoArgsRector\RemoveGetClassGetParentClassNoArgsRectorTest | ||
*/ | ||
final class RemoveGetClassGetParentClassNoArgsRector extends AbstractRector implements MinPhpVersionInterface | ||
{ | ||
public function getRuleDefinition(): RuleDefinition | ||
{ | ||
$r = new RuleDefinition( | ||
'Replace calls to get_class() and get_parent_class() without arguments with self::class and parent::class.', | ||
[ | ||
new CodeSample( | ||
<<<'OLD_CODE_SAMPLE' | ||
class Example extends StdClass { | ||
public function whoAreYou() { | ||
return get_class() . ' daughter of ' . get_parent_class(); | ||
} | ||
} | ||
OLD_CODE_SAMPLE | ||
, | ||
<<<'NEW_CODE_SAMPLE' | ||
class Example extends StdClass { | ||
public function whoAreYou() { | ||
return self::class . ' daughter of ' . parent::class; | ||
} | ||
} | ||
NEW_CODE_SAMPLE | ||
), | ||
] | ||
); | ||
|
||
return $r; | ||
} | ||
|
||
/** | ||
* @return array<class-string<Node>> | ||
*/ | ||
public function getNodeTypes(): array | ||
{ | ||
return [Node\Expr\FuncCall::class]; | ||
} | ||
|
||
/** | ||
* @param Node\Expr\FuncCall $node | ||
*/ | ||
public function refactor(Node $node): ?Node | ||
{ | ||
if ($node->isFirstClassCallable()) { | ||
return null; | ||
} | ||
|
||
if (count($node->getArgs()) !== 0) { | ||
return null; | ||
} | ||
|
||
$target = null; | ||
if ($this->isName($node, 'get_class')) { | ||
$target = 'self'; | ||
} | ||
|
||
if ($this->isName($node, 'get_parent_class')) { | ||
$target = 'parent'; | ||
} | ||
|
||
if ($target !== null) { | ||
return new Node\Expr\ClassConstFetch(new Node\Name([$target]), new Node\VarLikeIdentifier('class')); | ||
} | ||
|
||
return null; | ||
} | ||
|
||
public function provideMinPhpVersion(): int | ||
{ | ||
return PhpVersionFeature::DEPRECATE_GET_CLASS_WITHOUT_ARGS; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters