Updated Rector to commit 6bff51172cf396da8abc062d96f0406fd86ef349

6bff51172c [e2e] Add e2e for polyfill in composer require provided (#5392)
This commit is contained in:
Tomas Votruba 2023-12-25 17:21:11 +00:00
parent a7607e481d
commit 24ab7232bb
10 changed files with 196 additions and 16 deletions

View File

@ -1407,6 +1407,7 @@ return array(
'Rector\\Doctrine\\NodeManipulator\\ToManyRelationPropertyTypeResolver' => $vendorDir . '/rector/rector-doctrine/src/NodeManipulator/ToManyRelationPropertyTypeResolver.php',
'Rector\\Doctrine\\NodeManipulator\\ToOneRelationPropertyTypeResolver' => $vendorDir . '/rector/rector-doctrine/src/NodeManipulator/ToOneRelationPropertyTypeResolver.php',
'Rector\\Doctrine\\Orm214\\Rector\\Param\\ReplaceLifecycleEventArgsByDedicatedEventArgsRector' => $vendorDir . '/rector/rector-doctrine/rules/Orm214/Rector/Param/ReplaceLifecycleEventArgsByDedicatedEventArgsRector.php',
'Rector\\Doctrine\\Orm28\\Rector\\MethodCall\\IterateToToIterableRector' => $vendorDir . '/rector/rector-doctrine/rules/Orm28/Rector/MethodCall/IterateToToIterableRector.php',
'Rector\\Doctrine\\PhpDocParser\\DoctrineDocBlockResolver' => $vendorDir . '/rector/rector-doctrine/src/PhpDocParser/DoctrineDocBlockResolver.php',
'Rector\\Doctrine\\PhpDoc\\ShortClassExpander' => $vendorDir . '/rector/rector-doctrine/src/PhpDoc/ShortClassExpander.php',
'Rector\\Doctrine\\Set\\DoctrineSetList' => $vendorDir . '/rector/rector-doctrine/src/Set/DoctrineSetList.php',

View File

@ -1625,6 +1625,7 @@ class ComposerStaticInit8339caf294dd12447c06647e5d0dc118
'Rector\\Doctrine\\NodeManipulator\\ToManyRelationPropertyTypeResolver' => __DIR__ . '/..' . '/rector/rector-doctrine/src/NodeManipulator/ToManyRelationPropertyTypeResolver.php',
'Rector\\Doctrine\\NodeManipulator\\ToOneRelationPropertyTypeResolver' => __DIR__ . '/..' . '/rector/rector-doctrine/src/NodeManipulator/ToOneRelationPropertyTypeResolver.php',
'Rector\\Doctrine\\Orm214\\Rector\\Param\\ReplaceLifecycleEventArgsByDedicatedEventArgsRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/Orm214/Rector/Param/ReplaceLifecycleEventArgsByDedicatedEventArgsRector.php',
'Rector\\Doctrine\\Orm28\\Rector\\MethodCall\\IterateToToIterableRector' => __DIR__ . '/..' . '/rector/rector-doctrine/rules/Orm28/Rector/MethodCall/IterateToToIterableRector.php',
'Rector\\Doctrine\\PhpDocParser\\DoctrineDocBlockResolver' => __DIR__ . '/..' . '/rector/rector-doctrine/src/PhpDocParser/DoctrineDocBlockResolver.php',
'Rector\\Doctrine\\PhpDoc\\ShortClassExpander' => __DIR__ . '/..' . '/rector/rector-doctrine/src/PhpDoc/ShortClassExpander.php',
'Rector\\Doctrine\\Set\\DoctrineSetList' => __DIR__ . '/..' . '/rector/rector-doctrine/src/Set/DoctrineSetList.php',

View File

@ -1679,38 +1679,37 @@
"source": {
"type": "git",
"url": "https:\/\/github.com\/rectorphp\/rector-doctrine.git",
"reference": "c7ff3e533aa58c456290c0e17e12f04369f55ec1"
"reference": "18273edb4e165d60503c403e72f9824ac204d653"
},
"dist": {
"type": "zip",
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-doctrine\/zipball\/c7ff3e533aa58c456290c0e17e12f04369f55ec1",
"reference": "c7ff3e533aa58c456290c0e17e12f04369f55ec1",
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-doctrine\/zipball\/18273edb4e165d60503c403e72f9824ac204d653",
"reference": "18273edb4e165d60503c403e72f9824ac204d653",
"shasum": ""
},
"require": {
"php": ">=8.1"
},
"require-dev": {
"doctrine\/doctrine-bundle": "^2.10",
"doctrine\/orm": "^2.16",
"phpstan\/extension-installer": "^1.3",
"phpstan\/phpstan": "^1.10",
"phpstan\/phpstan-webmozart-assert": "^1.2",
"phpunit\/phpunit": "^10.3",
"rector\/phpstan-rules": "^0.7",
"rector\/rector-generator": "^0.7",
"rector\/rector-generator": "^0.7.5",
"rector\/rector-src": "dev-main",
"symplify\/easy-ci": "^11.2",
"symplify\/easy-coding-standard": "^12.0",
"symplify\/phpstan-extensions": "^11.2",
"symplify\/phpstan-rules": "^11.1",
"symplify\/rule-doc-generator": "^12.0",
"symplify\/vendor-patches": "^11.2",
"tomasvotruba\/class-leak": "^0.1",
"tomasvotruba\/class-leak": "^0.2",
"tomasvotruba\/type-coverage": "^0.2",
"tomasvotruba\/unused-public": "^0.3"
"tomasvotruba\/unused-public": "^0.3",
"tracy\/tracy": "^2.10"
},
"time": "2023-12-21T14:33:58+00:00",
"time": "2023-12-25T13:32:36+00:00",
"default-branch": true,
"type": "rector-extension",
"extra": {

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-doctrine' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-doctrine', 'relative_install_path' => '../../rector-doctrine', 'extra' => NULL, 'version' => 'dev-main c7ff3e5'), 'rector/rector-downgrade-php' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-downgrade-php', 'relative_install_path' => '../../rector-downgrade-php', 'extra' => NULL, 'version' => 'dev-main 90fbaf5'), 'rector/rector-phpunit' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-phpunit', 'relative_install_path' => '../../rector-phpunit', 'extra' => NULL, 'version' => 'dev-main 1cbcfcb'), 'rector/rector-symfony' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-symfony', 'relative_install_path' => '../../rector-symfony', 'extra' => NULL, 'version' => 'dev-main 5f1e96d'));
public const EXTENSIONS = array('rector/rector-doctrine' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-doctrine', 'relative_install_path' => '../../rector-doctrine', 'extra' => NULL, 'version' => 'dev-main 18273ed'), 'rector/rector-downgrade-php' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-downgrade-php', 'relative_install_path' => '../../rector-downgrade-php', 'extra' => NULL, 'version' => 'dev-main 90fbaf5'), 'rector/rector-phpunit' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-phpunit', 'relative_install_path' => '../../rector-phpunit', 'extra' => NULL, 'version' => 'dev-main 1cbcfcb'), 'rector/rector-symfony' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-symfony', 'relative_install_path' => '../../rector-symfony', 'extra' => NULL, 'version' => 'dev-main 5f1e96d'));
private function __construct()
{
}

View File

@ -19,12 +19,11 @@
"doctrine\/orm": "^2.16",
"phpstan\/phpstan-webmozart-assert": "^1.2",
"symplify\/vendor-patches": "^11.2",
"rector\/rector-generator": "^0.7",
"symplify\/easy-ci": "^11.2",
"rector\/rector-generator": "^0.7.5",
"tomasvotruba\/unused-public": "^0.3",
"tomasvotruba\/type-coverage": "^0.2",
"tomasvotruba\/class-leak": "^0.1",
"doctrine\/doctrine-bundle": "^2.10"
"tomasvotruba\/class-leak": "^0.2",
"tracy\/tracy": "^2.10"
},
"autoload": {
"psr-4": {
@ -43,6 +42,9 @@
},
"classmap": [
"stubs"
],
"files": [
"tests\/debug_functions.php"
]
},
"scripts": {

View File

@ -0,0 +1,15 @@
<?php
declare (strict_types=1);
namespace RectorPrefix202312;
use Rector\Config\RectorConfig;
use Rector\Php80\Rector\Class_\AnnotationToAttributeRector;
use Rector\Php80\Rector\Property\NestedAnnotationToAttributeRector;
use Rector\Php80\ValueObject\AnnotationPropertyToAttributeClass;
use Rector\Php80\ValueObject\AnnotationToAttribute;
use Rector\Php80\ValueObject\NestedAnnotationToAttribute;
return static function (RectorConfig $rectorConfig) : void {
$rectorConfig->ruleWithConfiguration(NestedAnnotationToAttributeRector::class, [new NestedAnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\Indexes', [new AnnotationPropertyToAttributeClass('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\Index'), new AnnotationPropertyToAttributeClass('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\UniqueIndex')], \true)]);
$rectorConfig->ruleWithConfiguration(AnnotationToAttributeRector::class, [new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\File\\ChunkSize'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\File\\Filename'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\File\\Length'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\File\\Metadata'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\File\\UploadDate'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\AlsoLoad'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\ChangeTrackingPolicy'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\DefaultDiscriminatorValue'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\DiscriminatorField'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\DiscriminatorMap'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\DiscriminatorValue'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\Document'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\EmbeddedDocument'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\EmbedMany'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\EmbedOne'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\Field'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\File'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\HasLifecycleCallbacks'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\Id'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\Index'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\InheritanceType'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\Lock'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\MappedSuperclass'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\PostLoad'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\PostPersist'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\PostRemove'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\PostUpdate'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\PreFlush'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\PreLoad'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\PrePersist'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\PreRemove'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\PreUpdate'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\QueryResultDocument'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\ReadPreference'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\ReferenceMany'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\ReferenceOne'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\ShardKey'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\UniqueIndex'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\Validation'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\Version'), new AnnotationToAttribute('Doctrine\\ODM\\MongoDB\\Mapping\\Annotations\\View')]);
};

View File

@ -1,4 +1,4 @@
# 15 Rules Overview
# 16 Rules Overview
## ChangeCompositeExpressionAddMultipleWithWithRector
@ -141,6 +141,32 @@ Initialize collection property in Entity constructor
<br>
## IterateToToIterableRector
Change `iterate()` => `toIterable()`
- class: [`Rector\Doctrine\Orm28\Rector\MethodCall\IterateToToIterableRector`](../rules/Orm28/Rector/MethodCall/IterateToToIterableRector.php)
```diff
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Internal\Hydration\IterableResult;
class SomeRepository extends EntityRepository
{
- public function run(): IterateResult
+ public function run(): iterable
{
/** @var \Doctrine\ORM\AbstractQuery $query */
$query = $this->getEntityManager()->select('e')->from('entity')->getQuery();
- return $query->iterate();
+ return $query->toIterable();
}
}
```
<br>
## MakeEntityDateTimePropertyDateTimeInterfaceRector
Make maker bundle generate DateTime property accept DateTimeInterface too

View File

@ -0,0 +1,132 @@
<?php
declare (strict_types=1);
namespace Rector\Doctrine\Orm28\Rector\MethodCall;
use PhpParser\Node;
use PhpParser\Node\Expr;
use PhpParser\Node\Expr\ArrayDimFetch;
use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\Identifier;
use PhpParser\Node\Name;
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Foreach_;
use PHPStan\Type\ObjectType;
use Rector\Core\Rector\AbstractRector;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
* @changelog https://github.com/doctrine/orm/pull/7885
* @changelog https://github.com/doctrine/orm/pull/8293
*
* @see \Rector\Doctrine\Tests\Orm28\Rector\MethodCall\IterateToToIterableRector\IterateToToIterableRectorTest
*/
final class IterateToToIterableRector extends AbstractRector
{
/**
* @return array<class-string<Node>>
*/
public function getNodeTypes() : array
{
return [MethodCall::class, ClassMethod::class, Foreach_::class];
}
public function getRuleDefinition() : RuleDefinition
{
return new RuleDefinition('Change iterate() => toIterable()', [new CodeSample(<<<'CODE_SAMPLE'
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Internal\Hydration\IterableResult;
class SomeRepository extends EntityRepository
{
public function run(): IterateResult
{
/** @var \Doctrine\ORM\AbstractQuery $query */
$query = $this->getEntityManager()->select('e')->from('entity')->getQuery();
return $query->iterate();
}
}
CODE_SAMPLE
, <<<'CODE_SAMPLE'
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Internal\Hydration\IterableResult;
class SomeRepository extends EntityRepository
{
public function run(): iterable
{
/** @var \Doctrine\ORM\AbstractQuery $query */
$query = $this->getEntityManager()->select('e')->from('entity')->getQuery();
return $query->toIterable();
}
}
CODE_SAMPLE
)]);
}
/**
* @param ClassMethod|MethodCall|Node\Stmt\Foreach_ $node
* @return \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Foreach_|null
*/
public function refactor(Node $node)
{
if ($node instanceof ClassMethod) {
return $this->refactorClassMethod($node);
}
if ($node instanceof Foreach_) {
return $this->refactorForeach($node);
}
$varType = $this->nodeTypeResolver->getType($node->var);
if (!$varType instanceof ObjectType) {
return null;
}
if (!$varType->isInstanceOf('Doctrine\\ORM\\AbstractQuery')->yes()) {
return null;
}
// Change iterate() method calls to toIterable()
if (!$this->isName($node->name, 'iterate')) {
return null;
}
$node->name = new Identifier('toIterable');
return $node;
}
private function refactorClassMethod(ClassMethod $classMethod) : ?ClassMethod
{
if (!$classMethod->returnType instanceof Node) {
return null;
}
if (!$this->isName($classMethod->returnType, 'Doctrine\\ORM\\Internal\\Hydration\\IterableResult')) {
return null;
}
$classMethod->returnType = new Name('iterable');
return $classMethod;
}
private function refactorForeach(Foreach_ $foreach) : ?Foreach_
{
$foreachedExprType = $this->getType($foreach->expr);
if (!$foreachedExprType instanceof ObjectType) {
return null;
}
if (!$foreachedExprType->isInstanceOf('Doctrine\\ORM\\Internal\\Hydration\\IterableResult')->yes()) {
return null;
}
$itemName = $this->getName($foreach->valueVar);
if (!\is_string($itemName)) {
return null;
}
$this->traverseNodesWithCallable($foreach->stmts, function (Node $node) use($itemName) : ?Expr {
// update dim fetched reference to direct ones
if (!$node instanceof ArrayDimFetch) {
return null;
}
if (!$node->var instanceof Expr) {
return null;
}
if (!$this->isName($node->var, $itemName)) {
return null;
}
return $node->var;
});
return $foreach;
}
}

View File

@ -72,4 +72,8 @@ final class DoctrineSetList implements SetListInterface
* @var string
*/
public const GEDMO_ANNOTATIONS_TO_ATTRIBUTES = __DIR__ . '/../../config/sets/doctrine-gedmo-annotations-to-attributes.php';
/**
* @var string
*/
public const MONGODB__ANNOTATIONS_TO_ATTRIBUTES = __DIR__ . '/../../config/sets/doctrine-mongodb-annotations-to-attributes.php';
}