Updated Rector to commit 328b5b4a02

328b5b4a02 [Cleanup] Removing NodeRepository from constant string regex rule + [Naming] Remove dangerou isser/getter renames (#286)
This commit is contained in:
Tomas Votruba 2021-06-24 13:19:56 +00:00
parent 9742bdd2b0
commit 3164f411cc
16 changed files with 135 additions and 696 deletions

View File

@ -5,8 +5,6 @@ namespace RectorPrefix20210624;
use Rector\Naming\Rector\Assign\RenameVariableToMatchMethodCallReturnTypeRector;
use Rector\Naming\Rector\Class_\RenamePropertyToMatchTypeRector;
use Rector\Naming\Rector\ClassMethod\MakeGetterClassMethodNameStartWithGetRector;
use Rector\Naming\Rector\ClassMethod\MakeIsserClassMethodNameStartWithIsRector;
use Rector\Naming\Rector\ClassMethod\RenameParamToMatchTypeRector;
use Rector\Naming\Rector\ClassMethod\RenameVariableToMatchNewTypeRector;
use Rector\Naming\Rector\Foreach_\RenameForeachValueVariableToMatchExprVariableRector;
@ -19,8 +17,6 @@ return static function (\Symfony\Component\DependencyInjection\Loader\Configurat
$services->set(\Rector\Naming\Rector\Class_\RenamePropertyToMatchTypeRector::class);
$services->set(\Rector\Naming\Rector\ClassMethod\RenameVariableToMatchNewTypeRector::class);
$services->set(\Rector\Naming\Rector\Assign\RenameVariableToMatchMethodCallReturnTypeRector::class);
$services->set(\Rector\Naming\Rector\ClassMethod\MakeGetterClassMethodNameStartWithGetRector::class);
$services->set(\Rector\Naming\Rector\ClassMethod\MakeIsserClassMethodNameStartWithIsRector::class);
$services->set(\Rector\Naming\Rector\Foreach_\RenameForeachValueVariableToMatchMethodCallReturnTypeRector::class);
$services->set(\Rector\Naming\Rector\Property\MakeBoolPropertyRespectIsHasWasMethodNamingRector::class);
$services->set(\Rector\Naming\Rector\Foreach_\RenameForeachValueVariableToMatchExprVariableRector::class);

View File

@ -3,15 +3,10 @@
declare (strict_types=1);
namespace Rector\NodeCollector\NodeCollector;
use RectorPrefix20210624\Nette\Utils\Arrays;
use PhpParser\Node;
use PhpParser\Node\Expr;
use PhpParser\Node\Expr\Array_;
use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\Expr\PropertyFetch;
use PhpParser\Node\Expr\StaticCall;
use PhpParser\Node\Expr\StaticPropertyFetch;
use PhpParser\Node\Expr\Variable;
use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\ClassLike;
use PhpParser\Node\Stmt\ClassMethod;
@ -20,19 +15,11 @@ use PhpParser\Node\Stmt\Property;
use PhpParser\Node\Stmt\Trait_;
use PHPStan\Reflection\MethodReflection;
use PHPStan\Reflection\ReflectionProvider;
use PHPStan\Type\MixedType;
use PHPStan\Type\ObjectType;
use PHPStan\Type\ThisType;
use PHPStan\Type\Type;
use PHPStan\Type\TypeWithClassName;
use PHPStan\Type\UnionType;
use Rector\Core\Exception\ShouldNotHappenException;
use Rector\NodeCollector\NodeAnalyzer\ArrayCallableMethodReferenceAnalyzer;
use Rector\NodeCollector\ValueObject\ArrayCallable;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\NodeTypeResolver;
use Rector\PHPStanStaticTypeMapper\Utils\TypeUnwrapper;
use ReflectionMethod;
/**
* This service contains all the parsed nodes. E.g. all the functions, method call, classes, static calls etc. It's
@ -44,20 +31,6 @@ final class NodeRepository
* @var array<class-string, ClassMethod[]>
*/
private $classMethodsByType = [];
/**
* @var array<class-string, array<array<MethodCall|StaticCall>>>
*/
private $callsByTypeAndMethod = [];
/**
* E.g. [$this, 'someLocalMethod']
*
* @var array<string, array<string, ArrayCallable[]>>
*/
private $arrayCallablesByTypeAndMethod = [];
/**
* @var \Rector\NodeCollector\NodeAnalyzer\ArrayCallableMethodReferenceAnalyzer
*/
private $arrayCallableMethodReferenceAnalyzer;
/**
* @var \Rector\NodeCollector\NodeCollector\ParsedPropertyFetchNodeCollector
*/
@ -70,10 +43,6 @@ final class NodeRepository
* @var \Rector\NodeCollector\NodeCollector\ParsedNodeCollector
*/
private $parsedNodeCollector;
/**
* @var \Rector\PHPStanStaticTypeMapper\Utils\TypeUnwrapper
*/
private $typeUnwrapper;
/**
* @var \PHPStan\Reflection\ReflectionProvider
*/
@ -82,13 +51,11 @@ final class NodeRepository
* @var \Rector\NodeTypeResolver\NodeTypeResolver
*/
private $nodeTypeResolver;
public function __construct(\Rector\NodeCollector\NodeAnalyzer\ArrayCallableMethodReferenceAnalyzer $arrayCallableMethodReferenceAnalyzer, \Rector\NodeCollector\NodeCollector\ParsedPropertyFetchNodeCollector $parsedPropertyFetchNodeCollector, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\NodeCollector\NodeCollector\ParsedNodeCollector $parsedNodeCollector, \Rector\PHPStanStaticTypeMapper\Utils\TypeUnwrapper $typeUnwrapper, \PHPStan\Reflection\ReflectionProvider $reflectionProvider, \Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver)
public function __construct(\Rector\NodeCollector\NodeCollector\ParsedPropertyFetchNodeCollector $parsedPropertyFetchNodeCollector, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\NodeCollector\NodeCollector\ParsedNodeCollector $parsedNodeCollector, \PHPStan\Reflection\ReflectionProvider $reflectionProvider, \Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver)
{
$this->arrayCallableMethodReferenceAnalyzer = $arrayCallableMethodReferenceAnalyzer;
$this->parsedPropertyFetchNodeCollector = $parsedPropertyFetchNodeCollector;
$this->nodeNameResolver = $nodeNameResolver;
$this->parsedNodeCollector = $parsedNodeCollector;
$this->typeUnwrapper = $typeUnwrapper;
$this->reflectionProvider = $reflectionProvider;
$this->nodeTypeResolver = $nodeTypeResolver;
}
@ -96,15 +63,6 @@ final class NodeRepository
{
if ($node instanceof \PhpParser\Node\Stmt\ClassMethod) {
$this->addMethod($node);
return;
}
// array callable - [$this, 'someCall']
if ($node instanceof \PhpParser\Node\Expr\Array_) {
$this->collectArray($node);
return;
}
if ($node instanceof \PhpParser\Node\Expr\MethodCall || $node instanceof \PhpParser\Node\Expr\StaticCall) {
$this->addCall($node);
}
}
public function findClassMethod(string $className, string $methodName) : ?\PhpParser\Node\Stmt\ClassMethod
@ -127,16 +85,6 @@ final class NodeRepository
}
return null;
}
/**
* @return MethodCall[]
*/
public function getMethodsCalls() : array
{
$calls = \RectorPrefix20210624\Nette\Utils\Arrays::flatten($this->callsByTypeAndMethod);
return \array_filter($calls, function (\PhpParser\Node $node) : bool {
return $node instanceof \PhpParser\Node\Expr\MethodCall;
});
}
/**
* @param MethodReflection|ReflectionMethod $methodReflection
*/
@ -174,23 +122,6 @@ final class NodeRepository
$propertyName = $this->nodeNameResolver->getName($propertyFetch);
return $this->parsedPropertyFetchNodeCollector->findPropertyFetchesByTypeAndName($className, $propertyName);
}
/**
* @deprecated Collecting all nodes it not safe for paralel run and static reflection
*
* Use reflection instead,
* @see \Rector\Core\PHPStan\Reflection\CallReflectionResolver::resolveCall()
*
* @return MethodCall[]|StaticCall[]|ArrayCallable[]
*/
public function findCallsByClassMethod(\PhpParser\Node\Stmt\ClassMethod $classMethod) : array
{
$class = $classMethod->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NAME);
if (!\is_string($class)) {
throw new \Rector\Core\Exception\ShouldNotHappenException();
}
$methodName = $this->nodeNameResolver->getName($classMethod);
return $this->findCallsByClassAndMethod($class, $methodName);
}
public function hasClassChildren(\PhpParser\Node\Stmt\Class_ $desiredClass) : bool
{
$desiredClassName = $desiredClass->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NAME);
@ -209,20 +140,6 @@ final class NodeRepository
}
return \false;
}
/**
* @return Class_[]
*/
public function findClassesBySuffix(string $suffix) : array
{
$classNodes = [];
foreach ($this->parsedNodeCollector->getClasses() as $className => $classNode) {
if (\substr_compare($className, $suffix, -\strlen($suffix)) !== 0) {
continue;
}
$classNodes[] = $classNode;
}
return $classNodes;
}
/**
* @return Trait_[]
*/
@ -291,60 +208,14 @@ final class NodeRepository
}
return $class->getProperty($propertyName);
}
/**
* @return Class_[]
*/
public function getClasses() : array
{
return $this->parsedNodeCollector->getClasses();
}
public function findTrait(string $name) : ?\PhpParser\Node\Stmt\Trait_
{
return $this->parsedNodeCollector->findTrait($name);
}
public function findByShortName(string $shortName) : ?\PhpParser\Node\Stmt\Class_
{
return $this->parsedNodeCollector->findByShortName($shortName);
}
/**
* @return StaticCall[]
*/
public function getStaticCalls() : array
{
return $this->parsedNodeCollector->getStaticCalls();
}
public function resolveCallerClassName(\PhpParser\Node\Expr\MethodCall $methodCall) : ?string
{
$callerType = $this->nodeTypeResolver->getStaticType($methodCall->var);
$callerObjectType = $this->typeUnwrapper->unwrapFirstObjectTypeFromUnionType($callerType);
if (!$callerObjectType instanceof \PHPStan\Type\TypeWithClassName) {
return null;
}
return $callerObjectType->getClassName();
}
public function findClassLike(string $classLikeName) : ?\PhpParser\Node\Stmt\ClassLike
{
return $this->findClass($classLikeName) ?? $this->findInterface($classLikeName) ?? $this->findTrait($classLikeName);
}
private function collectArray(\PhpParser\Node\Expr\Array_ $array) : void
{
$arrayCallable = $this->arrayCallableMethodReferenceAnalyzer->match($array);
if (!$arrayCallable instanceof \Rector\NodeCollector\ValueObject\ArrayCallable) {
return;
}
if (!$this->reflectionProvider->hasClass($arrayCallable->getClass())) {
return;
}
$classReflection = $this->reflectionProvider->getClass($arrayCallable->getClass());
if (!$classReflection->isClass()) {
return;
}
if (!$classReflection->hasMethod($arrayCallable->getMethod())) {
return;
}
$methodName = \strtolower($arrayCallable->getMethod());
$this->arrayCallablesByTypeAndMethod[$arrayCallable->getClass()][$methodName][] = $arrayCallable;
}
private function addMethod(\PhpParser\Node\Stmt\ClassMethod $classMethod) : void
{
$className = $classMethod->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NAME);
@ -355,36 +226,6 @@ final class NodeRepository
$methodName = $this->nodeNameResolver->getName($classMethod);
$this->classMethodsByType[$className][$methodName] = $classMethod;
}
/**
* @param MethodCall|StaticCall $node
*/
private function addCall(\PhpParser\Node $node) : void
{
// one node can be of multiple-class types
if ($node instanceof \PhpParser\Node\Expr\MethodCall) {
$classType = $this->resolveNodeClassTypes($node->var);
} else {
/** @var StaticCall $node */
$classType = $this->resolveNodeClassTypes($node->class);
}
// anonymous
if ($classType instanceof \PHPStan\Type\MixedType) {
return;
}
$methodName = $this->nodeNameResolver->getName($node->name);
if ($methodName === null) {
return;
}
$this->addCallByType($node, $classType, $methodName);
}
/**
* @return MethodCall[]|StaticCall[]|ArrayCallable[]
*/
private function findCallsByClassAndMethod(string $className, string $methodName) : array
{
$methodName = \strtolower($methodName);
return $this->callsByTypeAndMethod[$className][$methodName] ?? $this->arrayCallablesByTypeAndMethod[$className][$methodName] ?? [];
}
private function isChildOrEqualClassLike(string $desiredClass, ?string $currentClassName) : bool
{
if ($currentClassName === null) {
@ -418,59 +259,4 @@ final class NodeRepository
}
return $implementerInterfaces;
}
private function resolveNodeClassTypes(\PhpParser\Node $node) : \PHPStan\Type\Type
{
if ($node instanceof \PhpParser\Node\Expr\MethodCall && $node->var instanceof \PhpParser\Node\Expr\Variable && $node->var->name === 'this') {
/** @var string|null $className */
$className = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NAME);
if ($className) {
return new \PHPStan\Type\ObjectType($className);
}
return new \PHPStan\Type\MixedType();
}
if ($node instanceof \PhpParser\Node\Expr\MethodCall) {
return $this->nodeTypeResolver->resolve($node->var);
}
return $this->nodeTypeResolver->resolve($node);
}
/**
* @param MethodCall|StaticCall $node
*/
private function addCallByType(\PhpParser\Node $node, \PHPStan\Type\Type $classType, string $methodName) : void
{
// PHP is case insensitive for method names
$methodName = \strtolower($methodName);
if ($classType instanceof \PHPStan\Type\TypeWithClassName) {
if ($classType instanceof \PHPStan\Type\ThisType) {
$classType = $classType->getStaticObjectType();
}
$this->callsByTypeAndMethod[$classType->getClassName()][$methodName][] = $node;
$this->addParentTypeWithClassName($classType, $node, $methodName);
}
if ($classType instanceof \PHPStan\Type\UnionType) {
foreach ($classType->getTypes() as $unionedType) {
if (!$unionedType instanceof \PHPStan\Type\ObjectType) {
continue;
}
$this->callsByTypeAndMethod[$unionedType->getClassName()][$methodName][] = $node;
}
}
}
/**
* @param MethodCall|StaticCall $node
*/
private function addParentTypeWithClassName(\PHPStan\Type\TypeWithClassName $typeWithClassName, \PhpParser\Node $node, string $methodName) : void
{
// include also parent types
if (!$typeWithClassName instanceof \PHPStan\Type\ObjectType) {
return;
}
if (!$this->reflectionProvider->hasClass($typeWithClassName->getClassName())) {
return;
}
$classReflection = $this->reflectionProvider->getClass($typeWithClassName->getClassName());
foreach ($classReflection->getAncestors() as $ancestorClassReflection) {
$this->callsByTypeAndMethod[$ancestorClassReflection->getName()][$methodName][] = $node;
}
}
}

View File

@ -7,7 +7,6 @@ use PhpParser\Node;
use PhpParser\Node\Expr\Array_;
use PhpParser\Node\Expr\ClassConstFetch;
use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\Expr\StaticCall;
use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\ClassConst;
use PhpParser\Node\Stmt\ClassLike;
@ -16,7 +15,6 @@ use PhpParser\Node\Stmt\Interface_;
use PhpParser\Node\Stmt\Trait_;
use Rector\Core\Exception\ShouldNotHappenException;
use Rector\Core\NodeAnalyzer\ClassAnalyzer;
use Rector\NodeCollector\ScopeResolver\ParentClassScopeResolver;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
/**
@ -38,7 +36,6 @@ final class ParsedNodeCollector
\PhpParser\Node\Stmt\Trait_::class,
\PhpParser\Node\Stmt\ClassMethod::class,
// simply collected
\PhpParser\Node\Expr\StaticCall::class,
\PhpParser\Node\Expr\MethodCall::class,
// for array callable - [$this, 'someCall']
\PhpParser\Node\Expr\Array_::class,
@ -55,26 +52,17 @@ final class ParsedNodeCollector
* @var Trait_[]
*/
private $traits = [];
/**
* @var StaticCall[]
*/
private $staticCalls = [];
/**
* @var \Rector\NodeNameResolver\NodeNameResolver
*/
private $nodeNameResolver;
/**
* @var \Rector\NodeCollector\ScopeResolver\ParentClassScopeResolver
*/
private $parentClassScopeResolver;
/**
* @var \Rector\Core\NodeAnalyzer\ClassAnalyzer
*/
private $classAnalyzer;
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\NodeCollector\ScopeResolver\ParentClassScopeResolver $parentClassScopeResolver, \Rector\Core\NodeAnalyzer\ClassAnalyzer $classAnalyzer)
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\Core\NodeAnalyzer\ClassAnalyzer $classAnalyzer)
{
$this->nodeNameResolver = $nodeNameResolver;
$this->parentClassScopeResolver = $parentClassScopeResolver;
$this->classAnalyzer = $classAnalyzer;
}
/**
@ -103,19 +91,6 @@ final class ParsedNodeCollector
{
return $this->traits[$name] ?? null;
}
/**
* Guessing the nearest neighboor.
* Used e.g. for "XController"
*/
public function findByShortName(string $shortName) : ?\PhpParser\Node\Stmt\Class_
{
foreach ($this->classes as $className => $classNode) {
if (\substr_compare($className, '\\' . $shortName, -\strlen('\\' . $shortName)) === 0) {
return $classNode;
}
}
return null;
}
public function isCollectableNode(\PhpParser\Node $node) : bool
{
foreach (self::COLLECTABLE_NODE_TYPES as $collectableNodeType) {
@ -136,17 +111,6 @@ final class ParsedNodeCollector
$this->collectInterfaceOrTrait($node);
return;
}
if ($node instanceof \PhpParser\Node\Expr\StaticCall) {
$this->staticCalls[] = $node;
return;
}
}
/**
* @return StaticCall[]
*/
public function getStaticCalls() : array
{
return $this->staticCalls;
}
private function addClass(\PhpParser\Node\Stmt\Class_ $class) : void
{

View File

@ -1,28 +0,0 @@
<?php
declare (strict_types=1);
namespace Rector\Naming\NodeRenamer;
use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\Identifier;
use PhpParser\Node\Stmt\ClassMethod;
use Rector\NodeCollector\NodeCollector\NodeRepository;
final class MethodCallRenamer
{
/**
* @var \Rector\NodeCollector\NodeCollector\NodeRepository
*/
private $nodeRepository;
public function __construct(\Rector\NodeCollector\NodeCollector\NodeRepository $nodeRepository)
{
$this->nodeRepository = $nodeRepository;
}
public function updateClassMethodCalls(\PhpParser\Node\Stmt\ClassMethod $classMethod, string $desiredMethodName) : void
{
/** @var MethodCall[] $methodCalls */
$methodCalls = $this->nodeRepository->findCallsByClassMethod($classMethod);
foreach ($methodCalls as $methodCall) {
$methodCall->name = new \PhpParser\Node\Identifier($desiredMethodName);
}
}
}

View File

@ -1,126 +0,0 @@
<?php
declare (strict_types=1);
namespace Rector\Naming\Rector\ClassMethod;
use PhpParser\Node;
use PhpParser\Node\Expr;
use PhpParser\Node\Expr\PropertyFetch;
use PhpParser\Node\Identifier;
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Return_;
use PHPStan\Type\BooleanType;
use Rector\Core\Rector\AbstractRector;
use Rector\Naming\Naming\MethodNameResolver;
use Rector\Naming\NodeRenamer\MethodCallRenamer;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
* @see \Rector\Tests\Naming\Rector\ClassMethod\MakeGetterClassMethodNameStartWithGetRector\MakeGetterClassMethodNameStartWithGetRectorTest
*/
final class MakeGetterClassMethodNameStartWithGetRector extends \Rector\Core\Rector\AbstractRector
{
/**
* @var string
*/
private const GETTER_NAME_PATTERN = '#^(is|should|has|was|must|get|provide|__)#';
/**
* @var \Rector\Naming\Naming\MethodNameResolver
*/
private $methodNameResolver;
/**
* @var \Rector\Naming\NodeRenamer\MethodCallRenamer
*/
private $methodCallRenamer;
public function __construct(\Rector\Naming\Naming\MethodNameResolver $methodNameResolver, \Rector\Naming\NodeRenamer\MethodCallRenamer $methodCallRenamer)
{
$this->methodNameResolver = $methodNameResolver;
$this->methodCallRenamer = $methodCallRenamer;
}
public function getRuleDefinition() : \Symplify\RuleDocGenerator\ValueObject\RuleDefinition
{
return new \Symplify\RuleDocGenerator\ValueObject\RuleDefinition('Change getter method names to start with get/provide', [new \Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample(<<<'CODE_SAMPLE'
class SomeClass
{
/**
* @var string
*/
private $name;
public function name(): string
{
return $this->name;
}
}
CODE_SAMPLE
, <<<'CODE_SAMPLE'
class SomeClass
{
/**
* @var string
*/
private $name;
public function getName(): string
{
return $this->name;
}
}
CODE_SAMPLE
)]);
}
/**
* @return array<class-string<Node>>
*/
public function getNodeTypes() : array
{
return [\PhpParser\Node\Stmt\ClassMethod::class];
}
/**
* @param ClassMethod $node
*/
public function refactor(\PhpParser\Node $node) : ?\PhpParser\Node
{
if ($this->isAlreadyGetterNamedClassMethod($node)) {
return null;
}
$getterClassMethodReturnedExpr = $this->matchGetterClassMethodReturnedExpr($node);
if (!$getterClassMethodReturnedExpr instanceof \PhpParser\Node\Expr) {
return null;
}
$getterMethodName = $this->methodNameResolver->resolveGetterFromReturnedExpr($getterClassMethodReturnedExpr);
if ($getterMethodName === null) {
return null;
}
if ($this->isName($node->name, $getterMethodName)) {
return null;
}
$this->methodCallRenamer->updateClassMethodCalls($node, $getterMethodName);
$node->name = new \PhpParser\Node\Identifier($getterMethodName);
return $node;
}
private function isAlreadyGetterNamedClassMethod(\PhpParser\Node\Stmt\ClassMethod $classMethod) : bool
{
return $this->isName($classMethod, self::GETTER_NAME_PATTERN);
}
private function matchGetterClassMethodReturnedExpr(\PhpParser\Node\Stmt\ClassMethod $classMethod) : ?\PhpParser\Node\Expr
{
$stmts = (array) $classMethod->stmts;
if (\count($stmts) !== 1) {
return null;
}
$onlyStmt = $stmts[0] ?? null;
if (!$onlyStmt instanceof \PhpParser\Node\Stmt\Return_) {
return null;
}
if (!$onlyStmt->expr instanceof \PhpParser\Node\Expr\PropertyFetch) {
return null;
}
$propertyStaticType = $this->getStaticType($onlyStmt->expr);
// is handled by boolish Rector → skip here
if ($propertyStaticType instanceof \PHPStan\Type\BooleanType) {
return null;
}
return $onlyStmt->expr;
}
}

View File

@ -1,126 +0,0 @@
<?php
declare (strict_types=1);
namespace Rector\Naming\Rector\ClassMethod;
use PhpParser\Node;
use PhpParser\Node\Expr;
use PhpParser\Node\Expr\PropertyFetch;
use PhpParser\Node\Identifier;
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Return_;
use PHPStan\Type\BooleanType;
use Rector\Core\Rector\AbstractRector;
use Rector\Naming\Naming\MethodNameResolver;
use Rector\Naming\NodeRenamer\MethodCallRenamer;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
* @see \Rector\Tests\Naming\Rector\ClassMethod\MakeIsserClassMethodNameStartWithIsRector\MakeIsserClassMethodNameStartWithIsRectorTest
*/
final class MakeIsserClassMethodNameStartWithIsRector extends \Rector\Core\Rector\AbstractRector
{
/**
* @see https://regex101.com/r/Hc73ar/1
* @var string
*/
private const ISSER_NAME_REGEX = '#^(is|has|was|must|does|have|should|__)#';
/**
* @var \Rector\Naming\Naming\MethodNameResolver
*/
private $methodNameResolver;
/**
* @var \Rector\Naming\NodeRenamer\MethodCallRenamer
*/
private $methodCallRenamer;
public function __construct(\Rector\Naming\Naming\MethodNameResolver $methodNameResolver, \Rector\Naming\NodeRenamer\MethodCallRenamer $methodCallRenamer)
{
$this->methodNameResolver = $methodNameResolver;
$this->methodCallRenamer = $methodCallRenamer;
}
public function getRuleDefinition() : \Symplify\RuleDocGenerator\ValueObject\RuleDefinition
{
return new \Symplify\RuleDocGenerator\ValueObject\RuleDefinition('Change is method names to start with is/has/was', [new \Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample(<<<'CODE_SAMPLE'
class SomeClass
{
/**
* @var bool
*/
private $isActive = false;
public function getIsActive()
{
return $this->isActive;
}
}
CODE_SAMPLE
, <<<'CODE_SAMPLE'
class SomeClass
{
/**
* @var bool
*/
private $isActive = false;
public function isActive()
{
return $this->isActive;
}
}
CODE_SAMPLE
)]);
}
/**
* @return array<class-string<Node>>
*/
public function getNodeTypes() : array
{
return [\PhpParser\Node\Stmt\ClassMethod::class];
}
/**
* @param ClassMethod $node
*/
public function refactor(\PhpParser\Node $node) : ?\PhpParser\Node
{
if ($this->isAlreadyIsserNamedClassMethod($node)) {
return null;
}
$getterClassMethodReturnedExpr = $this->matchIsserClassMethodReturnedExpr($node);
if (!$getterClassMethodReturnedExpr instanceof \PhpParser\Node\Expr) {
return null;
}
$isserMethodName = $this->methodNameResolver->resolveIsserFromReturnedExpr($getterClassMethodReturnedExpr);
if ($isserMethodName === null) {
return null;
}
if ($this->isName($node->name, $isserMethodName)) {
return null;
}
$node->name = new \PhpParser\Node\Identifier($isserMethodName);
$this->methodCallRenamer->updateClassMethodCalls($node, $isserMethodName);
return $node;
}
private function isAlreadyIsserNamedClassMethod(\PhpParser\Node\Stmt\ClassMethod $classMethod) : bool
{
return $this->isName($classMethod, self::ISSER_NAME_REGEX);
}
private function matchIsserClassMethodReturnedExpr(\PhpParser\Node\Stmt\ClassMethod $classMethod) : ?\PhpParser\Node\Expr
{
$stmts = (array) $classMethod->stmts;
if (\count($stmts) !== 1) {
return null;
}
$onlyStmt = $stmts[0] ?? null;
if (!$onlyStmt instanceof \PhpParser\Node\Stmt\Return_) {
return null;
}
if (!$onlyStmt->expr instanceof \PhpParser\Node\Expr\PropertyFetch) {
return null;
}
$propertyStaticType = $this->getStaticType($onlyStmt->expr);
if (!$propertyStaticType instanceof \PHPStan\Type\BooleanType) {
return null;
}
return $onlyStmt->expr;
}
}

View File

@ -11,10 +11,8 @@ use PhpParser\Node\Expr\Variable;
use PhpParser\Node\Stmt\Class_;
use PHPStan\Type\ObjectType;
use Rector\Core\Contract\Rector\ConfigurableRectorInterface;
use Rector\Core\Exception\ShouldNotHappenException;
use Rector\Core\Rector\AbstractRector;
use Rector\Naming\Naming\PropertyNaming;
use Rector\RemovingStatic\StaticTypesInClassResolver;
use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -26,7 +24,6 @@ use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
final class NewUniqueObjectToEntityFactoryRector extends \Rector\Core\Rector\AbstractRector implements \Rector\Core\Contract\Rector\ConfigurableRectorInterface
{
/**
* @api
* @var string
*/
public const TYPES_TO_SERVICES = 'types_to_services';
@ -42,22 +39,13 @@ final class NewUniqueObjectToEntityFactoryRector extends \Rector\Core\Rector\Abs
* @var ObjectType[]
*/
private $serviceObjectTypes = [];
/**
* @var string[]
*/
private $classesUsingTypes = [];
/**
* @var \Rector\Naming\Naming\PropertyNaming
*/
private $propertyNaming;
/**
* @var \Rector\RemovingStatic\StaticTypesInClassResolver
*/
private $staticTypesInClassResolver;
public function __construct(\Rector\Naming\Naming\PropertyNaming $propertyNaming, \Rector\RemovingStatic\StaticTypesInClassResolver $staticTypesInClassResolver)
public function __construct(\Rector\Naming\Naming\PropertyNaming $propertyNaming)
{
$this->propertyNaming = $propertyNaming;
$this->staticTypesInClassResolver = $staticTypesInClassResolver;
}
public function getRuleDefinition() : \Symplify\RuleDocGenerator\ValueObject\RuleDefinition
{
@ -121,8 +109,7 @@ CODE_SAMPLE
{
$this->matchedObjectTypes = [];
// collect classes with new to factory in all classes
$classesUsingTypes = $this->resolveClassesUsingTypes();
$this->traverseNodesWithCallable($node->stmts, function (\PhpParser\Node $node) use($classesUsingTypes) : ?MethodCall {
$this->traverseNodesWithCallable($node->stmts, function (\PhpParser\Node $node) : ?MethodCall {
if (!$node instanceof \PhpParser\Node\Expr\New_) {
return null;
}
@ -130,7 +117,7 @@ CODE_SAMPLE
if ($class === null) {
return null;
}
if (!\in_array($class, $classesUsingTypes, \true)) {
if (!$this->isClassMatching($class)) {
return null;
}
$objectType = new \Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType($class);
@ -156,30 +143,13 @@ CODE_SAMPLE
$this->serviceObjectTypes[] = new \PHPStan\Type\ObjectType($typeToService);
}
}
/**
* @return string[]
*/
private function resolveClassesUsingTypes() : array
private function isClassMatching(string $class) : bool
{
if ($this->classesUsingTypes !== []) {
return $this->classesUsingTypes;
}
// temporary
$classes = $this->nodeRepository->getClasses();
if ($classes === []) {
return [];
}
foreach ($classes as $class) {
$hasTypes = (bool) $this->staticTypesInClassResolver->collectStaticCallTypeInClass($class, $this->serviceObjectTypes);
if ($hasTypes) {
$name = $this->getName($class);
if ($name === null) {
throw new \Rector\Core\Exception\ShouldNotHappenException();
}
$this->classesUsingTypes[] = $name;
foreach ($this->serviceObjectTypes as $serviceObjectType) {
if ($serviceObjectType->isInstanceOf($class)->yes()) {
return \true;
}
}
$this->classesUsingTypes = \array_unique($this->classesUsingTypes);
return $this->classesUsingTypes;
return \false;
}
}

View File

@ -5,16 +5,28 @@ namespace Rector\TypeDeclaration\Rector\ClassMethod;
use PhpParser\Node;
use PhpParser\Node\Stmt\ClassMethod;
use Rector\Core\Contract\Rector\ConfigurableRectorInterface;
use Rector\Core\PhpParser\NodeFinder\LocalMethodCallFinder;
use Rector\Core\Rector\AbstractRector;
use Rector\TypeDeclaration\NodeAnalyzer\CallTypesResolver;
use Rector\TypeDeclaration\NodeAnalyzer\ClassMethodParamTypeCompleter;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
* @changelog https://github.com/symplify/phpstan-rules/blob/master/docs/rules_overview.md#checktypehintcallertyperule
*
* @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\AddMethodCallBasedStrictParamTypeRector\AddMethodCallBasedStrictParamTypeRectorTest
*/
final class AddMethodCallBasedStrictParamTypeRector extends \Rector\Core\Rector\AbstractRector
final class AddMethodCallBasedStrictParamTypeRector extends \Rector\Core\Rector\AbstractRector implements \Rector\Core\Contract\Rector\ConfigurableRectorInterface
{
/**
* @var string
*/
public const TRUST_DOC_BLOCKS = 'trust_doc_blocks';
/**
* @var bool
*/
private $shouldTrustDocBlocks = \false;
/**
* @var \Rector\TypeDeclaration\NodeAnalyzer\CallTypesResolver
*/
@ -23,14 +35,19 @@ final class AddMethodCallBasedStrictParamTypeRector extends \Rector\Core\Rector\
* @var \Rector\TypeDeclaration\NodeAnalyzer\ClassMethodParamTypeCompleter
*/
private $classMethodParamTypeCompleter;
public function __construct(\Rector\TypeDeclaration\NodeAnalyzer\CallTypesResolver $callTypesResolver, \Rector\TypeDeclaration\NodeAnalyzer\ClassMethodParamTypeCompleter $classMethodParamTypeCompleter)
/**
* @var \Rector\Core\PhpParser\NodeFinder\LocalMethodCallFinder
*/
private $localMethodCallFinder;
public function __construct(\Rector\TypeDeclaration\NodeAnalyzer\CallTypesResolver $callTypesResolver, \Rector\TypeDeclaration\NodeAnalyzer\ClassMethodParamTypeCompleter $classMethodParamTypeCompleter, \Rector\Core\PhpParser\NodeFinder\LocalMethodCallFinder $localMethodCallFinder)
{
$this->callTypesResolver = $callTypesResolver;
$this->classMethodParamTypeCompleter = $classMethodParamTypeCompleter;
$this->localMethodCallFinder = $localMethodCallFinder;
}
public function getRuleDefinition() : \Symplify\RuleDocGenerator\ValueObject\RuleDefinition
{
return new \Symplify\RuleDocGenerator\ValueObject\RuleDefinition('Change param type to strict type of passed expression', [new \Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample(<<<'CODE_SAMPLE'
return new \Symplify\RuleDocGenerator\ValueObject\RuleDefinition('Change param type to strict type of passed expression', [new \Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample(<<<'CODE_SAMPLE'
class SomeClass
{
public function getById($id)
@ -72,7 +89,7 @@ class CallerClass
}
}
CODE_SAMPLE
)]);
, [self::TRUST_DOC_BLOCKS => \false])]);
}
/**
* @return array<class-string<Node>>
@ -89,8 +106,22 @@ CODE_SAMPLE
if ($node->params === []) {
return null;
}
$classMethodCalls = $this->nodeRepository->findCallsByClassMethod($node);
$classMethodParameterTypes = $this->callTypesResolver->resolveStrictTypesFromCalls($classMethodCalls);
if (!$node->isPrivate()) {
return null;
}
$methodCalls = $this->localMethodCallFinder->match($node);
if ($this->shouldTrustDocBlocks) {
$classMethodParameterTypes = $this->callTypesResolver->resolveWeakTypesFromCalls($methodCalls);
} else {
$classMethodParameterTypes = $this->callTypesResolver->resolveStrictTypesFromCalls($methodCalls);
}
return $this->classMethodParamTypeCompleter->complete($node, $classMethodParameterTypes);
}
/**
* @param array<string, mixed> $configuration
*/
public function configure(array $configuration) : void
{
$this->shouldTrustDocBlocks = $configuration[self::TRUST_DOC_BLOCKS] ?? \false;
}
}

View File

@ -1,88 +0,0 @@
<?php
declare (strict_types=1);
namespace Rector\TypeDeclaration\Rector\ClassMethod;
use PhpParser\Node;
use PhpParser\Node\Stmt\ClassMethod;
use Rector\Core\Rector\AbstractRector;
use Rector\TypeDeclaration\NodeAnalyzer\CallTypesResolver;
use Rector\TypeDeclaration\NodeAnalyzer\ClassMethodParamTypeCompleter;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
* @changelog https://github.com/symplify/phpstan-rules/blob/master/docs/rules_overview.md#checktypehintcallertyperule
*
* @see \Rector\Tests\TypeDeclaration\Rector\ClassMethod\AddParamTypeFromCallersRector\AddParamTypeFromCallersRectorTest
*
* Less strict version of \Rector\TypeDeclaration\Rector\ClassMethod\AddMethodCallBasedStrictParamTypeRector,
* that can work with docblocks too
*/
final class AddParamTypeFromCallersRector extends \Rector\Core\Rector\AbstractRector
{
/**
* @var \Rector\TypeDeclaration\NodeAnalyzer\CallTypesResolver
*/
private $callTypesResolver;
/**
* @var \Rector\TypeDeclaration\NodeAnalyzer\ClassMethodParamTypeCompleter
*/
private $classMethodParamTypeCompleter;
public function __construct(\Rector\TypeDeclaration\NodeAnalyzer\CallTypesResolver $callTypesResolver, \Rector\TypeDeclaration\NodeAnalyzer\ClassMethodParamTypeCompleter $classMethodParamTypeCompleter)
{
$this->callTypesResolver = $callTypesResolver;
$this->classMethodParamTypeCompleter = $classMethodParamTypeCompleter;
}
public function getRuleDefinition() : \Symplify\RuleDocGenerator\ValueObject\RuleDefinition
{
return new \Symplify\RuleDocGenerator\ValueObject\RuleDefinition('Add param type based on called types in that particular method', [new \Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample(<<<'CODE_SAMPLE'
final class SomeClass
{
public function run(Return_ $return)
{
$this->print($return);
}
public function print($return)
{
}
}
CODE_SAMPLE
, <<<'CODE_SAMPLE'
final class SomeClass
{
public function run(Return_ $return)
{
$this->print($return);
}
public function print(Return_ $return)
{
}
}
CODE_SAMPLE
)]);
}
/**
* @return array<class-string<Node>>
*/
public function getNodeTypes() : array
{
return [\PhpParser\Node\Stmt\ClassMethod::class];
}
/**
* @param ClassMethod $node
*/
public function refactor(\PhpParser\Node $node) : ?\PhpParser\Node
{
if ($node->params === []) {
return null;
}
$calls = $this->nodeRepository->findCallsByClassMethod($node);
if ($calls === []) {
return null;
}
$classMethodParameterTypes = $this->callTypesResolver->resolveWeakTypesFromCalls($calls);
return $this->classMethodParamTypeCompleter->complete($node, $classMethodParameterTypes);
}
}

View File

@ -16,11 +16,11 @@ final class VersionResolver
/**
* @var string
*/
public const PACKAGE_VERSION = '27198867e50e21044f2f29e5bff6f8508785d81f';
public const PACKAGE_VERSION = '328b5b4a02df62bcfed9af0f7c2aabc9db5178a1';
/**
* @var string
*/
public const RELEASE_DATE = '2021-06-24 13:31:39';
public const RELEASE_DATE = '2021-06-24 13:07:43';
public static function resolvePackageVersion() : string
{
$process = new \RectorPrefix20210624\Symfony\Component\Process\Process(['git', 'log', '--pretty="%H"', '-n1', 'HEAD'], __DIR__);

View File

@ -0,0 +1,66 @@
<?php
declare (strict_types=1);
namespace Rector\Core\PhpParser\NodeFinder;
use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\ClassMethod;
use PHPStan\Type\TypeWithClassName;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\NodeTypeResolver;
final class LocalMethodCallFinder
{
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
/**
* @var \Rector\NodeTypeResolver\NodeTypeResolver
*/
private $nodeTypeResolver;
/**
* @var \Rector\NodeNameResolver\NodeNameResolver
*/
private $nodeNameResolver;
public function __construct(\Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder, \Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver)
{
$this->betterNodeFinder = $betterNodeFinder;
$this->nodeTypeResolver = $nodeTypeResolver;
$this->nodeNameResolver = $nodeNameResolver;
}
/**
* @return MethodCall[]
*/
public function match(\PhpParser\Node\Stmt\ClassMethod $classMethod) : array
{
$class = $classMethod->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return [];
}
$className = $this->nodeNameResolver->getName($class);
if (!\is_string($className)) {
return [];
}
/** @var MethodCall[] $methodCalls */
$methodCalls = $this->betterNodeFinder->findInstanceOf($class, \PhpParser\Node\Expr\MethodCall::class);
$classMethodName = $this->nodeNameResolver->getName($classMethod);
$matchingMethodCalls = [];
foreach ($methodCalls as $methodCall) {
$callerType = $this->nodeTypeResolver->resolve($methodCall->var);
if (!$callerType instanceof \PHPStan\Type\TypeWithClassName) {
continue;
}
if ($callerType->getClassName() !== $className) {
continue;
}
if (!$this->nodeNameResolver->isName($methodCall->name, $classMethodName)) {
continue;
}
$matchingMethodCalls[] = $methodCall;
}
return $matchingMethodCalls;
}
}

2
vendor/autoload.php vendored
View File

@ -4,4 +4,4 @@
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit6515764947f388ff945f44d9f30180c8::getLoader();
return ComposerAutoloaderInitec2b5ed5181d3276f344acf3c733d1a8::getLoader();

View File

@ -1872,6 +1872,7 @@ return array(
'Rector\\Core\\PhpParser\\Comparing\\ConditionSearcher' => $baseDir . '/src/PhpParser/Comparing/ConditionSearcher.php',
'Rector\\Core\\PhpParser\\Comparing\\NodeComparator' => $baseDir . '/src/PhpParser/Comparing/NodeComparator.php',
'Rector\\Core\\PhpParser\\NodeFinder\\LocalConstantFinder' => $baseDir . '/src/PhpParser/NodeFinder/LocalConstantFinder.php',
'Rector\\Core\\PhpParser\\NodeFinder\\LocalMethodCallFinder' => $baseDir . '/src/PhpParser/NodeFinder/LocalMethodCallFinder.php',
'Rector\\Core\\PhpParser\\NodeFinder\\PropertyFetchFinder' => $baseDir . '/src/PhpParser/NodeFinder/PropertyFetchFinder.php',
'Rector\\Core\\PhpParser\\NodeTransformer' => $baseDir . '/src/PhpParser/NodeTransformer.php',
'Rector\\Core\\PhpParser\\NodeTraverser\\RectorNodeTraverser' => $baseDir . '/src/PhpParser/NodeTraverser/RectorNodeTraverser.php',
@ -2270,7 +2271,6 @@ return array(
'Rector\\Naming\\Naming\\OverridenExistingNamesResolver' => $baseDir . '/rules/Naming/Naming/OverridenExistingNamesResolver.php',
'Rector\\Naming\\Naming\\PropertyNaming' => $baseDir . '/rules/Naming/Naming/PropertyNaming.php',
'Rector\\Naming\\Naming\\VariableNaming' => $baseDir . '/rules/Naming/Naming/VariableNaming.php',
'Rector\\Naming\\NodeRenamer\\MethodCallRenamer' => $baseDir . '/rules/Naming/NodeRenamer/MethodCallRenamer.php',
'Rector\\Naming\\ParamRenamer\\ParamRenamer' => $baseDir . '/rules/Naming/ParamRenamer/ParamRenamer.php',
'Rector\\Naming\\PhpArray\\ArrayFilter' => $baseDir . '/rules/Naming/PhpArray/ArrayFilter.php',
'Rector\\Naming\\PhpDoc\\VarTagValueNodeRenamer' => $baseDir . '/rules/Naming/PhpDoc/VarTagValueNodeRenamer.php',
@ -2281,8 +2281,6 @@ return array(
'Rector\\Naming\\PropertyRenamer\\PropertyRenamer' => $baseDir . '/rules/Naming/PropertyRenamer/PropertyRenamer.php',
'Rector\\Naming\\RectorNamingInflector' => $baseDir . '/rules/Naming/RectorNamingInflector.php',
'Rector\\Naming\\Rector\\Assign\\RenameVariableToMatchMethodCallReturnTypeRector' => $baseDir . '/rules/Naming/Rector/Assign/RenameVariableToMatchMethodCallReturnTypeRector.php',
'Rector\\Naming\\Rector\\ClassMethod\\MakeGetterClassMethodNameStartWithGetRector' => $baseDir . '/rules/Naming/Rector/ClassMethod/MakeGetterClassMethodNameStartWithGetRector.php',
'Rector\\Naming\\Rector\\ClassMethod\\MakeIsserClassMethodNameStartWithIsRector' => $baseDir . '/rules/Naming/Rector/ClassMethod/MakeIsserClassMethodNameStartWithIsRector.php',
'Rector\\Naming\\Rector\\ClassMethod\\RenameParamToMatchTypeRector' => $baseDir . '/rules/Naming/Rector/ClassMethod/RenameParamToMatchTypeRector.php',
'Rector\\Naming\\Rector\\ClassMethod\\RenameVariableToMatchNewTypeRector' => $baseDir . '/rules/Naming/Rector/ClassMethod/RenameVariableToMatchNewTypeRector.php',
'Rector\\Naming\\Rector\\Class_\\RenamePropertyToMatchTypeRector' => $baseDir . '/rules/Naming/Rector/Class_/RenamePropertyToMatchTypeRector.php',
@ -3165,7 +3163,6 @@ return array(
'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddArrayReturnDocTypeRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/AddArrayReturnDocTypeRector.php',
'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddMethodCallBasedStrictParamTypeRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector.php',
'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamTypeDeclarationRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeDeclarationRector.php',
'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamTypeFromCallersRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeFromCallersRector.php',
'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddReturnTypeDeclarationRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/AddReturnTypeDeclarationRector.php',
'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddVoidReturnTypeWhereNoReturnRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/AddVoidReturnTypeWhereNoReturnRector.php',
'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnNeverTypeRector' => $baseDir . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnNeverTypeRector.php',

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
class ComposerAutoloaderInit6515764947f388ff945f44d9f30180c8
class ComposerAutoloaderInitec2b5ed5181d3276f344acf3c733d1a8
{
private static $loader;
@ -22,15 +22,15 @@ class ComposerAutoloaderInit6515764947f388ff945f44d9f30180c8
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInit6515764947f388ff945f44d9f30180c8', 'loadClassLoader'), true, true);
spl_autoload_register(array('ComposerAutoloaderInitec2b5ed5181d3276f344acf3c733d1a8', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
spl_autoload_unregister(array('ComposerAutoloaderInit6515764947f388ff945f44d9f30180c8', 'loadClassLoader'));
spl_autoload_unregister(array('ComposerAutoloaderInitec2b5ed5181d3276f344acf3c733d1a8', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit6515764947f388ff945f44d9f30180c8::getInitializer($loader));
call_user_func(\Composer\Autoload\ComposerStaticInitec2b5ed5181d3276f344acf3c733d1a8::getInitializer($loader));
} else {
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
@ -42,19 +42,19 @@ class ComposerAutoloaderInit6515764947f388ff945f44d9f30180c8
$loader->register(true);
if ($useStaticLoader) {
$includeFiles = Composer\Autoload\ComposerStaticInit6515764947f388ff945f44d9f30180c8::$files;
$includeFiles = Composer\Autoload\ComposerStaticInitec2b5ed5181d3276f344acf3c733d1a8::$files;
} else {
$includeFiles = require __DIR__ . '/autoload_files.php';
}
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequire6515764947f388ff945f44d9f30180c8($fileIdentifier, $file);
composerRequireec2b5ed5181d3276f344acf3c733d1a8($fileIdentifier, $file);
}
return $loader;
}
}
function composerRequire6515764947f388ff945f44d9f30180c8($fileIdentifier, $file)
function composerRequireec2b5ed5181d3276f344acf3c733d1a8($fileIdentifier, $file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
require $file;

View File

@ -4,7 +4,7 @@
namespace Composer\Autoload;
class ComposerStaticInit6515764947f388ff945f44d9f30180c8
class ComposerStaticInitec2b5ed5181d3276f344acf3c733d1a8
{
public static $files = array (
'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
@ -2227,6 +2227,7 @@ class ComposerStaticInit6515764947f388ff945f44d9f30180c8
'Rector\\Core\\PhpParser\\Comparing\\ConditionSearcher' => __DIR__ . '/../..' . '/src/PhpParser/Comparing/ConditionSearcher.php',
'Rector\\Core\\PhpParser\\Comparing\\NodeComparator' => __DIR__ . '/../..' . '/src/PhpParser/Comparing/NodeComparator.php',
'Rector\\Core\\PhpParser\\NodeFinder\\LocalConstantFinder' => __DIR__ . '/../..' . '/src/PhpParser/NodeFinder/LocalConstantFinder.php',
'Rector\\Core\\PhpParser\\NodeFinder\\LocalMethodCallFinder' => __DIR__ . '/../..' . '/src/PhpParser/NodeFinder/LocalMethodCallFinder.php',
'Rector\\Core\\PhpParser\\NodeFinder\\PropertyFetchFinder' => __DIR__ . '/../..' . '/src/PhpParser/NodeFinder/PropertyFetchFinder.php',
'Rector\\Core\\PhpParser\\NodeTransformer' => __DIR__ . '/../..' . '/src/PhpParser/NodeTransformer.php',
'Rector\\Core\\PhpParser\\NodeTraverser\\RectorNodeTraverser' => __DIR__ . '/../..' . '/src/PhpParser/NodeTraverser/RectorNodeTraverser.php',
@ -2625,7 +2626,6 @@ class ComposerStaticInit6515764947f388ff945f44d9f30180c8
'Rector\\Naming\\Naming\\OverridenExistingNamesResolver' => __DIR__ . '/../..' . '/rules/Naming/Naming/OverridenExistingNamesResolver.php',
'Rector\\Naming\\Naming\\PropertyNaming' => __DIR__ . '/../..' . '/rules/Naming/Naming/PropertyNaming.php',
'Rector\\Naming\\Naming\\VariableNaming' => __DIR__ . '/../..' . '/rules/Naming/Naming/VariableNaming.php',
'Rector\\Naming\\NodeRenamer\\MethodCallRenamer' => __DIR__ . '/../..' . '/rules/Naming/NodeRenamer/MethodCallRenamer.php',
'Rector\\Naming\\ParamRenamer\\ParamRenamer' => __DIR__ . '/../..' . '/rules/Naming/ParamRenamer/ParamRenamer.php',
'Rector\\Naming\\PhpArray\\ArrayFilter' => __DIR__ . '/../..' . '/rules/Naming/PhpArray/ArrayFilter.php',
'Rector\\Naming\\PhpDoc\\VarTagValueNodeRenamer' => __DIR__ . '/../..' . '/rules/Naming/PhpDoc/VarTagValueNodeRenamer.php',
@ -2636,8 +2636,6 @@ class ComposerStaticInit6515764947f388ff945f44d9f30180c8
'Rector\\Naming\\PropertyRenamer\\PropertyRenamer' => __DIR__ . '/../..' . '/rules/Naming/PropertyRenamer/PropertyRenamer.php',
'Rector\\Naming\\RectorNamingInflector' => __DIR__ . '/../..' . '/rules/Naming/RectorNamingInflector.php',
'Rector\\Naming\\Rector\\Assign\\RenameVariableToMatchMethodCallReturnTypeRector' => __DIR__ . '/../..' . '/rules/Naming/Rector/Assign/RenameVariableToMatchMethodCallReturnTypeRector.php',
'Rector\\Naming\\Rector\\ClassMethod\\MakeGetterClassMethodNameStartWithGetRector' => __DIR__ . '/../..' . '/rules/Naming/Rector/ClassMethod/MakeGetterClassMethodNameStartWithGetRector.php',
'Rector\\Naming\\Rector\\ClassMethod\\MakeIsserClassMethodNameStartWithIsRector' => __DIR__ . '/../..' . '/rules/Naming/Rector/ClassMethod/MakeIsserClassMethodNameStartWithIsRector.php',
'Rector\\Naming\\Rector\\ClassMethod\\RenameParamToMatchTypeRector' => __DIR__ . '/../..' . '/rules/Naming/Rector/ClassMethod/RenameParamToMatchTypeRector.php',
'Rector\\Naming\\Rector\\ClassMethod\\RenameVariableToMatchNewTypeRector' => __DIR__ . '/../..' . '/rules/Naming/Rector/ClassMethod/RenameVariableToMatchNewTypeRector.php',
'Rector\\Naming\\Rector\\Class_\\RenamePropertyToMatchTypeRector' => __DIR__ . '/../..' . '/rules/Naming/Rector/Class_/RenamePropertyToMatchTypeRector.php',
@ -3520,7 +3518,6 @@ class ComposerStaticInit6515764947f388ff945f44d9f30180c8
'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddArrayReturnDocTypeRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/AddArrayReturnDocTypeRector.php',
'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddMethodCallBasedStrictParamTypeRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector.php',
'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamTypeDeclarationRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeDeclarationRector.php',
'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddParamTypeFromCallersRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeFromCallersRector.php',
'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddReturnTypeDeclarationRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/AddReturnTypeDeclarationRector.php',
'Rector\\TypeDeclaration\\Rector\\ClassMethod\\AddVoidReturnTypeWhereNoReturnRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/AddVoidReturnTypeWhereNoReturnRector.php',
'Rector\\TypeDeclaration\\Rector\\ClassMethod\\ReturnNeverTypeRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/ClassMethod/ReturnNeverTypeRector.php',
@ -3876,9 +3873,9 @@ class ComposerStaticInit6515764947f388ff945f44d9f30180c8
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInit6515764947f388ff945f44d9f30180c8::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit6515764947f388ff945f44d9f30180c8::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit6515764947f388ff945f44d9f30180c8::$classMap;
$loader->prefixLengthsPsr4 = ComposerStaticInitec2b5ed5181d3276f344acf3c733d1a8::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitec2b5ed5181d3276f344acf3c733d1a8::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInitec2b5ed5181d3276f344acf3c733d1a8::$classMap;
}, null, ClassLoader::class);
}

View File

@ -21,8 +21,8 @@ if (!class_exists('SomeTestCase', false) && !interface_exists('SomeTestCase', fa
if (!class_exists('CheckoutEntityFactory', false) && !interface_exists('CheckoutEntityFactory', false) && !trait_exists('CheckoutEntityFactory', false)) {
spl_autoload_call('RectorPrefix20210624\CheckoutEntityFactory');
}
if (!class_exists('ComposerAutoloaderInit6515764947f388ff945f44d9f30180c8', false) && !interface_exists('ComposerAutoloaderInit6515764947f388ff945f44d9f30180c8', false) && !trait_exists('ComposerAutoloaderInit6515764947f388ff945f44d9f30180c8', false)) {
spl_autoload_call('RectorPrefix20210624\ComposerAutoloaderInit6515764947f388ff945f44d9f30180c8');
if (!class_exists('ComposerAutoloaderInitec2b5ed5181d3276f344acf3c733d1a8', false) && !interface_exists('ComposerAutoloaderInitec2b5ed5181d3276f344acf3c733d1a8', false) && !trait_exists('ComposerAutoloaderInitec2b5ed5181d3276f344acf3c733d1a8', false)) {
spl_autoload_call('RectorPrefix20210624\ComposerAutoloaderInitec2b5ed5181d3276f344acf3c733d1a8');
}
if (!class_exists('Doctrine\Inflector\Inflector', false) && !interface_exists('Doctrine\Inflector\Inflector', false) && !trait_exists('Doctrine\Inflector\Inflector', false)) {
spl_autoload_call('RectorPrefix20210624\Doctrine\Inflector\Inflector');
@ -3323,9 +3323,9 @@ if (!function_exists('print_node')) {
return \RectorPrefix20210624\print_node(...func_get_args());
}
}
if (!function_exists('composerRequire6515764947f388ff945f44d9f30180c8')) {
function composerRequire6515764947f388ff945f44d9f30180c8() {
return \RectorPrefix20210624\composerRequire6515764947f388ff945f44d9f30180c8(...func_get_args());
if (!function_exists('composerRequireec2b5ed5181d3276f344acf3c733d1a8')) {
function composerRequireec2b5ed5181d3276f344acf3c733d1a8() {
return \RectorPrefix20210624\composerRequireec2b5ed5181d3276f344acf3c733d1a8(...func_get_args());
}
}
if (!function_exists('parseArgs')) {