Updated Rector to commit c3b6efea7e

c3b6efea7e Move from CLASS_NODE attribute to more reliable parent node finder (#1162)
This commit is contained in:
Tomas Votruba 2021-11-06 12:10:48 +00:00
parent 9ef85318a2
commit a42ac7439f
99 changed files with 1096 additions and 995 deletions

View File

@ -43,7 +43,7 @@ foreach ($fileInfos as $fileInfo) {
### 2.1 Prepare Phase
- Files are parsed by [`nikic/php-parser`](https://github.com/nikic/PHP-Parser), 4.0 that supports writing modified tree back to a file
- Then nodes (array of objects by parser) are traversed by `StandaloneTraverseNodeTraverser` to prepare their metadata, e.g. the class name, the method node the node is in, the namespace name etc. added by `$node->setAttribute(Attribute::CLASS_NODE, 'value')`.
- Then nodes (array of objects by parser) are traversed by `StandaloneTraverseNodeTraverser` to prepare their metadata, e.g. the class name, the method node the node is in, the namespace name etc. added by `$node->setAttribute('key', 'value')`.
### 2.2 Rectify Phase

View File

@ -3,6 +3,8 @@
declare (strict_types=1);
namespace Rector\NodeTypeResolver\Node;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeNameResolver\NodeNameResolver;
use Symplify\SmartFileSystem\SmartFileInfo;
/**
* @enum
@ -23,10 +25,17 @@ final class AttributeKey
*/
public const USE_NODES = 'useNodes';
/**
* @deprecated Use
* @see BetterNodeFinder and
* @see NodeNameResolver to find your parent nodes.
*
* @var string
*/
public const CLASS_NAME = 'className';
/**
* @deprecated Use
* @see BetterNodeFinder to find your parent nodes.
*
* @var string
*/
public const CLASS_NODE = 'class_node';

View File

@ -38,6 +38,7 @@ use PHPStan\Type\TypeWithClassName;
use PHPStan\Type\UnionType;
use Rector\Core\Configuration\RenamedClassesDataCollector;
use Rector\Core\NodeAnalyzer\ClassAnalyzer;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeTypeResolver\Contract\NodeTypeResolverInterface;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\NodeTypeCorrector\AccessoryNonEmptyStringTypeCorrector;
@ -90,10 +91,14 @@ final class NodeTypeResolver
* @var \Rector\Core\Configuration\RenamedClassesDataCollector
*/
private $renamedClassesDataCollector;
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
/**
* @param NodeTypeResolverInterface[] $nodeTypeResolvers
*/
public function __construct(\Rector\TypeDeclaration\PHPStan\Type\ObjectTypeSpecifier $objectTypeSpecifier, \Rector\Core\NodeAnalyzer\ClassAnalyzer $classAnalyzer, \Rector\NodeTypeResolver\NodeTypeCorrector\GenericClassStringTypeCorrector $genericClassStringTypeCorrector, \PHPStan\Reflection\ReflectionProvider $reflectionProvider, \Rector\NodeTypeResolver\NodeTypeCorrector\HasOffsetTypeCorrector $hasOffsetTypeCorrector, \Rector\NodeTypeResolver\NodeTypeCorrector\AccessoryNonEmptyStringTypeCorrector $accessoryNonEmptyStringTypeCorrector, \Rector\NodeTypeResolver\NodeTypeResolver\IdentifierTypeResolver $identifierTypeResolver, \Rector\Core\Configuration\RenamedClassesDataCollector $renamedClassesDataCollector, array $nodeTypeResolvers)
public function __construct(\Rector\TypeDeclaration\PHPStan\Type\ObjectTypeSpecifier $objectTypeSpecifier, \Rector\Core\NodeAnalyzer\ClassAnalyzer $classAnalyzer, \Rector\NodeTypeResolver\NodeTypeCorrector\GenericClassStringTypeCorrector $genericClassStringTypeCorrector, \PHPStan\Reflection\ReflectionProvider $reflectionProvider, \Rector\NodeTypeResolver\NodeTypeCorrector\HasOffsetTypeCorrector $hasOffsetTypeCorrector, \Rector\NodeTypeResolver\NodeTypeCorrector\AccessoryNonEmptyStringTypeCorrector $accessoryNonEmptyStringTypeCorrector, \Rector\NodeTypeResolver\NodeTypeResolver\IdentifierTypeResolver $identifierTypeResolver, \Rector\Core\Configuration\RenamedClassesDataCollector $renamedClassesDataCollector, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder, array $nodeTypeResolvers)
{
$this->objectTypeSpecifier = $objectTypeSpecifier;
$this->classAnalyzer = $classAnalyzer;
@ -103,6 +108,7 @@ final class NodeTypeResolver
$this->accessoryNonEmptyStringTypeCorrector = $accessoryNonEmptyStringTypeCorrector;
$this->identifierTypeResolver = $identifierTypeResolver;
$this->renamedClassesDataCollector = $renamedClassesDataCollector;
$this->betterNodeFinder = $betterNodeFinder;
foreach ($nodeTypeResolvers as $nodeTypeResolver) {
$this->addNodeTypeResolver($nodeTypeResolver);
}
@ -306,11 +312,11 @@ final class NodeTypeResolver
if ($node instanceof \PhpParser\Node\Expr\StaticCall) {
return $this->isObjectType($node->class, $objectType);
}
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
$class = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return \false;
}
return $this->isObjectType($classLike, $objectType);
return $this->isObjectType($class, $objectType);
}
private function isUnionTypeable(\PHPStan\Type\Type $first, \PHPStan\Type\Type $second) : bool
{

View File

@ -10,8 +10,8 @@ use PhpParser\Node\Stmt\ClassLike;
use PhpParser\Node\Stmt\ClassMethod;
use PHPStan\Type\ObjectWithoutClassType;
use PHPStan\Type\Type;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeTypeResolver\Contract\NodeTypeResolverInterface;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\NodeTypeResolver;
use RectorPrefix20211106\Symfony\Contracts\Service\Attribute\Required;
final class ClassMethodOrClassConstTypeResolver implements \Rector\NodeTypeResolver\Contract\NodeTypeResolverInterface
@ -20,6 +20,14 @@ final class ClassMethodOrClassConstTypeResolver implements \Rector\NodeTypeResol
* @var \Rector\NodeTypeResolver\NodeTypeResolver
*/
private $nodeTypeResolver;
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->betterNodeFinder = $betterNodeFinder;
}
/**
* @required
*/
@ -39,7 +47,7 @@ final class ClassMethodOrClassConstTypeResolver implements \Rector\NodeTypeResol
*/
public function resolve($node) : \PHPStan\Type\Type
{
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\ClassLike::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
// anonymous class
return new \PHPStan\Type\ObjectWithoutClassType();

View File

@ -11,6 +11,7 @@ use PHPStan\Reflection\ReflectionProvider;
use PHPStan\Type\MixedType;
use PHPStan\Type\ObjectType;
use PHPStan\Type\Type;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Contract\NodeTypeResolverInterface;
use Rector\NodeTypeResolver\Node\AttributeKey;
@ -33,10 +34,15 @@ final class PropertyFetchTypeResolver implements \Rector\NodeTypeResolver\Contra
* @var \PHPStan\Reflection\ReflectionProvider
*/
private $reflectionProvider;
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \PHPStan\Reflection\ReflectionProvider $reflectionProvider)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \PHPStan\Reflection\ReflectionProvider $reflectionProvider, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->nodeNameResolver = $nodeNameResolver;
$this->reflectionProvider = $reflectionProvider;
$this->betterNodeFinder = $betterNodeFinder;
}
/**
* @required
@ -62,13 +68,12 @@ final class PropertyFetchTypeResolver implements \Rector\NodeTypeResolver\Contra
if (!$vendorPropertyType instanceof \PHPStan\Type\MixedType) {
return $vendorPropertyType;
}
/** @var Scope|null $scope */
$scope = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::SCOPE);
if (!$scope instanceof \PHPStan\Analyser\Scope) {
$classNode = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\ClassLike::class);
// fallback to class, since property fetches are not scoped by PHPStan
if ($classNode instanceof \PhpParser\Node\Stmt\ClassLike) {
$scope = $classNode->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::SCOPE);
if ($classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
$scope = $classLike->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::SCOPE);
}
if (!$scope instanceof \PHPStan\Analyser\Scope) {
return new \PHPStan\Type\MixedType();

View File

@ -64,7 +64,6 @@ final class FunctionMethodAndClassNodeVisitor extends \PhpParser\NodeVisitorAbst
$this->classStack[] = $this->classLike;
$this->setClassNodeAndName($node);
}
$node->setAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE, $this->classLike);
$node->setAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NAME, $this->className);
}
private function processMethod(\PhpParser\Node $node) : void

View File

@ -7,9 +7,8 @@ use PhpParser\Node;
use PhpParser\Node\Expr\Array_;
use PhpParser\Node\Expr\PropertyFetch;
use PhpParser\Node\Expr\StaticPropertyFetch;
use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\ClassLike;
use PhpParser\Node\Stmt\Interface_;
use PhpParser\Node\Stmt\Trait_;
use PHPStan\Type\Accessory\HasOffsetType;
use PHPStan\Type\Accessory\NonEmptyArrayType;
use PHPStan\Type\ArrayType;
@ -18,8 +17,8 @@ use PHPStan\Type\MixedType;
use PHPStan\Type\ThisType;
use PHPStan\Type\Type;
use PHPStan\Type\TypeWithClassName;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\NodeTypeCorrector\PregMatchTypeCorrector;
use Rector\NodeTypeResolver\NodeTypeResolver;
final class ArrayTypeAnalyzer
@ -36,11 +35,16 @@ final class ArrayTypeAnalyzer
* @var \Rector\NodeTypeResolver\NodeTypeCorrector\PregMatchTypeCorrector
*/
private $pregMatchTypeCorrector;
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver, \Rector\NodeTypeResolver\NodeTypeCorrector\PregMatchTypeCorrector $pregMatchTypeCorrector)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver, \Rector\NodeTypeResolver\NodeTypeCorrector\PregMatchTypeCorrector $pregMatchTypeCorrector, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->nodeNameResolver = $nodeNameResolver;
$this->nodeTypeResolver = $nodeTypeResolver;
$this->pregMatchTypeCorrector = $pregMatchTypeCorrector;
$this->betterNodeFinder = $betterNodeFinder;
}
public function isArrayType(\PhpParser\Node $node) : bool
{
@ -90,12 +94,11 @@ final class ArrayTypeAnalyzer
if (!$node instanceof \PhpParser\Node\Expr\PropertyFetch && !$node instanceof \PhpParser\Node\Expr\StaticPropertyFetch) {
return \false;
}
/** @var Class_|Trait_|Interface_|null $classLike */
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\ClassLike::class);
if ($classLike instanceof \PhpParser\Node\Stmt\Interface_) {
return \false;
}
if ($classLike === null) {
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
return \false;
}
$propertyName = $this->nodeNameResolver->getName($node->name);

View File

@ -7,9 +7,9 @@ use PhpParser\Node;
use PhpParser\Node\Expr\PropertyFetch;
use PhpParser\Node\Expr\StaticPropertyFetch;
use PhpParser\Node\Stmt\Class_;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\Core\PhpParser\NodeFinder\PropertyFetchFinder;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\ReadWrite\Contract\ReadNodeAnalyzerInterface;
final class LocalPropertyFetchReadNodeAnalyzer implements \Rector\ReadWrite\Contract\ReadNodeAnalyzerInterface
{
@ -25,11 +25,16 @@ final class LocalPropertyFetchReadNodeAnalyzer implements \Rector\ReadWrite\Cont
* @var \Rector\NodeNameResolver\NodeNameResolver
*/
private $nodeNameResolver;
public function __construct(\Rector\ReadWrite\ReadNodeAnalyzer\JustReadExprAnalyzer $justReadExprAnalyzer, \Rector\Core\PhpParser\NodeFinder\PropertyFetchFinder $propertyFetchFinder, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\ReadWrite\ReadNodeAnalyzer\JustReadExprAnalyzer $justReadExprAnalyzer, \Rector\Core\PhpParser\NodeFinder\PropertyFetchFinder $propertyFetchFinder, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->justReadExprAnalyzer = $justReadExprAnalyzer;
$this->propertyFetchFinder = $propertyFetchFinder;
$this->nodeNameResolver = $nodeNameResolver;
$this->betterNodeFinder = $betterNodeFinder;
}
/**
* @param \PhpParser\Node $node
@ -43,7 +48,7 @@ final class LocalPropertyFetchReadNodeAnalyzer implements \Rector\ReadWrite\Cont
*/
public function isRead($node) : bool
{
$class = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$class = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
// assume worse to keep node protected
return \true;

View File

@ -13,6 +13,7 @@ use PHPStan\Type\Generic\TemplateTypeMap;
use PHPStan\Type\Type;
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
use Rector\Core\Exception\ShouldNotHappenException;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\StaticTypeMapper\StaticTypeMapper;
use RectorPrefix20211106\Symfony\Contracts\Service\Attribute\Required;
@ -29,14 +30,19 @@ final class NameScopeFactory
* @var \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory
*/
private $phpDocInfoFactory;
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
// This is needed to avoid circular references
/**
* @required
*/
public function autowireNameScopeFactory(\Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory $phpDocInfoFactory, \Rector\StaticTypeMapper\StaticTypeMapper $staticTypeMapper) : void
public function autowireNameScopeFactory(\Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory $phpDocInfoFactory, \Rector\StaticTypeMapper\StaticTypeMapper $staticTypeMapper, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder) : void
{
$this->phpDocInfoFactory = $phpDocInfoFactory;
$this->staticTypeMapper = $staticTypeMapper;
$this->betterNodeFinder = $betterNodeFinder;
}
public function createNameScopeFromNodeWithoutTemplateTypes(\PhpParser\Node $node) : \PHPStan\Analyser\NameScope
{
@ -83,10 +89,10 @@ final class NameScopeFactory
private function templateTemplateTypeMap(\PhpParser\Node $node) : \PHPStan\Type\Generic\TemplateTypeMap
{
$nodeTemplateTypes = $this->resolveTemplateTypesFromNode($node);
$class = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\ClassLike::class);
$classTemplateTypes = [];
if ($class instanceof \PhpParser\Node\Stmt\ClassLike) {
$classTemplateTypes = $this->resolveTemplateTypesFromNode($class);
if ($classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
$classTemplateTypes = $this->resolveTemplateTypesFromNode($classLike);
}
$templateTypes = \array_merge($nodeTemplateTypes, $classTemplateTypes);
return new \PHPStan\Type\Generic\TemplateTypeMap($templateTypes);

View File

@ -22,7 +22,6 @@ use Rector\Core\Contract\Rector\ConfigurableRectorInterface;
use Rector\Core\Enum\ObjectReference;
use Rector\Core\Exception\ShouldNotHappenException;
use Rector\Core\Rector\AbstractRector;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\PHPStanStaticTypeMapper\Enum\TypeKind;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -133,10 +132,7 @@ CODE_SAMPLE
if ($node instanceof \PhpParser\Node\Expr\StaticCall) {
return $this->isObjectType($node->class, $objectType);
}
// ClassMethod
/** @var Class_|null $classLike */
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
// anonymous class
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
return \false;
}

View File

@ -20,7 +20,6 @@ use PHPStan\Type\NullType;
use PHPStan\Type\Type;
use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\MethodName;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\PHPStan\Type\StaticTypeAnalyzer;
use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
@ -155,7 +154,7 @@ CODE_SAMPLE
}
private function resolvePropertyFetchType(\PhpParser\Node\Expr\PropertyFetch $propertyFetch) : \PHPStan\Type\Type
{
$classLike = $propertyFetch->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($propertyFetch, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
return new \PHPStan\Type\MixedType();
}

View File

@ -9,7 +9,6 @@ use PhpParser\Node\Name;
use PhpParser\Node\Stmt\Class_;
use Rector\Core\Enum\ObjectReference;
use Rector\Core\Rector\AbstractRector;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
@ -53,7 +52,7 @@ CODE_SAMPLE
*/
public function refactor(\PhpParser\Node $node) : ?\PhpParser\Node
{
$class = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$class = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}

View File

@ -128,7 +128,8 @@ CODE_SAMPLE
if ($methodName !== \Rector\Core\ValueObject\MethodName::CONSTRUCT) {
return \false;
}
$classLike = $classMethod->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($classMethod, \PhpParser\Node\Stmt\Class_::class);
$classLike = $this->betterNodeFinder->findParentType($classMethod, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
return \false;
}

View File

@ -57,7 +57,7 @@ final class IsClassMethodUsedAnalyzer
}
public function isClassMethodUsed(\PhpParser\Node\Stmt\ClassMethod $classMethod) : bool
{
$class = $classMethod->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$class = $this->betterNodeFinder->findParentType($classMethod, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return \true;
}

View File

@ -7,8 +7,8 @@ use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\ClassMethod;
use PHPStan\PhpDocParser\Ast\PhpDoc\GenericTagValueNode;
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
final class ControllerClassMethodManipulator
{
/**
@ -19,10 +19,15 @@ final class ControllerClassMethodManipulator
* @var \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory
*/
private $phpDocInfoFactory;
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory $phpDocInfoFactory)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory $phpDocInfoFactory, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->nodeNameResolver = $nodeNameResolver;
$this->phpDocInfoFactory = $phpDocInfoFactory;
$this->betterNodeFinder = $betterNodeFinder;
}
public function isControllerClassMethodWithBehaviorAnnotation(\PhpParser\Node\Stmt\ClassMethod $classMethod) : bool
{
@ -37,11 +42,11 @@ final class ControllerClassMethodManipulator
if (!$classMethod->isPublic()) {
return \false;
}
$classLike = $classMethod->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
$class = $this->betterNodeFinder->findParentType($classMethod, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return \false;
}
return $this->hasParentClassController($classLike);
return $this->hasParentClassController($class);
}
private function hasParentClassController(\PhpParser\Node\Stmt\Class_ $class) : bool
{

View File

@ -4,6 +4,7 @@ declare (strict_types=1);
namespace Rector\DeadCode\PhpDoc;
use PhpParser\Node\FunctionLike;
use PhpParser\Node\Stmt\ClassLike;
use PhpParser\Node\Stmt\Trait_;
use PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode;
use PHPStan\PhpDocParser\Ast\Type\GenericTypeNode;
@ -11,7 +12,7 @@ use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
use PHPStan\PhpDocParser\Ast\Type\ThisTypeNode;
use Rector\BetterPhpDocParser\ValueObject\Type\BracketsAwareUnionTypeNode;
use Rector\BetterPhpDocParser\ValueObject\Type\SpacingAwareCallableTypeNode;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeTypeResolver\TypeComparator\TypeComparator;
final class DeadReturnTagValueNodeAnalyzer
{
@ -19,9 +20,14 @@ final class DeadReturnTagValueNodeAnalyzer
* @var \Rector\NodeTypeResolver\TypeComparator\TypeComparator
*/
private $typeComparator;
public function __construct(\Rector\NodeTypeResolver\TypeComparator\TypeComparator $typeComparator)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\NodeTypeResolver\TypeComparator\TypeComparator $typeComparator, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->typeComparator = $typeComparator;
$this->betterNodeFinder = $betterNodeFinder;
}
public function isDead(\PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode $returnTagValueNode, \PhpParser\Node\FunctionLike $functionLike) : bool
{
@ -29,7 +35,7 @@ final class DeadReturnTagValueNodeAnalyzer
if ($returnType === null) {
return \false;
}
$classLike = $functionLike->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($functionLike, \PhpParser\Node\Stmt\ClassLike::class);
if ($classLike instanceof \PhpParser\Node\Stmt\Trait_ && $returnTagValueNode->type instanceof \PHPStan\PhpDocParser\Ast\Type\ThisTypeNode) {
return \false;
}

View File

@ -10,7 +10,6 @@ use PhpParser\Node\Stmt\ClassMethod;
use Rector\Core\NodeManipulator\ClassMethodManipulator;
use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\MethodName;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
@ -55,7 +54,7 @@ CODE_SAMPLE
*/
public function refactor(\PhpParser\Node $node) : ?\PhpParser\Node
{
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}

View File

@ -13,7 +13,6 @@ use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Return_;
use Rector\Core\Rector\AbstractRector;
use Rector\DeadCode\Comparator\CurrentAndParentClassMethodComparator;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\Php80\NodeAnalyzer\PhpAttributeAnalyzer;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -73,7 +72,7 @@ CODE_SAMPLE
*/
public function refactor(\PhpParser\Node $node) : ?\PhpParser\Node
{
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if ($this->shouldSkipClass($classLike)) {
return null;
}

View File

@ -11,7 +11,6 @@ use Rector\Core\NodeManipulator\ClassMethodManipulator;
use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\MethodName;
use Rector\DeadCode\NodeManipulator\ControllerClassMethodManipulator;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
@ -61,7 +60,7 @@ CODE_SAMPLE
*/
public function refactor(\PhpParser\Node $node) : ?\PhpParser\Node
{
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}
@ -111,7 +110,7 @@ CODE_SAMPLE
return \true;
}
if ($this->nodeNameResolver->isName($classMethod, \Rector\Core\ValueObject\MethodName::CONSTRUCT)) {
$class = $classMethod->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$class = $this->betterNodeFinder->findParentType($classMethod, \PhpParser\Node\Stmt\Class_::class);
return $class instanceof \PhpParser\Node\Stmt\Class_ && $class->extends instanceof \PhpParser\Node\Name\FullyQualified;
}
return $this->nodeNameResolver->isName($classMethod, \Rector\Core\ValueObject\MethodName::INVOKE);

View File

@ -4,12 +4,11 @@ declare (strict_types=1);
namespace Rector\DeadCode\Rector\ClassMethod;
use PhpParser\Node;
use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Interface_;
use Rector\Core\NodeAnalyzer\ParamAnalyzer;
use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\MethodName;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
@ -72,8 +71,8 @@ CODE_SAMPLE
if ($this->paramAnalyzer->hasPropertyPromotion($node->params)) {
return null;
}
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if ($classLike instanceof \PhpParser\Node\Stmt\Interface_) {
$class = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}
if ($node->isAbstract()) {

View File

@ -115,7 +115,7 @@ CODE_SAMPLE
}
private function hasDynamicMethodCallOnFetchThis(\PhpParser\Node\Stmt\ClassMethod $classMethod) : bool
{
$class = $classMethod->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$class = $this->betterNodeFinder->findParentType($classMethod, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return \false;
}

View File

@ -12,7 +12,6 @@ use Rector\Core\PhpParser\NodeFinder\PropertyFetchFinder;
use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\MethodName;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -83,7 +82,7 @@ CODE_SAMPLE
if (!$this->isName($node, \Rector\Core\ValueObject\MethodName::CONSTRUCT)) {
return null;
}
$class = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$class = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}

View File

@ -167,7 +167,7 @@ CODE_SAMPLE
}
/** @var PropertyFetch|StaticPropertyFetch $propertyFetch */
$propertyFetch = $expr;
$classLike = $propertyFetch->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($propertyFetch, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
return \true;
}
@ -189,7 +189,7 @@ CODE_SAMPLE
if (!$expr instanceof \PhpParser\Node\Expr\PropertyFetch) {
return \false;
}
$classLike = $expr->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($expr, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
return \false;
}

View File

@ -13,7 +13,6 @@ use PHPStan\Type\ObjectType;
use Rector\Core\NodeManipulator\IfManipulator;
use Rector\Core\Rector\AbstractRector;
use Rector\DeadCode\FeatureSupport\FunctionSupportResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
@ -101,7 +100,7 @@ CODE_SAMPLE
}
private function shouldSkip(\PhpParser\Node\Stmt\If_ $if) : bool
{
$classLike = $if->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($if, \PhpParser\Node\Stmt\ClassLike::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
return \false;
}

View File

@ -10,6 +10,7 @@ use PhpParser\Node\Expr\Assign;
use PhpParser\Node\Expr\ConstFetch;
use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\ClassLike;
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Expression;
use PhpParser\Node\Stmt\If_;
@ -88,7 +89,7 @@ CODE_SAMPLE
return null;
}
$classLike = $this->reflectionAstResolver->resolveClassFromObjectType($type);
if ($classLike === null) {
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
return null;
}
if ($this->shouldSkipClassMethod($classLike, $node, $type)) {
@ -145,7 +146,7 @@ CODE_SAMPLE
if ((array) $classMethod->stmts !== []) {
return \true;
}
$class = $methodCall->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$class = $this->betterNodeFinder->findParentType($methodCall, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return \false;
}

View File

@ -74,7 +74,7 @@ CODE_SAMPLE
*/
public function refactor(\PhpParser\Node $node) : ?\PhpParser\Node
{
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}

View File

@ -11,8 +11,8 @@ use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTagRemover;
use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger;
use Rector\Core\Exception\ShouldNotHappenException;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\PostRector\Collector\PropertyToAddCollector;
use Rector\PostRector\ValueObject\PropertyMetadata;
final class PropertyConstructorInjectionManipulator
@ -37,13 +37,18 @@ final class PropertyConstructorInjectionManipulator
* @var \Rector\PostRector\Collector\PropertyToAddCollector
*/
private $propertyToAddCollector;
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory $phpDocInfoFactory, \Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger $phpDocTypeChanger, \Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTagRemover $phpDocTagRemover, \Rector\PostRector\Collector\PropertyToAddCollector $propertyToAddCollector)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory $phpDocInfoFactory, \Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger $phpDocTypeChanger, \Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTagRemover $phpDocTagRemover, \Rector\PostRector\Collector\PropertyToAddCollector $propertyToAddCollector, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->nodeNameResolver = $nodeNameResolver;
$this->phpDocInfoFactory = $phpDocInfoFactory;
$this->phpDocTypeChanger = $phpDocTypeChanger;
$this->phpDocTagRemover = $phpDocTagRemover;
$this->propertyToAddCollector = $propertyToAddCollector;
$this->betterNodeFinder = $betterNodeFinder;
}
public function refactor(\PhpParser\Node\Stmt\Property $property, \PHPStan\Type\Type $type, \Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode $doctrineAnnotationTagValueNode) : void
{
@ -51,11 +56,11 @@ final class PropertyConstructorInjectionManipulator
$phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($property);
$this->phpDocTypeChanger->changeVarType($phpDocInfo, $type);
$this->phpDocTagRemover->removeTagValueFromNode($phpDocInfo, $doctrineAnnotationTagValueNode);
$classLike = $property->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
$class = $this->betterNodeFinder->findParentType($property, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
throw new \Rector\Core\Exception\ShouldNotHappenException();
}
$propertyMetadata = new \Rector\PostRector\ValueObject\PropertyMetadata($propertyName, $type, $property->flags);
$this->propertyToAddCollector->addPropertyToClass($classLike, $propertyMetadata);
$this->propertyToAddCollector->addPropertyToClass($class, $propertyMetadata);
}
}

View File

@ -65,7 +65,7 @@ CODE_SAMPLE
*/
public function refactor(\PhpParser\Node $node) : ?\PhpParser\Node
{
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\ClassLike::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
return null;
}

View File

@ -5,6 +5,7 @@ namespace Rector\DowngradePhp72\Rector\ClassMethod;
use PhpParser\Node;
use PhpParser\Node\Param;
use PhpParser\Node\Stmt\ClassLike;
use PhpParser\Node\Stmt\ClassMethod;
use PHPStan\Reflection\ClassReflection;
use PHPStan\Reflection\ReflectionProvider;
@ -14,7 +15,6 @@ use Rector\DowngradePhp72\NodeAnalyzer\BuiltInMethodAnalyzer;
use Rector\DowngradePhp72\NodeAnalyzer\OverrideFromAnonymousClassMethodAnalyzer;
use Rector\DowngradePhp72\NodeAnalyzer\SealedClassAnalyzer;
use Rector\DowngradePhp72\PhpDoc\NativeParamToPhpDocDecorator;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\TypeDeclaration\NodeAnalyzer\AutowiredClassMethodOrPropertyAnalyzer;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -121,8 +121,8 @@ CODE_SAMPLE
*/
public function refactor(\PhpParser\Node $node) : ?\PhpParser\Node
{
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if ($classLike === null) {
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\ClassLike::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
return null;
}
$ancestorOverridableAnonymousClass = $this->overrideFromAnonymousClassMethodAnalyzer->matchAncestorClassReflectionOverrideable($classLike, $node);

View File

@ -5,9 +5,9 @@ namespace Rector\Naming\ValueObjectFactory;
use PhpParser\Node\Stmt\ClassLike;
use PhpParser\Node\Stmt\Property;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\Naming\ValueObject\PropertyRename;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
/**
* @see \Rector\Tests\Naming\ValueObjectFactory\PropertyRenameFactory\PropertyRenameFactoryTest
*/
@ -17,21 +17,26 @@ final class PropertyRenameFactory
* @var \Rector\NodeNameResolver\NodeNameResolver
*/
private $nodeNameResolver;
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->nodeNameResolver = $nodeNameResolver;
$this->betterNodeFinder = $betterNodeFinder;
}
public function createFromExpectedName(\PhpParser\Node\Stmt\Property $property, string $expectedName) : ?\Rector\Naming\ValueObject\PropertyRename
{
$currentName = $this->nodeNameResolver->getName($property);
$propertyClassLike = $property->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$propertyClassLike instanceof \PhpParser\Node\Stmt\ClassLike) {
$classLike = $this->betterNodeFinder->findParentType($property, \PhpParser\Node\Stmt\ClassLike::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
return null;
}
$propertyClassLikeName = $property->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NAME);
if ($propertyClassLikeName === null) {
$className = $this->nodeNameResolver->getName($classLike);
if (!\is_string($className)) {
return null;
}
return new \Rector\Naming\ValueObject\PropertyRename($property, $expectedName, $currentName, $propertyClassLike, $propertyClassLikeName, $property->props[0]);
return new \Rector\Naming\ValueObject\PropertyRename($property, $expectedName, $currentName, $classLike, $className, $property->props[0]);
}
}

View File

@ -81,7 +81,7 @@ CODE_SAMPLE
if (!$this->php4ConstructorClassMethodAnalyzer->detect($node)) {
return null;
}
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}

View File

@ -111,7 +111,7 @@ CODE_SAMPLE
}
private function resolveClassSelf(\PhpParser\Node\Expr\MethodCall $methodCall) : \Rector\Core\Enum\ObjectReference
{
$classLike = $methodCall->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($methodCall, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
return \Rector\Core\Enum\ObjectReference::STATIC();
}

View File

@ -141,8 +141,8 @@ CODE_SAMPLE
return \true;
}
// skip node in trait, as impossible to analyse
$classLike = $funcCall->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
return $classLike instanceof \PhpParser\Node\Stmt\Trait_;
$trait = $this->betterNodeFinder->findParentType($funcCall, \PhpParser\Node\Stmt\Trait_::class);
return $trait instanceof \PhpParser\Node\Stmt\Trait_;
}
private function castToArray(\PhpParser\Node\Expr $countedExpr, \PhpParser\Node\Expr\FuncCall $funcCall) : \PhpParser\Node\Expr\FuncCall
{

View File

@ -102,7 +102,7 @@ CODE_SAMPLE
if ($isJustAdded) {
return \true;
}
$classLike = $funcCall->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($funcCall, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
return \true;
}

View File

@ -13,7 +13,6 @@ use PhpParser\NodeTraverser;
use Rector\Core\Rector\AbstractRector;
use Rector\Core\ValueObject\MethodName;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\VersionBonding\Contract\MinPhpVersionInterface;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -79,7 +78,7 @@ CODE_SAMPLE
}
private function isPropertyInitiatedInConstuctor(\PhpParser\Node\Stmt\Property $property, string $propertyName) : bool
{
$classLike = $property->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($property, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
return \false;
}

View File

@ -7,12 +7,13 @@ use PhpParser\Node;
use PhpParser\Node\Name;
use PhpParser\Node\NullableType;
use PhpParser\Node\Stmt\Property;
use PhpParser\Node\Stmt\Trait_;
use PhpParser\Node\UnionType as PhpParserUnionType;
use PHPStan\Reflection\ReflectionProvider;
use PHPStan\Type\Generic\TemplateType;
use PHPStan\Type\MixedType;
use PHPStan\Type\NullType;
use PHPStan\Type\Type;
use PHPStan\Type\TypeCombinator;
use PHPStan\Type\UnionType;
use Rector\Core\Contract\Rector\ConfigurableRectorInterface;
use Rector\Core\NodeAnalyzer\PropertyAnalyzer;
@ -22,6 +23,7 @@ use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\DeadCode\PhpDoc\TagRemover\VarTagRemover;
use Rector\FamilyTree\Reflection\FamilyRelationsAnalyzer;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\Php74\TypeAnalyzer\PropertyUnionTypeResolver;
use Rector\PHPStanStaticTypeMapper\DoctrineTypeAnalyzer;
use Rector\PHPStanStaticTypeMapper\Enum\TypeKind;
use Rector\StaticTypeMapper\ValueObject\Type\AliasedObjectType;
@ -93,7 +95,11 @@ final class TypedPropertyRector extends \Rector\Core\Rector\AbstractRector imple
* @var \Rector\Core\NodeAnalyzer\PropertyAnalyzer
*/
private $propertyAnalyzer;
public function __construct(\Rector\TypeDeclaration\TypeInferer\PropertyTypeInferer $propertyTypeInferer, \Rector\VendorLocker\VendorLockResolver $vendorLockResolver, \Rector\PHPStanStaticTypeMapper\DoctrineTypeAnalyzer $doctrineTypeAnalyzer, \Rector\DeadCode\PhpDoc\TagRemover\VarTagRemover $varTagRemover, \PHPStan\Reflection\ReflectionProvider $reflectionProvider, \Rector\Core\NodeAnalyzer\PropertyFetchAnalyzer $propertyFetchAnalyzer, \Rector\FamilyTree\Reflection\FamilyRelationsAnalyzer $familyRelationsAnalyzer, \Rector\Core\NodeAnalyzer\PropertyAnalyzer $propertyAnalyzer)
/**
* @var \Rector\Php74\TypeAnalyzer\PropertyUnionTypeResolver
*/
private $propertyUnionTypeResolver;
public function __construct(\Rector\TypeDeclaration\TypeInferer\PropertyTypeInferer $propertyTypeInferer, \Rector\VendorLocker\VendorLockResolver $vendorLockResolver, \Rector\PHPStanStaticTypeMapper\DoctrineTypeAnalyzer $doctrineTypeAnalyzer, \Rector\DeadCode\PhpDoc\TagRemover\VarTagRemover $varTagRemover, \PHPStan\Reflection\ReflectionProvider $reflectionProvider, \Rector\Core\NodeAnalyzer\PropertyFetchAnalyzer $propertyFetchAnalyzer, \Rector\FamilyTree\Reflection\FamilyRelationsAnalyzer $familyRelationsAnalyzer, \Rector\Core\NodeAnalyzer\PropertyAnalyzer $propertyAnalyzer, \Rector\Php74\TypeAnalyzer\PropertyUnionTypeResolver $propertyUnionTypeResolver)
{
$this->propertyTypeInferer = $propertyTypeInferer;
$this->vendorLockResolver = $vendorLockResolver;
@ -103,6 +109,7 @@ final class TypedPropertyRector extends \Rector\Core\Rector\AbstractRector imple
$this->propertyFetchAnalyzer = $propertyFetchAnalyzer;
$this->familyRelationsAnalyzer = $familyRelationsAnalyzer;
$this->propertyAnalyzer = $propertyAnalyzer;
$this->propertyUnionTypeResolver = $propertyUnionTypeResolver;
}
public function getRuleDefinition() : \Symplify\RuleDocGenerator\ValueObject\RuleDefinition
{
@ -188,7 +195,7 @@ CODE_SAMPLE
if (!$node instanceof \PhpParser\Node) {
return \true;
}
$type = $this->resolveTypePossibleUnionNullableType($node, $type);
$type = $this->propertyUnionTypeResolver->resolve($node, $type);
// is not class-type and should be skipped
if ($this->shouldSkipNonClassLikeType($node, $type)) {
return \true;
@ -202,25 +209,6 @@ CODE_SAMPLE
}
return \true;
}
/**
* @param \PhpParser\Node\Name|\PhpParser\Node\NullableType|\PhpParser\Node\UnionType $node
*/
private function resolveTypePossibleUnionNullableType($node, \PHPStan\Type\Type $possibleUnionType) : \PHPStan\Type\Type
{
if (!$node instanceof \PhpParser\Node\NullableType) {
return $possibleUnionType;
}
if (!$possibleUnionType instanceof \PHPStan\Type\UnionType) {
return $possibleUnionType;
}
$types = $possibleUnionType->getTypes();
foreach ($types as $type) {
if (!$type instanceof \PHPStan\Type\NullType) {
return $type;
}
}
return $possibleUnionType;
}
/**
* @param \PhpParser\Node\Name|\PhpParser\Node\NullableType|PhpParserUnionType $node
*/
@ -255,7 +243,7 @@ CODE_SAMPLE
if (!$propertyType instanceof \PHPStan\Type\UnionType) {
return;
}
if (!$propertyType->isSuperTypeOf(new \PHPStan\Type\NullType())->yes()) {
if (!\PHPStan\Type\TypeCombinator::containsNull($propertyType)) {
return;
}
$onlyProperty = $property->props[0];
@ -278,6 +266,11 @@ CODE_SAMPLE
if (\count($property->props) > 1) {
return \true;
}
$trait = $this->betterNodeFinder->findParentType($property, \PhpParser\Node\Stmt\Trait_::class);
// skip trait properties, as they ar unpredictable based on class context they appear in
if ($trait instanceof \PhpParser\Node\Stmt\Trait_) {
return \true;
}
if (!$this->privatePropertyOnly) {
return $this->propertyAnalyzer->hasForbiddenType($property);
}

View File

@ -0,0 +1,32 @@
<?php
declare (strict_types=1);
namespace Rector\Php74\TypeAnalyzer;
use PhpParser\Node\Name;
use PhpParser\Node\NullableType;
use PHPStan\Type\NullType;
use PHPStan\Type\Type;
use PHPStan\Type\UnionType;
final class PropertyUnionTypeResolver
{
/**
* @param \PhpParser\Node\Name|\PhpParser\Node\NullableType|\PhpParser\Node\UnionType $phpUnionType
*/
public function resolve($phpUnionType, \PHPStan\Type\Type $possibleUnionType) : \PHPStan\Type\Type
{
if (!$phpUnionType instanceof \PhpParser\Node\NullableType) {
return $possibleUnionType;
}
if (!$possibleUnionType instanceof \PHPStan\Type\UnionType) {
return $possibleUnionType;
}
$types = $possibleUnionType->getTypes();
foreach ($types as $type) {
if (!$type instanceof \PHPStan\Type\NullType) {
return $type;
}
}
return $possibleUnionType;
}
}

View File

@ -7,7 +7,6 @@ use PhpParser\Node;
use PhpParser\Node\Stmt\ClassLike;
use PHPStan\Type\ObjectType;
use Rector\Core\Rector\AbstractRector;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
@ -54,12 +53,15 @@ class OrderSpec extends ObjectBehavior
CODE_SAMPLE
)]);
}
public function isInPhpSpecBehavior(\PhpParser\Node $node) : bool
protected function isInPhpSpecBehavior(\PhpParser\Node $node) : bool
{
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if ($node instanceof \PhpParser\Node\Stmt\ClassLike) {
return $this->isObjectType($node, new \PHPStan\Type\ObjectType('PhpSpec\\ObjectBehavior'));
}
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\ClassLike::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
return \false;
}
return $this->isObjectType($classLike, new \PHPStan\Type\ObjectType('PhpSpec\\ObjectBehavior'));
return $this->isInPhpSpecBehavior($classLike);
}
}

View File

@ -88,27 +88,27 @@ final class PhpSpecMocksToPHPUnitMocksRector extends \Rector\PhpSpecToPHPUnit\Re
}
private function processMethodCall(\PhpParser\Node\Expr\MethodCall $methodCall) : ?\PhpParser\Node\Expr\MethodCall
{
if ($this->isName($methodCall->name, 'shouldBeCalled')) {
if (!$methodCall->var instanceof \PhpParser\Node\Expr\MethodCall) {
throw new \Rector\Core\Exception\ShouldNotHappenException();
}
$mockMethodName = $this->getName($methodCall->var->name);
if ($mockMethodName === null) {
throw new \Rector\Core\Exception\ShouldNotHappenException();
}
$arg = $methodCall->var->args[0] ?? null;
$expectedArg = $arg instanceof \PhpParser\Node\Arg ? $arg->value : null;
$methodCall->var->name = new \PhpParser\Node\Identifier('expects');
$thisOnceMethodCall = $this->nodeFactory->createLocalMethodCall('atLeastOnce');
$methodCall->var->args = [new \PhpParser\Node\Arg($thisOnceMethodCall)];
$methodCall->name = new \PhpParser\Node\Identifier('method');
$methodCall->args = [new \PhpParser\Node\Arg(new \PhpParser\Node\Scalar\String_($mockMethodName))];
if ($expectedArg !== null) {
return $this->appendWithMethodCall($methodCall, $expectedArg);
}
return $methodCall;
if (!$this->isName($methodCall->name, 'shouldBeCalled')) {
return null;
}
return null;
if (!$methodCall->var instanceof \PhpParser\Node\Expr\MethodCall) {
throw new \Rector\Core\Exception\ShouldNotHappenException();
}
$mockMethodName = $this->getName($methodCall->var->name);
if ($mockMethodName === null) {
throw new \Rector\Core\Exception\ShouldNotHappenException();
}
$arg = $methodCall->var->args[0] ?? null;
$expectedArg = $arg instanceof \PhpParser\Node\Arg ? $arg->value : null;
$methodCall->var->name = new \PhpParser\Node\Identifier('expects');
$thisOnceMethodCall = $this->nodeFactory->createLocalMethodCall('atLeastOnce');
$methodCall->var->args = [new \PhpParser\Node\Arg($thisOnceMethodCall)];
$methodCall->name = new \PhpParser\Node\Identifier('method');
$methodCall->args = [new \PhpParser\Node\Arg(new \PhpParser\Node\Scalar\String_($mockMethodName))];
if ($expectedArg !== null) {
return $this->appendWithMethodCall($methodCall, $expectedArg);
}
return $methodCall;
}
/**
* Variable or property fetch, based on number of present params in whole class
@ -116,7 +116,7 @@ final class PhpSpecMocksToPHPUnitMocksRector extends \Rector\PhpSpecToPHPUnit\Re
private function createCreateMockCall(\PhpParser\Node\Param $param, \PhpParser\Node\Name $name) : ?\PhpParser\Node\Stmt\Expression
{
/** @var Class_ $classLike */
$classLike = $param->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($param, \PhpParser\Node\Stmt\Class_::class);
$classMocks = $this->phpSpecMockCollector->resolveClassMocksFromParam($classLike);
$variable = $this->getName($param->var);
$classMethod = $param->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::METHOD_NODE);

View File

@ -16,7 +16,6 @@ use PhpParser\Node\Identifier;
use PhpParser\Node\Scalar\String_;
use PhpParser\Node\Stmt\Class_;
use Rector\Core\Exception\ShouldNotHappenException;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\PhpSpecToPHPUnit\MatchersManipulator;
use Rector\PhpSpecToPHPUnit\Naming\PhpSpecRenaming;
use Rector\PhpSpecToPHPUnit\NodeFactory\AssertMethodCallFactory;
@ -171,12 +170,16 @@ final class PhpSpecPromisesToPHPUnitAssertRector extends \Rector\PhpSpecToPHPUni
return null;
}
/** @var Class_ $classLike */
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
$classMethod = $classLike->getMethod($methodName);
// it's a method call, skip
if ($classMethod !== null) {
return null;
}
// direct PHPUnit method calls, no need to call on property
if (\in_array($methodName, ['atLeastOnce', 'equalTo', 'isInstanceOf', 'isType'], \true)) {
return $node;
}
$node->var = $this->getTestedObjectPropertyFetch();
return $node;
}
@ -192,11 +195,17 @@ final class PhpSpecPromisesToPHPUnitAssertRector extends \Rector\PhpSpecToPHPUni
if ($this->isPrepared) {
return;
}
/** @var Class_ $classLike */
$classLike = $methodCall->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$this->matchersKeys = $this->matchersManipulator->resolveMatcherNamesFromClass($classLike);
$this->testedClass = $this->phpSpecRenaming->resolveTestedClass($methodCall);
$this->testedObjectPropertyFetch = $this->createTestedObjectPropertyFetch($classLike);
$class = $this->betterNodeFinder->findParentType($methodCall, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return;
}
$className = $this->getName($class);
if (!\is_string($className)) {
return;
}
$this->matchersKeys = $this->matchersManipulator->resolveMatcherNamesFromClass($class);
$this->testedClass = $this->phpSpecRenaming->resolveTestedClass($class);
$this->testedObjectPropertyFetch = $this->createTestedObjectPropertyFetch($class);
$this->isPrepared = \true;
}
private function getTestedObjectPropertyFetch() : \PhpParser\Node\Expr\PropertyFetch

View File

@ -11,7 +11,6 @@ use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Global_;
use Rector\Core\Rector\AbstractRector;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\PostRector\Collector\PropertyToAddCollector;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -82,7 +81,7 @@ CODE_SAMPLE
*/
public function refactor(\PhpParser\Node $node) : ?\PhpParser\Node
{
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}

View File

@ -11,7 +11,6 @@ use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Return_;
use Rector\Core\Rector\AbstractRector;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
@ -73,7 +72,7 @@ CODE_SAMPLE
if (!$this->nodeNameResolver->isName($node->var, 'this')) {
return null;
}
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}

View File

@ -10,7 +10,6 @@ use PhpParser\Node\Stmt\PropertyProperty;
use PHPStan\Type\ObjectType;
use Rector\Core\NodeManipulator\PropertyManipulator;
use Rector\Core\Rector\AbstractRector;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\Privatization\NodeFactory\ClassConstantFactory;
use Rector\Privatization\NodeReplacer\PropertyFetchWithConstFetchReplacer;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
@ -109,7 +108,7 @@ CODE_SAMPLE
return null;
}
/** @var Class_ $classLike */
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
$this->propertyFetchWithConstFetchReplacer->replace($classLike, $node);
return $this->classConstantFactory->createFromProperty($node);
}
@ -118,7 +117,7 @@ CODE_SAMPLE
if (\count($property->props) !== 1) {
return \true;
}
$classLike = $property->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($property, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
return \true;
}

View File

@ -45,7 +45,7 @@ CODE_SAMPLE
*/
public function refactor(\PhpParser\Node $node) : ?\PhpParser\Node
{
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}

View File

@ -129,7 +129,7 @@ final class ComplexNodeRemover
if (!$this->nodeNameResolver->isName($classMethod, \Rector\Core\ValueObject\MethodName::CONSTRUCT)) {
return;
}
$class = $assign->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$class = $this->betterNodeFinder->findParentType($assign, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return;
}

View File

@ -98,12 +98,12 @@ CODE_SAMPLE
}
private function refactorStaticCall(\PhpParser\Node\Expr\StaticCall $staticCall) : ?\PhpParser\Node\Expr\MethodCall
{
$class = $staticCall->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$class instanceof \PhpParser\Node\Stmt\ClassLike) {
$classLike = $this->betterNodeFinder->findParentType($staticCall, \PhpParser\Node\Stmt\ClassLike::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
return null;
}
/** @var ClassMethod[] $classMethods */
$classMethods = $this->betterNodeFinder->findInstanceOf($class, \PhpParser\Node\Stmt\ClassMethod::class);
$classMethods = $this->betterNodeFinder->findInstanceOf($classLike, \PhpParser\Node\Stmt\ClassMethod::class);
foreach ($classMethods as $classMethod) {
if (!$this->isClassMethodMatchingStaticCall($classMethod, $staticCall)) {
continue;

View File

@ -101,7 +101,7 @@ CODE_SAMPLE
}
$propertyName = $this->propertyNaming->fqnToVariableName($staticObjectType);
/** @var Class_ $class */
$class = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$class = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
$propertyMetadata = new \Rector\PostRector\ValueObject\PropertyMetadata($propertyName, $staticObjectType, \PhpParser\Node\Stmt\Class_::MODIFIER_PRIVATE);
$this->propertyToAddCollector->addPropertyToClass($class, $propertyMetadata);
$objectPropertyFetch = new \PhpParser\Node\Expr\PropertyFetch(new \PhpParser\Node\Expr\Variable('this'), $propertyName);

View File

@ -9,7 +9,6 @@ use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Property;
use Rector\Core\Contract\Rector\ConfigurableRectorInterface;
use Rector\Core\Rector\AbstractRector;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\PhpDoc\NodeAnalyzer\DocBlockTagReplacer;
use Rector\Renaming\ValueObject\RenameAnnotation;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample;
@ -74,7 +73,7 @@ CODE_SAMPLE
*/
public function refactor(\PhpParser\Node $node) : ?\PhpParser\Node
{
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}

View File

@ -14,7 +14,6 @@ use PhpParser\Node\Stmt\ClassMethod;
use Rector\Core\Contract\Rector\ConfigurableRectorInterface;
use Rector\Core\NodeManipulator\ClassManipulator;
use Rector\Core\Rector\AbstractRector;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\Renaming\Collector\MethodCallRenameCollector;
use Rector\Renaming\Contract\MethodCallRenameInterface;
use Rector\Renaming\ValueObject\MethodCallRename;
@ -116,7 +115,7 @@ CODE_SAMPLE
}
private function shouldSkipForAlreadyExistingClassMethod(\PhpParser\Node\Stmt\ClassMethod $classMethod, \Rector\Renaming\Contract\MethodCallRenameInterface $methodCallRename) : bool
{
$classLike = $classMethod->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($classMethod, \PhpParser\Node\Stmt\ClassLike::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
return \false;
}

View File

@ -6,6 +6,7 @@ namespace Rector\Renaming\Rector\PropertyFetch;
use PhpParser\Node;
use PhpParser\Node\Expr\PropertyFetch;
use PhpParser\Node\Identifier;
use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\ClassLike;
use PhpParser\Node\Stmt\Property;
use PhpParser\Node\VarLikeIdentifier;
@ -13,7 +14,6 @@ use PHPStan\Type\ObjectType;
use PHPStan\Type\ThisType;
use Rector\Core\Contract\Rector\ConfigurableRectorInterface;
use Rector\Core\Rector\AbstractRector;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\Renaming\ValueObject\RenameProperty;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -92,7 +92,7 @@ final class RenamePropertyRector extends \Rector\Core\Rector\AbstractRector impl
}
private function processFromPropertyFetch(\PhpParser\Node\Expr\PropertyFetch $propertyFetch) : ?\PhpParser\Node\Expr\PropertyFetch
{
$class = $propertyFetch->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$class = $this->betterNodeFinder->findParentType($propertyFetch, \PhpParser\Node\Stmt\Class_::class);
foreach ($this->renamedProperties as $renamedProperty) {
if (!$this->isObjectType($propertyFetch->var, $renamedProperty->getObjectType())) {
continue;

View File

@ -14,7 +14,6 @@ use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\Property;
use PhpParser\Node\Stmt\PropertyProperty;
use Rector\Core\Rector\AbstractRector;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
@ -96,7 +95,7 @@ CODE_SAMPLE
}
private function isPropertyNullChecked(\PhpParser\Node\Stmt\PropertyProperty $onlyPropertyProperty) : bool
{
$classLike = $onlyPropertyProperty->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($onlyPropertyProperty, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
return \false;
}

View File

@ -13,7 +13,6 @@ use PHPStan\Type\MixedType;
use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger;
use Rector\Core\Contract\Rector\ConfigurableRectorInterface;
use Rector\Core\Rector\AbstractRector;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\Transform\ValueObject\SingleToManyMethod;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@ -77,7 +76,7 @@ CODE_SAMPLE
*/
public function refactor(\PhpParser\Node $node) : ?\PhpParser\Node
{
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\ClassLike::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
return null;
}

View File

@ -114,7 +114,7 @@ CODE_SAMPLE
return null;
}
/** @var Class_ $classLike */
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
foreach ($this->argumentFuncCallToMethodCalls as $argumentFuncCallToMethodCall) {
if (!$this->isName($node, $argumentFuncCallToMethodCall->getFunction())) {
continue;

View File

@ -80,7 +80,7 @@ CODE_SAMPLE
*/
public function refactor(\PhpParser\Node $node) : ?\PhpParser\Node
{
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}

View File

@ -13,7 +13,6 @@ use Rector\Core\Contract\Rector\ConfigurableRectorInterface;
use Rector\Core\NodeAnalyzer\PropertyPresenceChecker;
use Rector\Core\Rector\AbstractRector;
use Rector\Naming\Naming\PropertyNaming;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\PostRector\Collector\PropertyToAddCollector;
use Rector\PostRector\ValueObject\PropertyMetadata;
use Rector\Transform\ValueObject\MethodCallToMethodCall;
@ -103,7 +102,10 @@ CODE_SAMPLE
continue;
}
$propertyFetch = $node->var;
$class = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$class = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
continue;
}
$newObjectType = new \PHPStan\Type\ObjectType($methodCallToMethodCall->getNewType());
$newPropertyName = $this->matchNewPropertyName($methodCallToMethodCall, $class);
if ($newPropertyName === null) {

View File

@ -14,7 +14,6 @@ use Rector\Core\Contract\Rector\ConfigurableRectorInterface;
use Rector\Core\NodeAnalyzer\ClassAnalyzer;
use Rector\Core\Rector\AbstractRector;
use Rector\Naming\Naming\PropertyNaming;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\PostRector\Collector\PropertyToAddCollector;
use Rector\PostRector\ValueObject\PropertyMetadata;
use Rector\Transform\ValueObject\ServiceGetterToConstructorInjection;
@ -132,7 +131,7 @@ CODE_SAMPLE
*/
public function refactor(\PhpParser\Node $node) : ?\PhpParser\Node
{
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}

View File

@ -15,7 +15,6 @@ use Rector\Core\Rector\AbstractRector;
use Rector\Naming\Naming\PropertyNaming;
use Rector\Naming\ValueObject\ExpectedName;
use Rector\NodeRemoval\AssignRemover;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\PostRector\Collector\PropertyToAddCollector;
use Rector\PostRector\ValueObject\PropertyMetadata;
use Rector\Transform\NodeFactory\PropertyFetchFactory;
@ -158,7 +157,7 @@ CODE_SAMPLE
if (!$this->isObjectType($new->class, $constructorInjectionObjectType)) {
continue;
}
$classLike = $new->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($new, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
continue;
}

View File

@ -93,7 +93,7 @@ CODE_SAMPLE
continue;
}
/** @var Class_ $class */
$class = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$class = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
$propertyName = $this->getExistingFactoryPropertyName($class, $newToMethodCall->getServiceObjectType());
if ($propertyName === null) {
$serviceObjectType = $newToMethodCall->getServiceObjectType();

View File

@ -89,7 +89,7 @@ CODE_SAMPLE
*/
public function refactor(\PhpParser\Node $node) : ?\PhpParser\Node
{
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}

View File

@ -14,7 +14,6 @@ use PHPStan\Type\MixedType;
use PHPStan\Type\StringType;
use Rector\Core\Contract\Rector\ConfigurableRectorInterface;
use Rector\Core\Rector\AbstractRector;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\TypeComparator\TypeComparator;
use Rector\PHPStanStaticTypeMapper\Enum\TypeKind;
use Rector\TypeDeclaration\ValueObject\AddParamTypeDeclaration;
@ -79,7 +78,7 @@ CODE_SAMPLE
return null;
}
/** @var ClassLike $classLike */
$classLike = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($node, \PhpParser\Node\Stmt\Class_::class);
foreach ($this->parameterTypehints as $parameterTypehint) {
if (!$this->isObjectType($classLike, $parameterTypehint->getObjectType())) {
continue;
@ -106,7 +105,7 @@ CODE_SAMPLE
if ($classMethod->params === []) {
return \true;
}
$classLike = $classMethod->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($classMethod, \PhpParser\Node\Stmt\ClassLike::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
return \true;
}

View File

@ -220,7 +220,7 @@ CODE_SAMPLE
if (!$functionLike instanceof \PhpParser\Node\Stmt\ClassMethod) {
return \false;
}
$classLike = $functionLike->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($functionLike, \PhpParser\Node\Stmt\Class_::class);
return !$classLike instanceof \PhpParser\Node\Stmt\Class_;
}
}

View File

@ -14,6 +14,7 @@ use PHPStan\Type\Type;
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
use Rector\Core\NodeAnalyzer\PropertyFetchAnalyzer;
use Rector\Core\NodeManipulator\PropertyFetchAssignManipulator;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\TypeDeclaration\Contract\TypeInferer\ParamTypeInfererInterface;
@ -40,21 +41,26 @@ final class GetterNodeParamTypeInferer implements \Rector\TypeDeclaration\Contra
* @var \Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser
*/
private $simpleCallableNodeTraverser;
public function __construct(\Rector\Core\NodeManipulator\PropertyFetchAssignManipulator $propertyFetchAssignManipulator, \Rector\Core\NodeAnalyzer\PropertyFetchAnalyzer $propertyFetchAnalyzer, \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory $phpDocInfoFactory, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \RectorPrefix20211106\Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser $simpleCallableNodeTraverser)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\Core\NodeManipulator\PropertyFetchAssignManipulator $propertyFetchAssignManipulator, \Rector\Core\NodeAnalyzer\PropertyFetchAnalyzer $propertyFetchAnalyzer, \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory $phpDocInfoFactory, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \RectorPrefix20211106\Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser $simpleCallableNodeTraverser, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->propertyFetchAssignManipulator = $propertyFetchAssignManipulator;
$this->propertyFetchAnalyzer = $propertyFetchAnalyzer;
$this->phpDocInfoFactory = $phpDocInfoFactory;
$this->nodeNameResolver = $nodeNameResolver;
$this->simpleCallableNodeTraverser = $simpleCallableNodeTraverser;
$this->betterNodeFinder = $betterNodeFinder;
}
/**
* @param \PhpParser\Node\Param $param
*/
public function inferParam($param) : \PHPStan\Type\Type
{
$classLike = $param->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
$class = $this->betterNodeFinder->findParentType($param, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return new \PHPStan\Type\MixedType();
}
/** @var ClassMethod $classMethod */
@ -67,7 +73,7 @@ final class GetterNodeParamTypeInferer implements \Rector\TypeDeclaration\Contra
}
$returnType = new \PHPStan\Type\MixedType();
// resolve property assigns
$this->simpleCallableNodeTraverser->traverseNodesWithCallable($classLike, function (\PhpParser\Node $node) use($propertyNames, &$returnType) : ?int {
$this->simpleCallableNodeTraverser->traverseNodesWithCallable($class, function (\PhpParser\Node $node) use($propertyNames, &$returnType) : ?int {
if (!$node instanceof \PhpParser\Node\Stmt\Return_) {
return null;
}

View File

@ -10,8 +10,8 @@ use PHPStan\Type\ArrayType;
use PHPStan\Type\MixedType;
use PHPStan\Type\StringType;
use PHPStan\Type\Type;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\TypeDeclaration\Contract\TypeInferer\ParamTypeInfererInterface;
final class KnownArrayParamTypeInferer implements \Rector\TypeDeclaration\Contract\TypeInferer\ParamTypeInfererInterface
{
@ -23,21 +23,26 @@ final class KnownArrayParamTypeInferer implements \Rector\TypeDeclaration\Contra
* @var \PHPStan\Reflection\ReflectionProvider
*/
private $reflectionProvider;
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \PHPStan\Reflection\ReflectionProvider $reflectionProvider)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \PHPStan\Reflection\ReflectionProvider $reflectionProvider, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->nodeNameResolver = $nodeNameResolver;
$this->reflectionProvider = $reflectionProvider;
$this->betterNodeFinder = $betterNodeFinder;
}
/**
* @param \PhpParser\Node\Param $param
*/
public function inferParam($param) : \PHPStan\Type\Type
{
$classLike = $param->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
$class = $this->betterNodeFinder->findParentType($param, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return new \PHPStan\Type\MixedType();
}
$className = $this->nodeNameResolver->getName($classLike);
$className = $this->nodeNameResolver->getName($class);
if (!$className) {
return new \PHPStan\Type\MixedType();
}

View File

@ -92,8 +92,8 @@ final class PHPUnitDataProviderParamTypeInferer implements \Rector\TypeDeclarati
if (!$phpDocTagNode instanceof \PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode) {
return null;
}
$classLike = $param->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
$class = $this->betterNodeFinder->findParentType($param, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}
if (!$phpDocTagNode->value instanceof \PHPStan\PhpDocParser\Ast\PhpDoc\GenericTagValueNode) {
@ -105,7 +105,7 @@ final class PHPUnitDataProviderParamTypeInferer implements \Rector\TypeDeclarati
return null;
}
$methodName = $match['method_name'];
return $classLike->getMethod($methodName);
return $class->getMethod($methodName);
}
/**
* @param Return_[] $returns

View File

@ -11,6 +11,7 @@ use PhpParser\Node\Stmt\ClassMethod;
use PHPStan\Type\MixedType;
use PHPStan\Type\Type;
use Rector\Core\NodeAnalyzer\PropertyFetchAnalyzer;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\NodeTypeResolver;
@ -39,20 +40,25 @@ final class PropertyNodeParamTypeInferer implements \Rector\TypeDeclaration\Cont
* @var \Rector\NodeTypeResolver\PHPStan\Type\TypeFactory
*/
private $typeFactory;
public function __construct(\Rector\Core\NodeAnalyzer\PropertyFetchAnalyzer $propertyFetchAnalyzer, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \RectorPrefix20211106\Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser $simpleCallableNodeTraverser, \Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver, \Rector\NodeTypeResolver\PHPStan\Type\TypeFactory $typeFactory)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\Core\NodeAnalyzer\PropertyFetchAnalyzer $propertyFetchAnalyzer, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \RectorPrefix20211106\Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser $simpleCallableNodeTraverser, \Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver, \Rector\NodeTypeResolver\PHPStan\Type\TypeFactory $typeFactory, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->propertyFetchAnalyzer = $propertyFetchAnalyzer;
$this->nodeNameResolver = $nodeNameResolver;
$this->simpleCallableNodeTraverser = $simpleCallableNodeTraverser;
$this->nodeTypeResolver = $nodeTypeResolver;
$this->typeFactory = $typeFactory;
$this->betterNodeFinder = $betterNodeFinder;
}
/**
* @param \PhpParser\Node\Param $param
*/
public function inferParam($param) : \PHPStan\Type\Type
{
$classLike = $param->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($param, \PhpParser\Node\Stmt\Class_::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
return new \PHPStan\Type\MixedType();
}

View File

@ -3,10 +3,11 @@
declare (strict_types=1);
namespace Rector\TypeDeclaration\TypeInferer\PropertyTypeInferer;
use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\Property;
use PHPStan\Type\Type;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\TypeDeclaration\Contract\TypeInferer\PropertyTypeInfererInterface;
use Rector\TypeDeclaration\TypeInferer\AssignToPropertyTypeInferer;
final class AllAssignNodePropertyTypeInferer implements \Rector\TypeDeclaration\Contract\TypeInferer\PropertyTypeInfererInterface
@ -19,23 +20,27 @@ final class AllAssignNodePropertyTypeInferer implements \Rector\TypeDeclaration\
* @var \Rector\NodeNameResolver\NodeNameResolver
*/
private $nodeNameResolver;
public function __construct(\Rector\TypeDeclaration\TypeInferer\AssignToPropertyTypeInferer $assignToPropertyTypeInferer, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\TypeDeclaration\TypeInferer\AssignToPropertyTypeInferer $assignToPropertyTypeInferer, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->assignToPropertyTypeInferer = $assignToPropertyTypeInferer;
$this->nodeNameResolver = $nodeNameResolver;
$this->betterNodeFinder = $betterNodeFinder;
}
/**
* @param \PhpParser\Node\Stmt\Property $property
*/
public function inferProperty($property) : ?\PHPStan\Type\Type
{
$classLike = $property->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if ($classLike === null) {
// anonymous class possibly?
$class = $this->betterNodeFinder->findParentType($property, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}
$propertyName = $this->nodeNameResolver->getName($property);
return $this->assignToPropertyTypeInferer->inferPropertyInClassLike($propertyName, $classLike);
return $this->assignToPropertyTypeInferer->inferPropertyInClassLike($propertyName, $class);
}
public function getPriority() : int
{

View File

@ -8,8 +8,8 @@ use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Property;
use PHPStan\Type\MixedType;
use PHPStan\Type\Type;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\TypeDeclaration\Contract\TypeInferer\PropertyTypeInfererInterface;
use Rector\TypeDeclaration\FunctionLikeReturnTypeResolver;
use Rector\TypeDeclaration\NodeAnalyzer\ClassMethodAndPropertyAnalyzer;
@ -37,27 +37,32 @@ final class GetterPropertyTypeInferer implements \Rector\TypeDeclaration\Contrac
* @var \Rector\NodeNameResolver\NodeNameResolver
*/
private $nodeNameResolver;
public function __construct(\Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer\ReturnTagReturnTypeInferer $returnTagReturnTypeInferer, \Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer\ReturnedNodesReturnTypeInferer $returnedNodesReturnTypeInferer, \Rector\TypeDeclaration\FunctionLikeReturnTypeResolver $functionLikeReturnTypeResolver, \Rector\TypeDeclaration\NodeAnalyzer\ClassMethodAndPropertyAnalyzer $classMethodAndPropertyAnalyzer, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer\ReturnTagReturnTypeInferer $returnTagReturnTypeInferer, \Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer\ReturnedNodesReturnTypeInferer $returnedNodesReturnTypeInferer, \Rector\TypeDeclaration\FunctionLikeReturnTypeResolver $functionLikeReturnTypeResolver, \Rector\TypeDeclaration\NodeAnalyzer\ClassMethodAndPropertyAnalyzer $classMethodAndPropertyAnalyzer, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->returnTagReturnTypeInferer = $returnTagReturnTypeInferer;
$this->returnedNodesReturnTypeInferer = $returnedNodesReturnTypeInferer;
$this->functionLikeReturnTypeResolver = $functionLikeReturnTypeResolver;
$this->classMethodAndPropertyAnalyzer = $classMethodAndPropertyAnalyzer;
$this->nodeNameResolver = $nodeNameResolver;
$this->betterNodeFinder = $betterNodeFinder;
}
/**
* @param \PhpParser\Node\Stmt\Property $property
*/
public function inferProperty($property) : ?\PHPStan\Type\Type
{
$classLike = $property->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
$class = $this->betterNodeFinder->findParentType($property, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
// anonymous class
return null;
}
/** @var string $propertyName */
$propertyName = $this->nodeNameResolver->getName($property);
foreach ($classLike->getMethods() as $classMethod) {
foreach ($class->getMethods() as $classMethod) {
if (!$this->classMethodAndPropertyAnalyzer->hasClassMethodOnlyStatementReturnOfPropertyFetch($classMethod, $propertyName)) {
continue;
}

View File

@ -8,6 +8,7 @@ use PhpParser\Node\Expr\Closure;
use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\FunctionLike;
use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\ClassLike;
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Function_;
use PhpParser\Node\Stmt\Interface_;
@ -20,9 +21,9 @@ use PHPStan\Type\MixedType;
use PHPStan\Type\Type;
use PHPStan\Type\VoidType;
use Rector\Core\PhpParser\AstResolver;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\Core\PhpParser\Printer\BetterStandardPrinter;
use Rector\Core\Reflection\ReflectionResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\NodeTypeResolver\NodeTypeResolver;
use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory;
use Rector\TypeDeclaration\Contract\TypeInferer\ReturnTypeInfererInterface;
@ -63,7 +64,11 @@ final class ReturnedNodesReturnTypeInferer implements \Rector\TypeDeclaration\Co
* @var \Rector\Core\Reflection\ReflectionResolver
*/
private $reflectionResolver;
public function __construct(\Rector\TypeDeclaration\TypeInferer\SilentVoidResolver $silentVoidResolver, \Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver, \RectorPrefix20211106\Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser $simpleCallableNodeTraverser, \Rector\NodeTypeResolver\PHPStan\Type\TypeFactory $typeFactory, \Rector\TypeDeclaration\TypeInferer\SplArrayFixedTypeNarrower $splArrayFixedTypeNarrower, \Rector\Core\PhpParser\AstResolver $reflectionAstResolver, \Rector\Core\PhpParser\Printer\BetterStandardPrinter $betterStandardPrinter, \Rector\Core\Reflection\ReflectionResolver $reflectionResolver)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\TypeDeclaration\TypeInferer\SilentVoidResolver $silentVoidResolver, \Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver, \RectorPrefix20211106\Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser $simpleCallableNodeTraverser, \Rector\NodeTypeResolver\PHPStan\Type\TypeFactory $typeFactory, \Rector\TypeDeclaration\TypeInferer\SplArrayFixedTypeNarrower $splArrayFixedTypeNarrower, \Rector\Core\PhpParser\AstResolver $reflectionAstResolver, \Rector\Core\PhpParser\Printer\BetterStandardPrinter $betterStandardPrinter, \Rector\Core\Reflection\ReflectionResolver $reflectionResolver, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->silentVoidResolver = $silentVoidResolver;
$this->nodeTypeResolver = $nodeTypeResolver;
@ -73,15 +78,15 @@ final class ReturnedNodesReturnTypeInferer implements \Rector\TypeDeclaration\Co
$this->reflectionAstResolver = $reflectionAstResolver;
$this->betterStandardPrinter = $betterStandardPrinter;
$this->reflectionResolver = $reflectionResolver;
$this->betterNodeFinder = $betterNodeFinder;
}
/**
* @param \PhpParser\Node\FunctionLike $functionLike
*/
public function inferFunctionLike($functionLike) : \PHPStan\Type\Type
{
/** @var Class_|Trait_|Interface_|null $classLike */
$classLike = $functionLike->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if ($classLike === null) {
$classLike = $this->betterNodeFinder->findParentType($functionLike, \PhpParser\Node\Stmt\ClassLike::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
return new \PHPStan\Type\MixedType();
}
if ($functionLike instanceof \PhpParser\Node\Stmt\ClassMethod && $classLike instanceof \PhpParser\Node\Stmt\Interface_) {
@ -90,6 +95,7 @@ final class ReturnedNodesReturnTypeInferer implements \Rector\TypeDeclaration\Co
$types = [];
$localReturnNodes = $this->collectReturns($functionLike);
if ($localReturnNodes === []) {
/** @var Class_|Interface_|Trait_ $classLike */
return $this->resolveNoLocalReturnNodes($classLike, $functionLike);
}
foreach ($localReturnNodes as $localReturnNode) {

View File

@ -8,7 +8,7 @@ use PhpParser\Node\Stmt\ClassLike;
use PHPStan\Type\MixedType;
use PHPStan\Type\Type;
use Rector\Core\NodeManipulator\FunctionLikeManipulator;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory;
use Rector\TypeDeclaration\Contract\TypeInferer\ReturnTypeInfererInterface;
use Rector\TypeDeclaration\TypeInferer\AssignToPropertyTypeInferer;
@ -26,18 +26,23 @@ final class SetterNodeReturnTypeInferer implements \Rector\TypeDeclaration\Contr
* @var \Rector\NodeTypeResolver\PHPStan\Type\TypeFactory
*/
private $typeFactory;
public function __construct(\Rector\TypeDeclaration\TypeInferer\AssignToPropertyTypeInferer $assignToPropertyTypeInferer, \Rector\Core\NodeManipulator\FunctionLikeManipulator $functionLikeManipulator, \Rector\NodeTypeResolver\PHPStan\Type\TypeFactory $typeFactory)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\TypeDeclaration\TypeInferer\AssignToPropertyTypeInferer $assignToPropertyTypeInferer, \Rector\Core\NodeManipulator\FunctionLikeManipulator $functionLikeManipulator, \Rector\NodeTypeResolver\PHPStan\Type\TypeFactory $typeFactory, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->assignToPropertyTypeInferer = $assignToPropertyTypeInferer;
$this->functionLikeManipulator = $functionLikeManipulator;
$this->typeFactory = $typeFactory;
$this->betterNodeFinder = $betterNodeFinder;
}
/**
* @param \PhpParser\Node\FunctionLike $functionLike
*/
public function inferFunctionLike($functionLike) : \PHPStan\Type\Type
{
$classLike = $functionLike->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($functionLike, \PhpParser\Node\Stmt\ClassLike::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
return new \PHPStan\Type\MixedType();
}

View File

@ -14,10 +14,8 @@ use PhpParser\Node\Stmt\Interface_;
use PhpParser\Node\Stmt\Return_;
use PhpParser\Node\Stmt\Switch_;
use PhpParser\Node\Stmt\Throw_;
use PhpParser\Node\Stmt\Trait_;
use PhpParser\Node\Stmt\TryCatch;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeTypeResolver\Node\AttributeKey;
final class SilentVoidResolver
{
/**
@ -33,11 +31,8 @@ final class SilentVoidResolver
*/
public function hasExclusiveVoid($functionLike) : bool
{
$classLike = $functionLike->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if ($classLike instanceof \PhpParser\Node\Stmt\Interface_) {
return \false;
}
if ($classLike instanceof \PhpParser\Node\Stmt\Trait_) {
$interface = $this->betterNodeFinder->findParentType($functionLike, \PhpParser\Node\Stmt\Interface_::class);
if ($interface instanceof \PhpParser\Node\Stmt\Interface_) {
return \false;
}
if ($this->hasNeverType($functionLike)) {

View File

@ -16,11 +16,11 @@ final class VersionResolver
/**
* @var string
*/
public const PACKAGE_VERSION = 'e46fe290d8696139ff59e2432021620ffc710d4b';
public const PACKAGE_VERSION = 'c3b6efea7ee5351ce66461fe02c5f9b7282816bb';
/**
* @var string
*/
public const RELEASE_DATE = '2021-11-06 09:31:24';
public const RELEASE_DATE = '2021-11-06 12:52:18';
public static function resolvePackageVersion() : string
{
$process = new \RectorPrefix20211106\Symfony\Component\Process\Process(['git', 'log', '--pretty="%H"', '-n1', 'HEAD'], __DIR__);

View File

@ -5,30 +5,35 @@ namespace Rector\Core\NodeAnalyzer;
use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\ClassConst;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
final class EnumAnalyzer
{
/**
* @var \Rector\NodeNameResolver\NodeNameResolver
*/
private $nodeNameResolver;
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->nodeNameResolver = $nodeNameResolver;
$this->betterNodeFinder = $betterNodeFinder;
}
/**
* @see https://github.com/myclabs/php-enum#declaration
*/
public function isEnumClassConst(\PhpParser\Node\Stmt\ClassConst $classConst) : bool
{
$classLike = $classConst->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
$class = $this->betterNodeFinder->findParentType($classConst, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return \false;
}
if ($classLike->extends === null) {
if ($class->extends === null) {
return \false;
}
return $this->nodeNameResolver->isName($classLike->extends, '*Enum');
return $this->nodeNameResolver->isName($class->extends, '*Enum');
}
}

View File

@ -19,7 +19,6 @@ use Rector\Core\PhpParser\Comparing\NodeComparator;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\Core\ValueObject\MethodName;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
final class PropertyFetchAnalyzer
{
/**
@ -81,11 +80,11 @@ final class PropertyFetchAnalyzer
if ($expr instanceof \PhpParser\Node\Expr\StaticPropertyFetch && !$this->nodeNameResolver->isName($expr->class, \Rector\Core\Enum\ObjectReference::SELF()->getValue())) {
return \false;
}
$classLike = $expr->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
$class = $this->betterNodeFinder->findParentType($expr, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return \false;
}
foreach ($classLike->getProperties() as $property) {
foreach ($class->getProperties() as $property) {
if (!$this->nodeNameResolver->areNamesEqual($property->props[0], $expr)) {
continue;
}
@ -119,7 +118,7 @@ final class PropertyFetchAnalyzer
}
public function isFilledByConstructParam(\PhpParser\Node\Stmt\Property $property) : bool
{
$class = $property->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$class = $this->betterNodeFinder->findParentType($property, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return \false;
}

View File

@ -12,7 +12,6 @@ use PHPStan\Reflection\ClassReflection;
use Rector\Core\PhpParser\AstResolver;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
final class ClassConstManipulator
{
/**
@ -35,8 +34,8 @@ final class ClassConstManipulator
}
public function hasClassConstFetch(\PhpParser\Node\Stmt\ClassConst $classConst, \PHPStan\Reflection\ClassReflection $classReflection) : bool
{
$classLike = $classConst->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
$class = $this->betterNodeFinder->findParentType($classConst, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return \false;
}
foreach ($classReflection->getAncestors() as $ancestorClassReflection) {

View File

@ -73,14 +73,14 @@ final class ClassMethodManipulator
if (!$this->nodeNameResolver->isName($classMethod, \Rector\Core\ValueObject\MethodName::CONSTRUCT)) {
return \false;
}
$classLike = $classMethod->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
if (!$classLike instanceof \PhpParser\Node\Stmt\Class_) {
$class = $this->betterNodeFinder->findParentType($classMethod, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return \false;
}
if ($classMethod->isPrivate()) {
return \true;
}
if ($classLike->isFinal()) {
if ($class->isFinal()) {
return \false;
}
return $classMethod->isProtected();

View File

@ -100,8 +100,10 @@ final class PropertyManipulator
}
}
// has classLike $this->$variable call?
/** @var ClassLike $classLike */
$classLike = $propertyOrPromotedParam->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$classLike = $this->betterNodeFinder->findParentType($propertyOrPromotedParam, \PhpParser\Node\Stmt\ClassLike::class);
if (!$classLike instanceof \PhpParser\Node\Stmt\ClassLike) {
return \false;
}
return (bool) $this->betterNodeFinder->findFirst($classLike->stmts, function (\PhpParser\Node $node) : bool {
if (!$node instanceof \PhpParser\Node\Expr\PropertyFetch) {
return \false;

View File

@ -7,8 +7,8 @@ use PhpParser\Node\Const_;
use PhpParser\Node\Expr\ClassConstFetch;
use PhpParser\Node\Stmt\Class_;
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 LocalConstantFinder
{
@ -20,14 +20,19 @@ final class LocalConstantFinder
* @var \Rector\NodeNameResolver\NodeNameResolver
*/
private $nodeNameResolver;
public function __construct(\Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver)
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->nodeTypeResolver = $nodeTypeResolver;
$this->nodeNameResolver = $nodeNameResolver;
$this->betterNodeFinder = $betterNodeFinder;
}
public function match(\PhpParser\Node\Expr\ClassConstFetch $classConstFetch) : ?\PhpParser\Node\Const_
{
$class = $classConstFetch->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$class = $this->betterNodeFinder->findParentType($classConstFetch, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return null;
}

View File

@ -9,7 +9,6 @@ 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
{
@ -36,7 +35,7 @@ final class LocalMethodCallFinder
*/
public function match(\PhpParser\Node\Stmt\ClassMethod $classMethod) : array
{
$class = $classMethod->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE);
$class = $this->betterNodeFinder->findParentType($classMethod, \PhpParser\Node\Stmt\Class_::class);
if (!$class instanceof \PhpParser\Node\Stmt\Class_) {
return [];
}

View File

@ -59,7 +59,7 @@ abstract class AbstractRector extends \PhpParser\NodeVisitorAbstract implements
/**
* @var string[]
*/
private const ATTRIBUTES_TO_MIRROR = [\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE, \Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NAME, \Rector\NodeTypeResolver\Node\AttributeKey::METHOD_NODE, \Rector\NodeTypeResolver\Node\AttributeKey::USE_NODES, \Rector\NodeTypeResolver\Node\AttributeKey::SCOPE, \Rector\NodeTypeResolver\Node\AttributeKey::RESOLVED_NAME, \Rector\NodeTypeResolver\Node\AttributeKey::PARENT_NODE, \Rector\NodeTypeResolver\Node\AttributeKey::CURRENT_STATEMENT, \Rector\NodeTypeResolver\Node\AttributeKey::PREVIOUS_STATEMENT];
private const ATTRIBUTES_TO_MIRROR = [\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NAME, \Rector\NodeTypeResolver\Node\AttributeKey::METHOD_NODE, \Rector\NodeTypeResolver\Node\AttributeKey::USE_NODES, \Rector\NodeTypeResolver\Node\AttributeKey::SCOPE, \Rector\NodeTypeResolver\Node\AttributeKey::RESOLVED_NAME, \Rector\NodeTypeResolver\Node\AttributeKey::PARENT_NODE, \Rector\NodeTypeResolver\Node\AttributeKey::CURRENT_STATEMENT, \Rector\NodeTypeResolver\Node\AttributeKey::PREVIOUS_STATEMENT];
/**
* @var \Rector\NodeNameResolver\NodeNameResolver
*/

2
vendor/autoload.php vendored
View File

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

View File

@ -2415,6 +2415,7 @@ return array(
'Rector\\Php74\\Rector\\Property\\TypedPropertyRector' => $baseDir . '/rules/Php74/Rector/Property/TypedPropertyRector.php',
'Rector\\Php74\\Rector\\StaticCall\\ExportToReflectionFunctionRector' => $baseDir . '/rules/Php74/Rector/StaticCall/ExportToReflectionFunctionRector.php',
'Rector\\Php74\\Tokenizer\\FollowedByCurlyBracketAnalyzer' => $baseDir . '/rules/Php74/Tokenizer/FollowedByCurlyBracketAnalyzer.php',
'Rector\\Php74\\TypeAnalyzer\\PropertyUnionTypeResolver' => $baseDir . '/rules/Php74/TypeAnalyzer/PropertyUnionTypeResolver.php',
'Rector\\Php80\\Contract\\StrStartWithMatchAndRefactorInterface' => $baseDir . '/rules/Php80/Contract/StrStartWithMatchAndRefactorInterface.php',
'Rector\\Php80\\Enum\\MatchKind' => $baseDir . '/rules/Php80/Enum/MatchKind.php',
'Rector\\Php80\\MatchAndRefactor\\StrStartsWithMatchAndRefactor\\StrncmpMatchAndRefactor' => $baseDir . '/rules/Php80/MatchAndRefactor/StrStartsWithMatchAndRefactor/StrncmpMatchAndRefactor.php',

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
class ComposerAutoloaderInit031b58e784496a18655172bd4928ad8a
class ComposerAutoloaderInit459af300f88369828b2c5381ea17dddb
{
private static $loader;
@ -22,15 +22,15 @@ class ComposerAutoloaderInit031b58e784496a18655172bd4928ad8a
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInit031b58e784496a18655172bd4928ad8a', 'loadClassLoader'), true, true);
spl_autoload_register(array('ComposerAutoloaderInit459af300f88369828b2c5381ea17dddb', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
spl_autoload_unregister(array('ComposerAutoloaderInit031b58e784496a18655172bd4928ad8a', 'loadClassLoader'));
spl_autoload_unregister(array('ComposerAutoloaderInit459af300f88369828b2c5381ea17dddb', '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\ComposerStaticInit031b58e784496a18655172bd4928ad8a::getInitializer($loader));
call_user_func(\Composer\Autoload\ComposerStaticInit459af300f88369828b2c5381ea17dddb::getInitializer($loader));
} else {
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
@ -42,19 +42,19 @@ class ComposerAutoloaderInit031b58e784496a18655172bd4928ad8a
$loader->register(true);
if ($useStaticLoader) {
$includeFiles = Composer\Autoload\ComposerStaticInit031b58e784496a18655172bd4928ad8a::$files;
$includeFiles = Composer\Autoload\ComposerStaticInit459af300f88369828b2c5381ea17dddb::$files;
} else {
$includeFiles = require __DIR__ . '/autoload_files.php';
}
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequire031b58e784496a18655172bd4928ad8a($fileIdentifier, $file);
composerRequire459af300f88369828b2c5381ea17dddb($fileIdentifier, $file);
}
return $loader;
}
}
function composerRequire031b58e784496a18655172bd4928ad8a($fileIdentifier, $file)
function composerRequire459af300f88369828b2c5381ea17dddb($fileIdentifier, $file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
require $file;

View File

@ -4,7 +4,7 @@
namespace Composer\Autoload;
class ComposerStaticInit031b58e784496a18655172bd4928ad8a
class ComposerStaticInit459af300f88369828b2c5381ea17dddb
{
public static $files = array (
'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
@ -2745,6 +2745,7 @@ class ComposerStaticInit031b58e784496a18655172bd4928ad8a
'Rector\\Php74\\Rector\\Property\\TypedPropertyRector' => __DIR__ . '/../..' . '/rules/Php74/Rector/Property/TypedPropertyRector.php',
'Rector\\Php74\\Rector\\StaticCall\\ExportToReflectionFunctionRector' => __DIR__ . '/../..' . '/rules/Php74/Rector/StaticCall/ExportToReflectionFunctionRector.php',
'Rector\\Php74\\Tokenizer\\FollowedByCurlyBracketAnalyzer' => __DIR__ . '/../..' . '/rules/Php74/Tokenizer/FollowedByCurlyBracketAnalyzer.php',
'Rector\\Php74\\TypeAnalyzer\\PropertyUnionTypeResolver' => __DIR__ . '/../..' . '/rules/Php74/TypeAnalyzer/PropertyUnionTypeResolver.php',
'Rector\\Php80\\Contract\\StrStartWithMatchAndRefactorInterface' => __DIR__ . '/../..' . '/rules/Php80/Contract/StrStartWithMatchAndRefactorInterface.php',
'Rector\\Php80\\Enum\\MatchKind' => __DIR__ . '/../..' . '/rules/Php80/Enum/MatchKind.php',
'Rector\\Php80\\MatchAndRefactor\\StrStartsWithMatchAndRefactor\\StrncmpMatchAndRefactor' => __DIR__ . '/../..' . '/rules/Php80/MatchAndRefactor/StrStartsWithMatchAndRefactor/StrncmpMatchAndRefactor.php',
@ -3522,9 +3523,9 @@ class ComposerStaticInit031b58e784496a18655172bd4928ad8a
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInit031b58e784496a18655172bd4928ad8a::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit031b58e784496a18655172bd4928ad8a::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit031b58e784496a18655172bd4928ad8a::$classMap;
$loader->prefixLengthsPsr4 = ComposerStaticInit459af300f88369828b2c5381ea17dddb::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit459af300f88369828b2c5381ea17dddb::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit459af300f88369828b2c5381ea17dddb::$classMap;
}, null, ClassLoader::class);
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -9,7 +9,7 @@ namespace Rector\RectorInstaller;
*/
final class GeneratedConfig
{
public const EXTENSIONS = array('rector/rector-cakephp' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-cakephp', 'relative_install_path' => '../../rector-cakephp', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.7'), 'rector/rector-doctrine' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-doctrine', 'relative_install_path' => '../../rector-doctrine', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.30'), 'rector/rector-laravel' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-laravel', 'relative_install_path' => '../../rector-laravel', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.11'), 'rector/rector-nette' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-nette', 'relative_install_path' => '../../rector-nette', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.46'), 'rector/rector-phpoffice' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-phpoffice', 'relative_install_path' => '../../rector-phpoffice', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.7'), 'rector/rector-phpunit' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-phpunit', 'relative_install_path' => '../../rector-phpunit', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.21'), 'rector/rector-symfony' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-symfony', 'relative_install_path' => '../../rector-symfony', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.37'), 'ssch/typo3-rector' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/ssch/typo3-rector', 'relative_install_path' => '../../../ssch/typo3-rector', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'v0.11.30'));
public const EXTENSIONS = array('rector/rector-cakephp' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-cakephp', 'relative_install_path' => '../../rector-cakephp', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.7'), 'rector/rector-doctrine' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-doctrine', 'relative_install_path' => '../../rector-doctrine', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.31'), 'rector/rector-laravel' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-laravel', 'relative_install_path' => '../../rector-laravel', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.11'), 'rector/rector-nette' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-nette', 'relative_install_path' => '../../rector-nette', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.46'), 'rector/rector-phpoffice' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-phpoffice', 'relative_install_path' => '../../rector-phpoffice', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.7'), 'rector/rector-phpunit' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-phpunit', 'relative_install_path' => '../../rector-phpunit', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.21'), 'rector/rector-symfony' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-symfony', 'relative_install_path' => '../../rector-symfony', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => '0.11.37'), 'ssch/typo3-rector' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/ssch/typo3-rector', 'relative_install_path' => '../../../ssch/typo3-rector', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'v0.11.30'));
private function __construct()
{
}

View File

@ -47,7 +47,6 @@ final class RepositoryAssignFactory
}
$classConstFetch = $this->nodeFactory->createClassConstReference($entityObjectType->getClassName());
$methodCall = $this->nodeFactory->createMethodCall('entityManager', 'getRepository', [$classConstFetch]);
$methodCall->setAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE, $repositoryClassName);
return $this->nodeFactory->createPropertyAssignmentWithExpr('repository', $methodCall);
}
}

View File

@ -9,8 +9,8 @@ $loader = require_once __DIR__.'/autoload.php';
if (!class_exists('AutoloadIncluder', false) && !interface_exists('AutoloadIncluder', false) && !trait_exists('AutoloadIncluder', false)) {
spl_autoload_call('RectorPrefix20211106\AutoloadIncluder');
}
if (!class_exists('ComposerAutoloaderInit031b58e784496a18655172bd4928ad8a', false) && !interface_exists('ComposerAutoloaderInit031b58e784496a18655172bd4928ad8a', false) && !trait_exists('ComposerAutoloaderInit031b58e784496a18655172bd4928ad8a', false)) {
spl_autoload_call('RectorPrefix20211106\ComposerAutoloaderInit031b58e784496a18655172bd4928ad8a');
if (!class_exists('ComposerAutoloaderInit459af300f88369828b2c5381ea17dddb', false) && !interface_exists('ComposerAutoloaderInit459af300f88369828b2c5381ea17dddb', false) && !trait_exists('ComposerAutoloaderInit459af300f88369828b2c5381ea17dddb', false)) {
spl_autoload_call('RectorPrefix20211106\ComposerAutoloaderInit459af300f88369828b2c5381ea17dddb');
}
if (!class_exists('Helmich\TypoScriptParser\Parser\AST\Statement', false) && !interface_exists('Helmich\TypoScriptParser\Parser\AST\Statement', false) && !trait_exists('Helmich\TypoScriptParser\Parser\AST\Statement', false)) {
spl_autoload_call('RectorPrefix20211106\Helmich\TypoScriptParser\Parser\AST\Statement');
@ -3306,9 +3306,9 @@ if (!function_exists('print_node')) {
return \RectorPrefix20211106\print_node(...func_get_args());
}
}
if (!function_exists('composerRequire031b58e784496a18655172bd4928ad8a')) {
function composerRequire031b58e784496a18655172bd4928ad8a() {
return \RectorPrefix20211106\composerRequire031b58e784496a18655172bd4928ad8a(...func_get_args());
if (!function_exists('composerRequire459af300f88369828b2c5381ea17dddb')) {
function composerRequire459af300f88369828b2c5381ea17dddb() {
return \RectorPrefix20211106\composerRequire459af300f88369828b2c5381ea17dddb(...func_get_args());
}
}
if (!function_exists('parseArgs')) {

View File

@ -38,36 +38,35 @@
}
},
"conflict": {
"symplify\/composer-json-manipulator": "<10.0.0-beta1",
"symplify\/easy-coding-standard": "<10.0.0-beta1",
"symplify\/phpstan-rules": "<10.0.0-beta1",
"symplify\/easy-testing": "<10.0.0-beta1",
"symplify\/psr4-switcher": "<10.0.0-beta1",
"symplify\/rule-doc-generator-contracts": "<10.0.0-beta1",
"symplify\/symfony-php-config": "<10.0.0-beta1",
"symplify\/simple-php-doc-parser": "<10.0.0-beta1",
"symplify\/php-config-printer": "<10.0.0-beta1",
"symplify\/console-color-diff": "<10.0.0-beta1",
"symplify\/markdown-diff": "<10.0.0-beta1",
"symplify\/amnesia": "<10.0.0-beta1",
"symplify\/phpstan-extensions": "<10.0.0-beta1",
"symplify\/rule-doc-generator": "<10.0.0-beta1",
"symplify\/vendor-patches": "<10.0.0-beta1",
"symplify\/skipper": "<10.0.0-beta1",
"symplify\/composer-json-manipulator": "<10.0.0-beta2",
"symplify\/easy-coding-standard": "<10.0.0-beta2",
"symplify\/phpstan-rules": "<10.0.0-beta2",
"symplify\/easy-testing": "<10.0.0-beta2",
"symplify\/rule-doc-generator-contracts": "<10.0.0-beta2",
"symplify\/symfony-php-config": "<10.0.0-beta2",
"symplify\/simple-php-doc-parser": "<10.0.0-beta2",
"symplify\/php-config-printer": "<10.0.0-beta2",
"symplify\/console-color-diff": "<10.0.0-beta2",
"symplify\/markdown-diff": "<10.0.0-beta2",
"symplify\/amnesia": "<10.0.0-beta2",
"symplify\/phpstan-extensions": "<10.0.0-beta2",
"symplify\/rule-doc-generator": "<10.0.0-beta2",
"symplify\/vendor-patches": "<10.0.0-beta2",
"symplify\/skipper": "<10.0.0-beta2",
"symplify\/smart-file-system": "<9.4.70",
"symplify\/symfony-static-dumper": "<10.0.0-beta1",
"symplify\/git-wrapper": "<10.0.0-beta1",
"symplify\/symfony-static-dumper": "<10.0.0-beta2",
"symplify\/git-wrapper": "<10.0.0-beta2",
"symplify\/symplify-kernel": "<9.4.70",
"symplify\/monorepo-builder": "<10.0.0-beta1",
"symplify\/config-transformer": "<10.0.0-beta1",
"symplify\/easy-ci": "<10.0.0-beta1",
"symplify\/coding-standard": "<10.0.0-beta1",
"symplify\/twig-phpstan-compiler": "<10.0.0-beta1",
"symplify\/latte-phpstan-compiler": "<10.0.0-beta1",
"symplify\/template-phpstan-compiler": "<10.0.0-beta1",
"symplify\/phpstan-latte-rules": "<10.0.0-beta1",
"symplify\/phpstan-twig-rules": "<10.0.0-beta1",
"symplify\/autowire-array-parameter": "<10.0.0-beta1"
"symplify\/monorepo-builder": "<10.0.0-beta2",
"symplify\/config-transformer": "<10.0.0-beta2",
"symplify\/easy-ci": "<10.0.0-beta2",
"symplify\/coding-standard": "<10.0.0-beta2",
"symplify\/twig-phpstan-compiler": "<10.0.0-beta2",
"symplify\/latte-phpstan-compiler": "<10.0.0-beta2",
"symplify\/template-phpstan-compiler": "<10.0.0-beta2",
"symplify\/phpstan-latte-rules": "<10.0.0-beta2",
"symplify\/phpstan-twig-rules": "<10.0.0-beta2",
"symplify\/autowire-array-parameter": "<10.0.0-beta2"
},
"minimum-stability": "dev",
"prefer-stable": true

View File

@ -27,36 +27,35 @@
}
},
"conflict": {
"symplify\/astral": "<10.0.0-beta1",
"symplify\/composer-json-manipulator": "<10.0.0-beta1",
"symplify\/easy-coding-standard": "<10.0.0-beta1",
"symplify\/phpstan-rules": "<10.0.0-beta1",
"symplify\/easy-testing": "<10.0.0-beta1",
"symplify\/psr4-switcher": "<10.0.0-beta1",
"symplify\/rule-doc-generator-contracts": "<10.0.0-beta1",
"symplify\/symfony-php-config": "<10.0.0-beta1",
"symplify\/simple-php-doc-parser": "<10.0.0-beta1",
"symplify\/php-config-printer": "<10.0.0-beta1",
"symplify\/console-color-diff": "<10.0.0-beta1",
"symplify\/markdown-diff": "<10.0.0-beta1",
"symplify\/amnesia": "<10.0.0-beta1",
"symplify\/phpstan-extensions": "<10.0.0-beta1",
"symplify\/rule-doc-generator": "<10.0.0-beta1",
"symplify\/vendor-patches": "<10.0.0-beta1",
"symplify\/skipper": "<10.0.0-beta1",
"symplify\/smart-file-system": "<10.0.0-beta1",
"symplify\/symfony-static-dumper": "<10.0.0-beta1",
"symplify\/git-wrapper": "<10.0.0-beta1",
"symplify\/symplify-kernel": "<10.0.0-beta1",
"symplify\/monorepo-builder": "<10.0.0-beta1",
"symplify\/config-transformer": "<10.0.0-beta1",
"symplify\/easy-ci": "<10.0.0-beta1",
"symplify\/coding-standard": "<10.0.0-beta1",
"symplify\/twig-phpstan-compiler": "<10.0.0-beta1",
"symplify\/latte-phpstan-compiler": "<10.0.0-beta1",
"symplify\/template-phpstan-compiler": "<10.0.0-beta1",
"symplify\/phpstan-latte-rules": "<10.0.0-beta1",
"symplify\/phpstan-twig-rules": "<10.0.0-beta1"
"symplify\/astral": "<10.0.0-beta2",
"symplify\/composer-json-manipulator": "<10.0.0-beta2",
"symplify\/easy-coding-standard": "<10.0.0-beta2",
"symplify\/phpstan-rules": "<10.0.0-beta2",
"symplify\/easy-testing": "<10.0.0-beta2",
"symplify\/rule-doc-generator-contracts": "<10.0.0-beta2",
"symplify\/symfony-php-config": "<10.0.0-beta2",
"symplify\/simple-php-doc-parser": "<10.0.0-beta2",
"symplify\/php-config-printer": "<10.0.0-beta2",
"symplify\/console-color-diff": "<10.0.0-beta2",
"symplify\/markdown-diff": "<10.0.0-beta2",
"symplify\/amnesia": "<10.0.0-beta2",
"symplify\/phpstan-extensions": "<10.0.0-beta2",
"symplify\/rule-doc-generator": "<10.0.0-beta2",
"symplify\/vendor-patches": "<10.0.0-beta2",
"symplify\/skipper": "<10.0.0-beta2",
"symplify\/smart-file-system": "<10.0.0-beta2",
"symplify\/symfony-static-dumper": "<10.0.0-beta2",
"symplify\/git-wrapper": "<10.0.0-beta2",
"symplify\/symplify-kernel": "<10.0.0-beta2",
"symplify\/monorepo-builder": "<10.0.0-beta2",
"symplify\/config-transformer": "<10.0.0-beta2",
"symplify\/easy-ci": "<10.0.0-beta2",
"symplify\/coding-standard": "<10.0.0-beta2",
"symplify\/twig-phpstan-compiler": "<10.0.0-beta2",
"symplify\/latte-phpstan-compiler": "<10.0.0-beta2",
"symplify\/template-phpstan-compiler": "<10.0.0-beta2",
"symplify\/phpstan-latte-rules": "<10.0.0-beta2",
"symplify\/phpstan-twig-rules": "<10.0.0-beta2"
},
"minimum-stability": "dev",
"prefer-stable": true

View File

@ -32,35 +32,34 @@
}
},
"conflict": {
"symplify\/astral": "<10.0.0-beta1",
"symplify\/easy-coding-standard": "<10.0.0-beta1",
"symplify\/phpstan-rules": "<10.0.0-beta1",
"symplify\/easy-testing": "<10.0.0-beta1",
"symplify\/psr4-switcher": "<10.0.0-beta1",
"symplify\/rule-doc-generator-contracts": "<10.0.0-beta1",
"symplify\/symfony-php-config": "<10.0.0-beta1",
"symplify\/simple-php-doc-parser": "<10.0.0-beta1",
"symplify\/php-config-printer": "<10.0.0-beta1",
"symplify\/console-color-diff": "<10.0.0-beta1",
"symplify\/autowire-array-parameter": "<10.0.0-beta1",
"symplify\/markdown-diff": "<10.0.0-beta1",
"symplify\/amnesia": "<10.0.0-beta1",
"symplify\/phpstan-extensions": "<10.0.0-beta1",
"symplify\/rule-doc-generator": "<10.0.0-beta1",
"symplify\/vendor-patches": "<10.0.0-beta1",
"symplify\/skipper": "<10.0.0-beta1",
"symplify\/symfony-static-dumper": "<10.0.0-beta1",
"symplify\/git-wrapper": "<10.0.0-beta1",
"symplify\/astral": "<10.0.0-beta2",
"symplify\/easy-coding-standard": "<10.0.0-beta2",
"symplify\/phpstan-rules": "<10.0.0-beta2",
"symplify\/easy-testing": "<10.0.0-beta2",
"symplify\/rule-doc-generator-contracts": "<10.0.0-beta2",
"symplify\/symfony-php-config": "<10.0.0-beta2",
"symplify\/simple-php-doc-parser": "<10.0.0-beta2",
"symplify\/php-config-printer": "<10.0.0-beta2",
"symplify\/console-color-diff": "<10.0.0-beta2",
"symplify\/autowire-array-parameter": "<10.0.0-beta2",
"symplify\/markdown-diff": "<10.0.0-beta2",
"symplify\/amnesia": "<10.0.0-beta2",
"symplify\/phpstan-extensions": "<10.0.0-beta2",
"symplify\/rule-doc-generator": "<10.0.0-beta2",
"symplify\/vendor-patches": "<10.0.0-beta2",
"symplify\/skipper": "<10.0.0-beta2",
"symplify\/symfony-static-dumper": "<10.0.0-beta2",
"symplify\/git-wrapper": "<10.0.0-beta2",
"symplify\/symplify-kernel": "<9.4.70",
"symplify\/monorepo-builder": "<10.0.0-beta1",
"symplify\/config-transformer": "<10.0.0-beta1",
"symplify\/easy-ci": "<10.0.0-beta1",
"symplify\/coding-standard": "<10.0.0-beta1",
"symplify\/twig-phpstan-compiler": "<10.0.0-beta1",
"symplify\/latte-phpstan-compiler": "<10.0.0-beta1",
"symplify\/template-phpstan-compiler": "<10.0.0-beta1",
"symplify\/phpstan-latte-rules": "<10.0.0-beta1",
"symplify\/phpstan-twig-rules": "<10.0.0-beta1"
"symplify\/monorepo-builder": "<10.0.0-beta2",
"symplify\/config-transformer": "<10.0.0-beta2",
"symplify\/easy-ci": "<10.0.0-beta2",
"symplify\/coding-standard": "<10.0.0-beta2",
"symplify\/twig-phpstan-compiler": "<10.0.0-beta2",
"symplify\/latte-phpstan-compiler": "<10.0.0-beta2",
"symplify\/template-phpstan-compiler": "<10.0.0-beta2",
"symplify\/phpstan-latte-rules": "<10.0.0-beta2",
"symplify\/phpstan-twig-rules": "<10.0.0-beta2"
},
"minimum-stability": "dev",
"prefer-stable": true

View File

@ -29,36 +29,35 @@
}
},
"conflict": {
"symplify\/astral": "<10.0.0-beta1",
"symplify\/composer-json-manipulator": "<10.0.0-beta1",
"symplify\/easy-coding-standard": "<10.0.0-beta1",
"symplify\/phpstan-rules": "<10.0.0-beta1",
"symplify\/easy-testing": "<10.0.0-beta1",
"symplify\/psr4-switcher": "<10.0.0-beta1",
"symplify\/rule-doc-generator-contracts": "<10.0.0-beta1",
"symplify\/symfony-php-config": "<10.0.0-beta1",
"symplify\/simple-php-doc-parser": "<10.0.0-beta1",
"symplify\/php-config-printer": "<10.0.0-beta1",
"symplify\/autowire-array-parameter": "<10.0.0-beta1",
"symplify\/markdown-diff": "<10.0.0-beta1",
"symplify\/amnesia": "<10.0.0-beta1",
"symplify\/phpstan-extensions": "<10.0.0-beta1",
"symplify\/rule-doc-generator": "<10.0.0-beta1",
"symplify\/vendor-patches": "<10.0.0-beta1",
"symplify\/skipper": "<10.0.0-beta1",
"symplify\/smart-file-system": "<10.0.0-beta1",
"symplify\/symfony-static-dumper": "<10.0.0-beta1",
"symplify\/git-wrapper": "<10.0.0-beta1",
"symplify\/symplify-kernel": "<10.0.0-beta1",
"symplify\/monorepo-builder": "<10.0.0-beta1",
"symplify\/config-transformer": "<10.0.0-beta1",
"symplify\/easy-ci": "<10.0.0-beta1",
"symplify\/coding-standard": "<10.0.0-beta1",
"symplify\/twig-phpstan-compiler": "<10.0.0-beta1",
"symplify\/latte-phpstan-compiler": "<10.0.0-beta1",
"symplify\/template-phpstan-compiler": "<10.0.0-beta1",
"symplify\/phpstan-latte-rules": "<10.0.0-beta1",
"symplify\/phpstan-twig-rules": "<10.0.0-beta1"
"symplify\/astral": "<10.0.0-beta2",
"symplify\/composer-json-manipulator": "<10.0.0-beta2",
"symplify\/easy-coding-standard": "<10.0.0-beta2",
"symplify\/phpstan-rules": "<10.0.0-beta2",
"symplify\/easy-testing": "<10.0.0-beta2",
"symplify\/rule-doc-generator-contracts": "<10.0.0-beta2",
"symplify\/symfony-php-config": "<10.0.0-beta2",
"symplify\/simple-php-doc-parser": "<10.0.0-beta2",
"symplify\/php-config-printer": "<10.0.0-beta2",
"symplify\/autowire-array-parameter": "<10.0.0-beta2",
"symplify\/markdown-diff": "<10.0.0-beta2",
"symplify\/amnesia": "<10.0.0-beta2",
"symplify\/phpstan-extensions": "<10.0.0-beta2",
"symplify\/rule-doc-generator": "<10.0.0-beta2",
"symplify\/vendor-patches": "<10.0.0-beta2",
"symplify\/skipper": "<10.0.0-beta2",
"symplify\/smart-file-system": "<10.0.0-beta2",
"symplify\/symfony-static-dumper": "<10.0.0-beta2",
"symplify\/git-wrapper": "<10.0.0-beta2",
"symplify\/symplify-kernel": "<10.0.0-beta2",
"symplify\/monorepo-builder": "<10.0.0-beta2",
"symplify\/config-transformer": "<10.0.0-beta2",
"symplify\/easy-ci": "<10.0.0-beta2",
"symplify\/coding-standard": "<10.0.0-beta2",
"symplify\/twig-phpstan-compiler": "<10.0.0-beta2",
"symplify\/latte-phpstan-compiler": "<10.0.0-beta2",
"symplify\/template-phpstan-compiler": "<10.0.0-beta2",
"symplify\/phpstan-latte-rules": "<10.0.0-beta2",
"symplify\/phpstan-twig-rules": "<10.0.0-beta2"
},
"minimum-stability": "dev",
"prefer-stable": true

View File

@ -35,34 +35,33 @@
}
},
"conflict": {
"symplify\/astral": "<10.0.0-beta1",
"symplify\/composer-json-manipulator": "<10.0.0-beta1",
"symplify\/easy-coding-standard": "<10.0.0-beta1",
"symplify\/phpstan-rules": "<10.0.0-beta1",
"symplify\/psr4-switcher": "<10.0.0-beta1",
"symplify\/rule-doc-generator-contracts": "<10.0.0-beta1",
"symplify\/symfony-php-config": "<10.0.0-beta1",
"symplify\/simple-php-doc-parser": "<10.0.0-beta1",
"symplify\/php-config-printer": "<10.0.0-beta1",
"symplify\/console-color-diff": "<10.0.0-beta1",
"symplify\/autowire-array-parameter": "<10.0.0-beta1",
"symplify\/markdown-diff": "<10.0.0-beta1",
"symplify\/amnesia": "<10.0.0-beta1",
"symplify\/phpstan-extensions": "<10.0.0-beta1",
"symplify\/rule-doc-generator": "<10.0.0-beta1",
"symplify\/vendor-patches": "<10.0.0-beta1",
"symplify\/skipper": "<10.0.0-beta1",
"symplify\/symfony-static-dumper": "<10.0.0-beta1",
"symplify\/git-wrapper": "<10.0.0-beta1",
"symplify\/monorepo-builder": "<10.0.0-beta1",
"symplify\/config-transformer": "<10.0.0-beta1",
"symplify\/easy-ci": "<10.0.0-beta1",
"symplify\/coding-standard": "<10.0.0-beta1",
"symplify\/twig-phpstan-compiler": "<10.0.0-beta1",
"symplify\/latte-phpstan-compiler": "<10.0.0-beta1",
"symplify\/template-phpstan-compiler": "<10.0.0-beta1",
"symplify\/phpstan-latte-rules": "<10.0.0-beta1",
"symplify\/phpstan-twig-rules": "<10.0.0-beta1"
"symplify\/astral": "<10.0.0-beta2",
"symplify\/composer-json-manipulator": "<10.0.0-beta2",
"symplify\/easy-coding-standard": "<10.0.0-beta2",
"symplify\/phpstan-rules": "<10.0.0-beta2",
"symplify\/rule-doc-generator-contracts": "<10.0.0-beta2",
"symplify\/symfony-php-config": "<10.0.0-beta2",
"symplify\/simple-php-doc-parser": "<10.0.0-beta2",
"symplify\/php-config-printer": "<10.0.0-beta2",
"symplify\/console-color-diff": "<10.0.0-beta2",
"symplify\/autowire-array-parameter": "<10.0.0-beta2",
"symplify\/markdown-diff": "<10.0.0-beta2",
"symplify\/amnesia": "<10.0.0-beta2",
"symplify\/phpstan-extensions": "<10.0.0-beta2",
"symplify\/rule-doc-generator": "<10.0.0-beta2",
"symplify\/vendor-patches": "<10.0.0-beta2",
"symplify\/skipper": "<10.0.0-beta2",
"symplify\/symfony-static-dumper": "<10.0.0-beta2",
"symplify\/git-wrapper": "<10.0.0-beta2",
"symplify\/monorepo-builder": "<10.0.0-beta2",
"symplify\/config-transformer": "<10.0.0-beta2",
"symplify\/easy-ci": "<10.0.0-beta2",
"symplify\/coding-standard": "<10.0.0-beta2",
"symplify\/twig-phpstan-compiler": "<10.0.0-beta2",
"symplify\/latte-phpstan-compiler": "<10.0.0-beta2",
"symplify\/template-phpstan-compiler": "<10.0.0-beta2",
"symplify\/phpstan-latte-rules": "<10.0.0-beta2",
"symplify\/phpstan-twig-rules": "<10.0.0-beta2"
},
"minimum-stability": "dev",
"prefer-stable": true

View File

@ -32,35 +32,34 @@
}
},
"conflict": {
"symplify\/astral": "<10.0.0-beta1",
"symplify\/composer-json-manipulator": "<10.0.0-beta1",
"symplify\/easy-coding-standard": "<10.0.0-beta1",
"symplify\/phpstan-rules": "<10.0.0-beta1",
"symplify\/psr4-switcher": "<10.0.0-beta1",
"symplify\/rule-doc-generator-contracts": "<10.0.0-beta1",
"symplify\/symfony-php-config": "<10.0.0-beta1",
"symplify\/simple-php-doc-parser": "<10.0.0-beta1",
"symplify\/php-config-printer": "<10.0.0-beta1",
"symplify\/console-color-diff": "<10.0.0-beta1",
"symplify\/autowire-array-parameter": "<10.0.0-beta1",
"symplify\/markdown-diff": "<10.0.0-beta1",
"symplify\/amnesia": "<10.0.0-beta1",
"symplify\/phpstan-extensions": "<10.0.0-beta1",
"symplify\/rule-doc-generator": "<10.0.0-beta1",
"symplify\/vendor-patches": "<10.0.0-beta1",
"symplify\/skipper": "<10.0.0-beta1",
"symplify\/smart-file-system": "<10.0.0-beta1",
"symplify\/symfony-static-dumper": "<10.0.0-beta1",
"symplify\/git-wrapper": "<10.0.0-beta1",
"symplify\/monorepo-builder": "<10.0.0-beta1",
"symplify\/config-transformer": "<10.0.0-beta1",
"symplify\/easy-ci": "<10.0.0-beta1",
"symplify\/coding-standard": "<10.0.0-beta1",
"symplify\/twig-phpstan-compiler": "<10.0.0-beta1",
"symplify\/latte-phpstan-compiler": "<10.0.0-beta1",
"symplify\/template-phpstan-compiler": "<10.0.0-beta1",
"symplify\/phpstan-latte-rules": "<10.0.0-beta1",
"symplify\/phpstan-twig-rules": "<10.0.0-beta1"
"symplify\/astral": "<10.0.0-beta2",
"symplify\/composer-json-manipulator": "<10.0.0-beta2",
"symplify\/easy-coding-standard": "<10.0.0-beta2",
"symplify\/phpstan-rules": "<10.0.0-beta2",
"symplify\/rule-doc-generator-contracts": "<10.0.0-beta2",
"symplify\/symfony-php-config": "<10.0.0-beta2",
"symplify\/simple-php-doc-parser": "<10.0.0-beta2",
"symplify\/php-config-printer": "<10.0.0-beta2",
"symplify\/console-color-diff": "<10.0.0-beta2",
"symplify\/autowire-array-parameter": "<10.0.0-beta2",
"symplify\/markdown-diff": "<10.0.0-beta2",
"symplify\/amnesia": "<10.0.0-beta2",
"symplify\/phpstan-extensions": "<10.0.0-beta2",
"symplify\/rule-doc-generator": "<10.0.0-beta2",
"symplify\/vendor-patches": "<10.0.0-beta2",
"symplify\/skipper": "<10.0.0-beta2",
"symplify\/smart-file-system": "<10.0.0-beta2",
"symplify\/symfony-static-dumper": "<10.0.0-beta2",
"symplify\/git-wrapper": "<10.0.0-beta2",
"symplify\/monorepo-builder": "<10.0.0-beta2",
"symplify\/config-transformer": "<10.0.0-beta2",
"symplify\/easy-ci": "<10.0.0-beta2",
"symplify\/coding-standard": "<10.0.0-beta2",
"symplify\/twig-phpstan-compiler": "<10.0.0-beta2",
"symplify\/latte-phpstan-compiler": "<10.0.0-beta2",
"symplify\/template-phpstan-compiler": "<10.0.0-beta2",
"symplify\/phpstan-latte-rules": "<10.0.0-beta2",
"symplify\/phpstan-twig-rules": "<10.0.0-beta2"
},
"minimum-stability": "dev",
"prefer-stable": true

View File

@ -18,37 +18,36 @@
}
},
"conflict": {
"symplify\/astral": "<10.0.0-beta1",
"symplify\/composer-json-manipulator": "<10.0.0-beta1",
"symplify\/easy-coding-standard": "<10.0.0-beta1",
"symplify\/phpstan-rules": "<10.0.0-beta1",
"symplify\/easy-testing": "<10.0.0-beta1",
"symplify\/psr4-switcher": "<10.0.0-beta1",
"symplify\/symfony-php-config": "<10.0.0-beta1",
"symplify\/simple-php-doc-parser": "<10.0.0-beta1",
"symplify\/php-config-printer": "<10.0.0-beta1",
"symplify\/console-color-diff": "<10.0.0-beta1",
"symplify\/autowire-array-parameter": "<10.0.0-beta1",
"symplify\/markdown-diff": "<10.0.0-beta1",
"symplify\/package-builder": "<10.0.0-beta1",
"symplify\/amnesia": "<10.0.0-beta1",
"symplify\/phpstan-extensions": "<10.0.0-beta1",
"symplify\/rule-doc-generator": "<10.0.0-beta1",
"symplify\/vendor-patches": "<10.0.0-beta1",
"symplify\/skipper": "<10.0.0-beta1",
"symplify\/smart-file-system": "<10.0.0-beta1",
"symplify\/symfony-static-dumper": "<10.0.0-beta1",
"symplify\/git-wrapper": "<10.0.0-beta1",
"symplify\/symplify-kernel": "<10.0.0-beta1",
"symplify\/monorepo-builder": "<10.0.0-beta1",
"symplify\/config-transformer": "<10.0.0-beta1",
"symplify\/easy-ci": "<10.0.0-beta1",
"symplify\/coding-standard": "<10.0.0-beta1",
"symplify\/twig-phpstan-compiler": "<10.0.0-beta1",
"symplify\/latte-phpstan-compiler": "<10.0.0-beta1",
"symplify\/template-phpstan-compiler": "<10.0.0-beta1",
"symplify\/phpstan-latte-rules": "<10.0.0-beta1",
"symplify\/phpstan-twig-rules": "<10.0.0-beta1"
"symplify\/astral": "<10.0.0-beta2",
"symplify\/composer-json-manipulator": "<10.0.0-beta2",
"symplify\/easy-coding-standard": "<10.0.0-beta2",
"symplify\/phpstan-rules": "<10.0.0-beta2",
"symplify\/easy-testing": "<10.0.0-beta2",
"symplify\/symfony-php-config": "<10.0.0-beta2",
"symplify\/simple-php-doc-parser": "<10.0.0-beta2",
"symplify\/php-config-printer": "<10.0.0-beta2",
"symplify\/console-color-diff": "<10.0.0-beta2",
"symplify\/autowire-array-parameter": "<10.0.0-beta2",
"symplify\/markdown-diff": "<10.0.0-beta2",
"symplify\/package-builder": "<10.0.0-beta2",
"symplify\/amnesia": "<10.0.0-beta2",
"symplify\/phpstan-extensions": "<10.0.0-beta2",
"symplify\/rule-doc-generator": "<10.0.0-beta2",
"symplify\/vendor-patches": "<10.0.0-beta2",
"symplify\/skipper": "<10.0.0-beta2",
"symplify\/smart-file-system": "<10.0.0-beta2",
"symplify\/symfony-static-dumper": "<10.0.0-beta2",
"symplify\/git-wrapper": "<10.0.0-beta2",
"symplify\/symplify-kernel": "<10.0.0-beta2",
"symplify\/monorepo-builder": "<10.0.0-beta2",
"symplify\/config-transformer": "<10.0.0-beta2",
"symplify\/easy-ci": "<10.0.0-beta2",
"symplify\/coding-standard": "<10.0.0-beta2",
"symplify\/twig-phpstan-compiler": "<10.0.0-beta2",
"symplify\/latte-phpstan-compiler": "<10.0.0-beta2",
"symplify\/template-phpstan-compiler": "<10.0.0-beta2",
"symplify\/phpstan-latte-rules": "<10.0.0-beta2",
"symplify\/phpstan-twig-rules": "<10.0.0-beta2"
},
"minimum-stability": "dev",
"prefer-stable": true

View File

@ -29,36 +29,35 @@
}
},
"conflict": {
"symplify\/astral": "<10.0.0-beta1",
"symplify\/composer-json-manipulator": "<10.0.0-beta1",
"symplify\/easy-coding-standard": "<10.0.0-beta1",
"symplify\/phpstan-rules": "<10.0.0-beta1",
"symplify\/easy-testing": "<10.0.0-beta1",
"symplify\/psr4-switcher": "<10.0.0-beta1",
"symplify\/rule-doc-generator-contracts": "<10.0.0-beta1",
"symplify\/symfony-php-config": "<10.0.0-beta1",
"symplify\/php-config-printer": "<10.0.0-beta1",
"symplify\/console-color-diff": "<10.0.0-beta1",
"symplify\/autowire-array-parameter": "<10.0.0-beta1",
"symplify\/markdown-diff": "<10.0.0-beta1",
"symplify\/amnesia": "<10.0.0-beta1",
"symplify\/phpstan-extensions": "<10.0.0-beta1",
"symplify\/rule-doc-generator": "<10.0.0-beta1",
"symplify\/vendor-patches": "<10.0.0-beta1",
"symplify\/skipper": "<10.0.0-beta1",
"symplify\/smart-file-system": "<10.0.0-beta1",
"symplify\/symfony-static-dumper": "<10.0.0-beta1",
"symplify\/git-wrapper": "<10.0.0-beta1",
"symplify\/symplify-kernel": "<10.0.0-beta1",
"symplify\/monorepo-builder": "<10.0.0-beta1",
"symplify\/config-transformer": "<10.0.0-beta1",
"symplify\/easy-ci": "<10.0.0-beta1",
"symplify\/coding-standard": "<10.0.0-beta1",
"symplify\/twig-phpstan-compiler": "<10.0.0-beta1",
"symplify\/latte-phpstan-compiler": "<10.0.0-beta1",
"symplify\/template-phpstan-compiler": "<10.0.0-beta1",
"symplify\/phpstan-latte-rules": "<10.0.0-beta1",
"symplify\/phpstan-twig-rules": "<10.0.0-beta1"
"symplify\/astral": "<10.0.0-beta2",
"symplify\/composer-json-manipulator": "<10.0.0-beta2",
"symplify\/easy-coding-standard": "<10.0.0-beta2",
"symplify\/phpstan-rules": "<10.0.0-beta2",
"symplify\/easy-testing": "<10.0.0-beta2",
"symplify\/rule-doc-generator-contracts": "<10.0.0-beta2",
"symplify\/symfony-php-config": "<10.0.0-beta2",
"symplify\/php-config-printer": "<10.0.0-beta2",
"symplify\/console-color-diff": "<10.0.0-beta2",
"symplify\/autowire-array-parameter": "<10.0.0-beta2",
"symplify\/markdown-diff": "<10.0.0-beta2",
"symplify\/amnesia": "<10.0.0-beta2",
"symplify\/phpstan-extensions": "<10.0.0-beta2",
"symplify\/rule-doc-generator": "<10.0.0-beta2",
"symplify\/vendor-patches": "<10.0.0-beta2",
"symplify\/skipper": "<10.0.0-beta2",
"symplify\/smart-file-system": "<10.0.0-beta2",
"symplify\/symfony-static-dumper": "<10.0.0-beta2",
"symplify\/git-wrapper": "<10.0.0-beta2",
"symplify\/symplify-kernel": "<10.0.0-beta2",
"symplify\/monorepo-builder": "<10.0.0-beta2",
"symplify\/config-transformer": "<10.0.0-beta2",
"symplify\/easy-ci": "<10.0.0-beta2",
"symplify\/coding-standard": "<10.0.0-beta2",
"symplify\/twig-phpstan-compiler": "<10.0.0-beta2",
"symplify\/latte-phpstan-compiler": "<10.0.0-beta2",
"symplify\/template-phpstan-compiler": "<10.0.0-beta2",
"symplify\/phpstan-latte-rules": "<10.0.0-beta2",
"symplify\/phpstan-twig-rules": "<10.0.0-beta2"
},
"minimum-stability": "dev",
"prefer-stable": true

View File

@ -32,34 +32,33 @@
}
},
"conflict": {
"symplify\/astral": "<10.0.0-beta1",
"symplify\/composer-json-manipulator": "<10.0.0-beta1",
"symplify\/easy-coding-standard": "<10.0.0-beta1",
"symplify\/phpstan-rules": "<10.0.0-beta1",
"symplify\/easy-testing": "<10.0.0-beta1",
"symplify\/psr4-switcher": "<10.0.0-beta1",
"symplify\/rule-doc-generator-contracts": "<10.0.0-beta1",
"symplify\/symfony-php-config": "<10.0.0-beta1",
"symplify\/simple-php-doc-parser": "<10.0.0-beta1",
"symplify\/php-config-printer": "<10.0.0-beta1",
"symplify\/console-color-diff": "<10.0.0-beta1",
"symplify\/autowire-array-parameter": "<10.0.0-beta1",
"symplify\/markdown-diff": "<10.0.0-beta1",
"symplify\/amnesia": "<10.0.0-beta1",
"symplify\/phpstan-extensions": "<10.0.0-beta1",
"symplify\/rule-doc-generator": "<10.0.0-beta1",
"symplify\/vendor-patches": "<10.0.0-beta1",
"symplify\/symfony-static-dumper": "<10.0.0-beta1",
"symplify\/git-wrapper": "<10.0.0-beta1",
"symplify\/monorepo-builder": "<10.0.0-beta1",
"symplify\/config-transformer": "<10.0.0-beta1",
"symplify\/easy-ci": "<10.0.0-beta1",
"symplify\/coding-standard": "<10.0.0-beta1",
"symplify\/twig-phpstan-compiler": "<10.0.0-beta1",
"symplify\/latte-phpstan-compiler": "<10.0.0-beta1",
"symplify\/template-phpstan-compiler": "<10.0.0-beta1",
"symplify\/phpstan-latte-rules": "<10.0.0-beta1",
"symplify\/phpstan-twig-rules": "<10.0.0-beta1"
"symplify\/astral": "<10.0.0-beta2",
"symplify\/composer-json-manipulator": "<10.0.0-beta2",
"symplify\/easy-coding-standard": "<10.0.0-beta2",
"symplify\/phpstan-rules": "<10.0.0-beta2",
"symplify\/easy-testing": "<10.0.0-beta2",
"symplify\/rule-doc-generator-contracts": "<10.0.0-beta2",
"symplify\/symfony-php-config": "<10.0.0-beta2",
"symplify\/simple-php-doc-parser": "<10.0.0-beta2",
"symplify\/php-config-printer": "<10.0.0-beta2",
"symplify\/console-color-diff": "<10.0.0-beta2",
"symplify\/autowire-array-parameter": "<10.0.0-beta2",
"symplify\/markdown-diff": "<10.0.0-beta2",
"symplify\/amnesia": "<10.0.0-beta2",
"symplify\/phpstan-extensions": "<10.0.0-beta2",
"symplify\/rule-doc-generator": "<10.0.0-beta2",
"symplify\/vendor-patches": "<10.0.0-beta2",
"symplify\/symfony-static-dumper": "<10.0.0-beta2",
"symplify\/git-wrapper": "<10.0.0-beta2",
"symplify\/monorepo-builder": "<10.0.0-beta2",
"symplify\/config-transformer": "<10.0.0-beta2",
"symplify\/easy-ci": "<10.0.0-beta2",
"symplify\/coding-standard": "<10.0.0-beta2",
"symplify\/twig-phpstan-compiler": "<10.0.0-beta2",
"symplify\/latte-phpstan-compiler": "<10.0.0-beta2",
"symplify\/template-phpstan-compiler": "<10.0.0-beta2",
"symplify\/phpstan-latte-rules": "<10.0.0-beta2",
"symplify\/phpstan-twig-rules": "<10.0.0-beta2"
},
"minimum-stability": "dev",
"prefer-stable": true

View File

@ -28,37 +28,36 @@
}
},
"conflict": {
"symplify\/astral": "<10.0.0-beta1",
"symplify\/composer-json-manipulator": "<10.0.0-beta1",
"symplify\/easy-coding-standard": "<10.0.0-beta1",
"symplify\/phpstan-rules": "<10.0.0-beta1",
"symplify\/easy-testing": "<10.0.0-beta1",
"symplify\/psr4-switcher": "<10.0.0-beta1",
"symplify\/rule-doc-generator-contracts": "<10.0.0-beta1",
"symplify\/symfony-php-config": "<10.0.0-beta1",
"symplify\/simple-php-doc-parser": "<10.0.0-beta1",
"symplify\/php-config-printer": "<10.0.0-beta1",
"symplify\/console-color-diff": "<10.0.0-beta1",
"symplify\/autowire-array-parameter": "<10.0.0-beta1",
"symplify\/markdown-diff": "<10.0.0-beta1",
"symplify\/package-builder": "<10.0.0-beta1",
"symplify\/amnesia": "<10.0.0-beta1",
"symplify\/phpstan-extensions": "<10.0.0-beta1",
"symplify\/rule-doc-generator": "<10.0.0-beta1",
"symplify\/vendor-patches": "<10.0.0-beta1",
"symplify\/skipper": "<10.0.0-beta1",
"symplify\/symfony-static-dumper": "<10.0.0-beta1",
"symplify\/git-wrapper": "<10.0.0-beta1",
"symplify\/symplify-kernel": "<10.0.0-beta1",
"symplify\/monorepo-builder": "<10.0.0-beta1",
"symplify\/config-transformer": "<10.0.0-beta1",
"symplify\/easy-ci": "<10.0.0-beta1",
"symplify\/coding-standard": "<10.0.0-beta1",
"symplify\/twig-phpstan-compiler": "<10.0.0-beta1",
"symplify\/latte-phpstan-compiler": "<10.0.0-beta1",
"symplify\/template-phpstan-compiler": "<10.0.0-beta1",
"symplify\/phpstan-latte-rules": "<10.0.0-beta1",
"symplify\/phpstan-twig-rules": "<10.0.0-beta1"
"symplify\/astral": "<10.0.0-beta2",
"symplify\/composer-json-manipulator": "<10.0.0-beta2",
"symplify\/easy-coding-standard": "<10.0.0-beta2",
"symplify\/phpstan-rules": "<10.0.0-beta2",
"symplify\/easy-testing": "<10.0.0-beta2",
"symplify\/rule-doc-generator-contracts": "<10.0.0-beta2",
"symplify\/symfony-php-config": "<10.0.0-beta2",
"symplify\/simple-php-doc-parser": "<10.0.0-beta2",
"symplify\/php-config-printer": "<10.0.0-beta2",
"symplify\/console-color-diff": "<10.0.0-beta2",
"symplify\/autowire-array-parameter": "<10.0.0-beta2",
"symplify\/markdown-diff": "<10.0.0-beta2",
"symplify\/package-builder": "<10.0.0-beta2",
"symplify\/amnesia": "<10.0.0-beta2",
"symplify\/phpstan-extensions": "<10.0.0-beta2",
"symplify\/rule-doc-generator": "<10.0.0-beta2",
"symplify\/vendor-patches": "<10.0.0-beta2",
"symplify\/skipper": "<10.0.0-beta2",
"symplify\/symfony-static-dumper": "<10.0.0-beta2",
"symplify\/git-wrapper": "<10.0.0-beta2",
"symplify\/symplify-kernel": "<10.0.0-beta2",
"symplify\/monorepo-builder": "<10.0.0-beta2",
"symplify\/config-transformer": "<10.0.0-beta2",
"symplify\/easy-ci": "<10.0.0-beta2",
"symplify\/coding-standard": "<10.0.0-beta2",
"symplify\/twig-phpstan-compiler": "<10.0.0-beta2",
"symplify\/latte-phpstan-compiler": "<10.0.0-beta2",
"symplify\/template-phpstan-compiler": "<10.0.0-beta2",
"symplify\/phpstan-latte-rules": "<10.0.0-beta2",
"symplify\/phpstan-twig-rules": "<10.0.0-beta2"
},
"minimum-stability": "dev",
"prefer-stable": true

View File

@ -27,33 +27,32 @@
}
},
"conflict": {
"symplify\/astral": "<10.0.0-beta1",
"symplify\/easy-coding-standard": "<10.0.0-beta1",
"symplify\/phpstan-rules": "<10.0.0-beta1",
"symplify\/easy-testing": "<10.0.0-beta1",
"symplify\/psr4-switcher": "<10.0.0-beta1",
"symplify\/rule-doc-generator-contracts": "<10.0.0-beta1",
"symplify\/symfony-php-config": "<10.0.0-beta1",
"symplify\/simple-php-doc-parser": "<10.0.0-beta1",
"symplify\/php-config-printer": "<10.0.0-beta1",
"symplify\/console-color-diff": "<10.0.0-beta1",
"symplify\/markdown-diff": "<10.0.0-beta1",
"symplify\/amnesia": "<10.0.0-beta1",
"symplify\/phpstan-extensions": "<10.0.0-beta1",
"symplify\/rule-doc-generator": "<10.0.0-beta1",
"symplify\/vendor-patches": "<10.0.0-beta1",
"symplify\/skipper": "<10.0.0-beta1",
"symplify\/symfony-static-dumper": "<10.0.0-beta1",
"symplify\/git-wrapper": "<10.0.0-beta1",
"symplify\/monorepo-builder": "<10.0.0-beta1",
"symplify\/config-transformer": "<10.0.0-beta1",
"symplify\/easy-ci": "<10.0.0-beta1",
"symplify\/coding-standard": "<10.0.0-beta1",
"symplify\/twig-phpstan-compiler": "<10.0.0-beta1",
"symplify\/latte-phpstan-compiler": "<10.0.0-beta1",
"symplify\/template-phpstan-compiler": "<10.0.0-beta1",
"symplify\/phpstan-latte-rules": "<10.0.0-beta1",
"symplify\/phpstan-twig-rules": "<10.0.0-beta1"
"symplify\/astral": "<10.0.0-beta2",
"symplify\/easy-coding-standard": "<10.0.0-beta2",
"symplify\/phpstan-rules": "<10.0.0-beta2",
"symplify\/easy-testing": "<10.0.0-beta2",
"symplify\/rule-doc-generator-contracts": "<10.0.0-beta2",
"symplify\/symfony-php-config": "<10.0.0-beta2",
"symplify\/simple-php-doc-parser": "<10.0.0-beta2",
"symplify\/php-config-printer": "<10.0.0-beta2",
"symplify\/console-color-diff": "<10.0.0-beta2",
"symplify\/markdown-diff": "<10.0.0-beta2",
"symplify\/amnesia": "<10.0.0-beta2",
"symplify\/phpstan-extensions": "<10.0.0-beta2",
"symplify\/rule-doc-generator": "<10.0.0-beta2",
"symplify\/vendor-patches": "<10.0.0-beta2",
"symplify\/skipper": "<10.0.0-beta2",
"symplify\/symfony-static-dumper": "<10.0.0-beta2",
"symplify\/git-wrapper": "<10.0.0-beta2",
"symplify\/monorepo-builder": "<10.0.0-beta2",
"symplify\/config-transformer": "<10.0.0-beta2",
"symplify\/easy-ci": "<10.0.0-beta2",
"symplify\/coding-standard": "<10.0.0-beta2",
"symplify\/twig-phpstan-compiler": "<10.0.0-beta2",
"symplify\/latte-phpstan-compiler": "<10.0.0-beta2",
"symplify\/template-phpstan-compiler": "<10.0.0-beta2",
"symplify\/phpstan-latte-rules": "<10.0.0-beta2",
"symplify\/phpstan-twig-rules": "<10.0.0-beta2"
},
"minimum-stability": "dev",
"prefer-stable": true