[Cleanup] merge duplicated SplitStringClassConstantToClassConstFetchRector to UseClassKeywordForClassNameResolutionRector (#1401)

This commit is contained in:
Tomas Votruba 2021-12-06 10:32:28 +03:00 committed by GitHub
parent dda87fc6d2
commit 27a78d96ed
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 39 additions and 207 deletions

View File

@ -1,4 +1,4 @@
# 503 Rules Overview
# 502 Rules Overview
<br>
@ -12,7 +12,7 @@
- [CodeQuality](#codequality) (70)
- [CodingStyle](#codingstyle) (36)
- [CodingStyle](#codingstyle) (35)
- [Compatibility](#compatibility) (1)
@ -2437,30 +2437,6 @@ Separate constant and properties to own lines
<br>
### SplitStringClassConstantToClassConstFetchRector
Separate class constant in a string to class constant fetch and string
- class: [`Rector\CodingStyle\Rector\String_\SplitStringClassConstantToClassConstFetchRector`](../rules/CodingStyle/Rector/String_/SplitStringClassConstantToClassConstFetchRector.php)
```diff
class SomeClass
{
const HI = true;
}
class AnotherClass
{
public function get()
{
- return 'SomeClass::HI';
+ return SomeClass::class . '::HI';
}
}
```
<br>
### StrictArraySearchRector
Makes array_search search for identical elements

View File

@ -25,7 +25,6 @@ use Rector\CodingStyle\Rector\Plus\UseIncrementAssignRector;
use Rector\CodingStyle\Rector\PostInc\PostIncDecToPreIncDecRector;
use Rector\CodingStyle\Rector\Property\AddFalseDefaultToBoolPropertyRector;
use Rector\CodingStyle\Rector\Stmt\NewlineAfterStatementRector;
use Rector\CodingStyle\Rector\String_\SplitStringClassConstantToClassConstFetchRector;
use Rector\CodingStyle\Rector\String_\SymplifyQuoteEscapeRector;
use Rector\CodingStyle\Rector\Switch_\BinarySwitchToIfElseRector;
use Rector\CodingStyle\Rector\Ternary\TernaryConditionVariableAssignmentRector;
@ -43,7 +42,6 @@ return static function (ContainerConfigurator $containerConfigurator): void {
$services->set(TernaryConditionVariableAssignmentRector::class);
$services->set(SymplifyQuoteEscapeRector::class);
$services->set(SplitGroupedConstantsAndPropertiesRector::class);
$services->set(SplitStringClassConstantToClassConstFetchRector::class);
$services->set(StringClassNameToClassConstantRector::class);
$services->set(ConsistentPregDelimiterRector::class);
$services->set(FollowRequireByDirRector::class);

View File

@ -6,7 +6,6 @@ use PHPUnit\Framework\TestCase;
use Rector\CodingStyle\Enum\PreferenceSelfThis;
use Rector\CodingStyle\Rector\ClassMethod\ReturnArrayClassMethodToYieldRector;
use Rector\CodingStyle\Rector\MethodCall\PreferThisOrSelfMethodCallRector;
use Rector\CodingStyle\Rector\String_\SplitStringClassConstantToClassConstFetchRector;
use Rector\CodingStyle\ValueObject\ReturnArrayClassMethodToYield;
use Rector\Core\Configuration\Option;
use Rector\Nette\Set\NetteSetList;
@ -70,8 +69,6 @@ return static function (ContainerConfigurator $containerConfigurator): void {
$parameters->set(Option::SKIP, [
StringClassNameToClassConstantRector::class,
// some classes in config might not exist without dev dependencies
SplitStringClassConstantToClassConstFetchRector::class,
FinalizeClassesWithoutChildrenRector::class => [
__DIR__ . '/rules/DowngradePhp74/Rector/Array_/DowngradeArraySpreadRector.php',

View File

@ -1,37 +0,0 @@
<?php
namespace Rector\Tests\CodingStyle\Rector\String_\SplitStringClassConstantToClassConstFetchRector\Fixture;
class SomeClass
{
const HI = true;
}
class AnotherClass
{
public function get()
{
return 'Rector\Tests\CodingStyle\Rector\String_\SplitStringClassConstantToClassConstFetchRector\Fixture\SomeClass::HI';
}
}
?>
-----
<?php
namespace Rector\Tests\CodingStyle\Rector\String_\SplitStringClassConstantToClassConstFetchRector\Fixture;
class SomeClass
{
const HI = true;
}
class AnotherClass
{
public function get()
{
return \Rector\Tests\CodingStyle\Rector\String_\SplitStringClassConstantToClassConstFetchRector\Fixture\SomeClass::class . '::HI';
}
}
?>

View File

@ -1,33 +0,0 @@
<?php
declare(strict_types=1);
namespace Rector\Tests\CodingStyle\Rector\String_\SplitStringClassConstantToClassConstFetchRector;
use Iterator;
use Rector\Testing\PHPUnit\AbstractRectorTestCase;
use Symplify\SmartFileSystem\SmartFileInfo;
final class SplitStringClassConstantToClassConstFetchRectorTest 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\String_\SplitStringClassConstantToClassConstFetchRector;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
return static function (ContainerConfigurator $containerConfigurator): void {
$services = $containerConfigurator->services();
$services->set(SplitStringClassConstantToClassConstFetchRector::class);
};

View File

@ -0,0 +1,27 @@
<?php
namespace Rector\Tests\CodingStyle\Rector\String_\UseClassKeywordForClassNameResolutionRector\Fixture;
class AnotherClass
{
public function get()
{
return '\Rector\Tests\CodingStyle\Rector\String_\UseClassKeywordForClassNameResolutionRector\Source\ConstantReferenceClass::HI';
}
}
?>
-----
<?php
namespace Rector\Tests\CodingStyle\Rector\String_\UseClassKeywordForClassNameResolutionRector\Fixture;
class AnotherClass
{
public function get()
{
return \Rector\Tests\CodingStyle\Rector\String_\UseClassKeywordForClassNameResolutionRector\Source\ConstantReferenceClass::class . '::HI';
}
}
?>

View File

@ -0,0 +1,10 @@
<?php
declare(strict_types=1);
namespace Rector\Tests\CodingStyle\Rector\String_\UseClassKeywordForClassNameResolutionRector\Source;
final class ConstantReferenceClass
{
const HI = true;
}

View File

@ -1,95 +0,0 @@
<?php
declare(strict_types=1);
namespace Rector\CodingStyle\Rector\String_;
use PhpParser\Node;
use PhpParser\Node\Expr\BinaryOp\Concat;
use PhpParser\Node\Expr\ClassConstFetch;
use PhpParser\Node\Name\FullyQualified;
use PhpParser\Node\Scalar\String_;
use PHPStan\Reflection\ReflectionProvider;
use Rector\Core\Rector\AbstractRector;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
* @see \Rector\Tests\CodingStyle\Rector\String_\SplitStringClassConstantToClassConstFetchRector\SplitStringClassConstantToClassConstFetchRectorTest
*/
final class SplitStringClassConstantToClassConstFetchRector extends AbstractRector
{
public function __construct(
private readonly ReflectionProvider $reflectionProvider
) {
}
public function getRuleDefinition(): RuleDefinition
{
return new RuleDefinition(
'Separate class constant in a string to class constant fetch and string',
[
new CodeSample(
<<<'CODE_SAMPLE'
class SomeClass
{
const HI = true;
}
class AnotherClass
{
public function get()
{
return 'SomeClass::HI';
}
}
CODE_SAMPLE
,
<<<'CODE_SAMPLE'
class SomeClass
{
const HI = true;
}
class AnotherClass
{
public function get()
{
return SomeClass::class . '::HI';
}
}
CODE_SAMPLE
),
]
);
}
/**
* @return array<class-string<Node>>
*/
public function getNodeTypes(): array
{
return [String_::class];
}
/**
* @param String_ $node
*/
public function refactor(Node $node): ?Node
{
if (substr_count($node->value, '::') !== 1) {
return null;
}
// a possible constant reference
[$possibleClass, $secondPart] = explode('::', $node->value);
if (! $this->reflectionProvider->hasClass($possibleClass)) {
return null;
}
$classConstFetch = new ClassConstFetch(new FullyQualified(ltrim($possibleClass, '\\')), 'class');
return new Concat($classConstFetch, new String_('::' . $secondPart));
}
}