From 73de3324112a8b974f7b5fb57ca5bc5a685e45c8 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Fri, 16 Oct 2026 12:26:26 +0200 Subject: [PATCH 1/3] Rename Symplify\RuleDocGenerator references to Rector\RuleDoc in test and e2e rules --- .../utils/rector/src/Rector/RenameSimpleRector.php | 2 +- e2e/parallel-unfinished-jobs/utils/ExitWorkerRector.php | 4 ++-- tests/Configuration/Source/DeprecatedRectorStub.php | 4 ++-- tests/Configuration/Source/RemoveDoubleAssignRector.php | 2 +- tests/Console/Command/Source/ComposerBoundRector.php | 4 ++-- .../Source/SetArrayArgValueRector.php | 2 +- .../Source/SetArrayAttributeValueRector.php | 2 +- .../ChangeSwitchTernary/Source/AnotherExpressionRector.php | 2 +- .../Source/AddFullyQualifiedIdentifierDocblockRector.php | 2 +- tests/Issues/IndexedStmt/Source/ChangeLastIndex1Rector.php | 2 +- tests/Issues/IndexedStmt/Source/RemoveIndex1Rector.php | 2 +- .../Source/Rule/ExtbaseAnnotationToAttributeRector.php | 4 ++-- .../Source/PartialUpdateTestRector.php | 2 +- .../Source/SomeAttributeTargetRector.php | 2 +- .../Issues/ReturnEmptyNodes/Source/ReturnEmptyStmtsRector.php | 2 +- tests/Rector/RectorRunner/Source/ReturnNullRector.php | 4 ++-- .../RectorRuleShouldNotBeApplied/Source/NoChangeRector.php | 2 +- .../Fixture/ComposerPackageConstraintRector.php | 2 +- .../Fixture/ComposerPackageConstraintsRector.php | 2 +- tests/VersionBonding/Fixture/NoInterfaceRector.php | 2 +- tests/VersionBonding/Fixture/PolyfillPhp83Rector.php | 2 +- 21 files changed, 26 insertions(+), 26 deletions(-) diff --git a/build/target-repository/e2e/rector-prefixed-rule-test/utils/rector/src/Rector/RenameSimpleRector.php b/build/target-repository/e2e/rector-prefixed-rule-test/utils/rector/src/Rector/RenameSimpleRector.php index 298e3ba9956..d8002d0dabe 100644 --- a/build/target-repository/e2e/rector-prefixed-rule-test/utils/rector/src/Rector/RenameSimpleRector.php +++ b/build/target-repository/e2e/rector-prefixed-rule-test/utils/rector/src/Rector/RenameSimpleRector.php @@ -7,7 +7,7 @@ use PhpParser\Node; use PhpParser\Node\Expr\Variable; use Rector\Rector\AbstractRector; -use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use Rector\RuleDoc\RuleDefinition; /** * @see \Rector\Tests\TypeDeclaration\Rector\RenameSimpleRectorTest diff --git a/e2e/parallel-unfinished-jobs/utils/ExitWorkerRector.php b/e2e/parallel-unfinished-jobs/utils/ExitWorkerRector.php index 8c3cbf88456..c237fa98eff 100644 --- a/e2e/parallel-unfinished-jobs/utils/ExitWorkerRector.php +++ b/e2e/parallel-unfinished-jobs/utils/ExitWorkerRector.php @@ -7,8 +7,8 @@ use PhpParser\Node; use PhpParser\Node\Expr\FuncCall; use Rector\Rector\AbstractRector; -use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; -use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use Rector\RuleDoc\CodeSample\CodeSample; +use Rector\RuleDoc\RuleDefinition; /** * Ends the worker process on exit_worker(), like a worker that dies before reporting its files diff --git a/tests/Configuration/Source/DeprecatedRectorStub.php b/tests/Configuration/Source/DeprecatedRectorStub.php index 51bb072bcba..60c22a733a7 100644 --- a/tests/Configuration/Source/DeprecatedRectorStub.php +++ b/tests/Configuration/Source/DeprecatedRectorStub.php @@ -8,8 +8,8 @@ use PhpParser\Node\Stmt\Class_; use Rector\Configuration\Deprecation\Contract\DeprecatedInterface; use Rector\Rector\AbstractRector; -use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; -use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use Rector\RuleDoc\CodeSample\CodeSample; +use Rector\RuleDoc\RuleDefinition; final class DeprecatedRectorStub extends AbstractRector implements DeprecatedInterface { diff --git a/tests/Configuration/Source/RemoveDoubleAssignRector.php b/tests/Configuration/Source/RemoveDoubleAssignRector.php index 4d6c05bdc49..798f1c36a55 100644 --- a/tests/Configuration/Source/RemoveDoubleAssignRector.php +++ b/tests/Configuration/Source/RemoveDoubleAssignRector.php @@ -4,7 +4,7 @@ use PhpParser\Node; use Rector\Rector\AbstractRector; -use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use Rector\RuleDoc\RuleDefinition; /** * Dummy rector with same class name as an official one diff --git a/tests/Console/Command/Source/ComposerBoundRector.php b/tests/Console/Command/Source/ComposerBoundRector.php index 3255736cb0d..7508dd6f146 100644 --- a/tests/Console/Command/Source/ComposerBoundRector.php +++ b/tests/Console/Command/Source/ComposerBoundRector.php @@ -8,8 +8,8 @@ use Rector\Rector\AbstractRector; use Rector\VersionBonding\Contract\ComposerPackageConstraintInterface; use Rector\VersionBonding\ValueObject\ComposerPackageConstraint; -use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; -use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use Rector\RuleDoc\CodeSample\CodeSample; +use Rector\RuleDoc\RuleDefinition; final class ComposerBoundRector extends AbstractRector implements ComposerPackageConstraintInterface { diff --git a/tests/Issues/AttributeAndArgValueRefresh/Source/SetArrayArgValueRector.php b/tests/Issues/AttributeAndArgValueRefresh/Source/SetArrayArgValueRector.php index e5600327425..0824336d9ea 100644 --- a/tests/Issues/AttributeAndArgValueRefresh/Source/SetArrayArgValueRector.php +++ b/tests/Issues/AttributeAndArgValueRefresh/Source/SetArrayArgValueRector.php @@ -10,7 +10,7 @@ use PhpParser\Node\Expr\Array_; use PhpParser\Node\Scalar\String_; use Rector\Rector\AbstractRector; -use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use Rector\RuleDoc\RuleDefinition; final class SetArrayArgValueRector extends AbstractRector { diff --git a/tests/Issues/AttributeAndArgValueRefresh/Source/SetArrayAttributeValueRector.php b/tests/Issues/AttributeAndArgValueRefresh/Source/SetArrayAttributeValueRector.php index 76d1b21d0a6..f3b660e5686 100644 --- a/tests/Issues/AttributeAndArgValueRefresh/Source/SetArrayAttributeValueRector.php +++ b/tests/Issues/AttributeAndArgValueRefresh/Source/SetArrayAttributeValueRector.php @@ -11,7 +11,7 @@ use PhpParser\Node\Expr\Array_; use PhpParser\Node\Scalar\String_; use Rector\Rector\AbstractRector; -use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use Rector\RuleDoc\RuleDefinition; final class SetArrayAttributeValueRector extends AbstractRector { diff --git a/tests/Issues/ChangeSwitchTernary/Source/AnotherExpressionRector.php b/tests/Issues/ChangeSwitchTernary/Source/AnotherExpressionRector.php index dbe930548b5..4147673b850 100644 --- a/tests/Issues/ChangeSwitchTernary/Source/AnotherExpressionRector.php +++ b/tests/Issues/ChangeSwitchTernary/Source/AnotherExpressionRector.php @@ -8,7 +8,7 @@ use PhpParser\Node\Stmt\Expression; use Rector\PHPStan\ScopeFetcher; use Rector\Rector\AbstractRector; -use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use Rector\RuleDoc\RuleDefinition; final class AnotherExpressionRector extends AbstractRector { diff --git a/tests/Issues/ImportFullyQualifiedIdentifierDocblock/Source/AddFullyQualifiedIdentifierDocblockRector.php b/tests/Issues/ImportFullyQualifiedIdentifierDocblock/Source/AddFullyQualifiedIdentifierDocblockRector.php index a8dae6cd299..5657dd4d7c8 100644 --- a/tests/Issues/ImportFullyQualifiedIdentifierDocblock/Source/AddFullyQualifiedIdentifierDocblockRector.php +++ b/tests/Issues/ImportFullyQualifiedIdentifierDocblock/Source/AddFullyQualifiedIdentifierDocblockRector.php @@ -11,7 +11,7 @@ use Rector\BetterPhpDocParser\ValueObject\Type\FullyQualifiedIdentifierTypeNode; use Rector\Comments\NodeDocBlock\DocBlockUpdater; use Rector\Rector\AbstractRector; -use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use Rector\RuleDoc\RuleDefinition; final class AddFullyQualifiedIdentifierDocblockRector extends AbstractRector { diff --git a/tests/Issues/IndexedStmt/Source/ChangeLastIndex1Rector.php b/tests/Issues/IndexedStmt/Source/ChangeLastIndex1Rector.php index 4214a02e4bc..21fafcdfbf7 100644 --- a/tests/Issues/IndexedStmt/Source/ChangeLastIndex1Rector.php +++ b/tests/Issues/IndexedStmt/Source/ChangeLastIndex1Rector.php @@ -9,7 +9,7 @@ use PhpParser\Node\Stmt\Expression; use Rector\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\Rector\AbstractRector; -use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use Rector\RuleDoc\RuleDefinition; final class ChangeLastIndex1Rector extends AbstractRector { diff --git a/tests/Issues/IndexedStmt/Source/RemoveIndex1Rector.php b/tests/Issues/IndexedStmt/Source/RemoveIndex1Rector.php index 4697df3afc2..89a633990fa 100644 --- a/tests/Issues/IndexedStmt/Source/RemoveIndex1Rector.php +++ b/tests/Issues/IndexedStmt/Source/RemoveIndex1Rector.php @@ -9,7 +9,7 @@ use PhpParser\Node\Stmt\Expression; use PhpParser\NodeVisitor; use Rector\Rector\AbstractRector; -use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use Rector\RuleDoc\RuleDefinition; final class RemoveIndex1Rector extends AbstractRector { diff --git a/tests/Issues/Issue9388/Source/Rule/ExtbaseAnnotationToAttributeRector.php b/tests/Issues/Issue9388/Source/Rule/ExtbaseAnnotationToAttributeRector.php index 0f145bbeefe..78252463a5e 100644 --- a/tests/Issues/Issue9388/Source/Rule/ExtbaseAnnotationToAttributeRector.php +++ b/tests/Issues/Issue9388/Source/Rule/ExtbaseAnnotationToAttributeRector.php @@ -24,8 +24,8 @@ use Rector\Tests\Issues\Issue9388\Source\AnnotationToAttribute\AttributeDecorator; use Rector\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; -use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; -use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use Rector\RuleDoc\CodeSample\CodeSample; +use Rector\RuleDoc\RuleDefinition; final class ExtbaseAnnotationToAttributeRector extends AbstractRector implements MinPhpVersionInterface { diff --git a/tests/Issues/PartialValueDocblockUpdate/Source/PartialUpdateTestRector.php b/tests/Issues/PartialValueDocblockUpdate/Source/PartialUpdateTestRector.php index d5aeed8a266..740dfb168a6 100644 --- a/tests/Issues/PartialValueDocblockUpdate/Source/PartialUpdateTestRector.php +++ b/tests/Issues/PartialValueDocblockUpdate/Source/PartialUpdateTestRector.php @@ -12,7 +12,7 @@ use Rector\BetterPhpDocParser\ValueObject\PhpDoc\DoctrineAnnotation\CurlyListNode; use Rector\Comments\NodeDocBlock\DocBlockUpdater; use Rector\Rector\AbstractRector; -use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use Rector\RuleDoc\RuleDefinition; final class PartialUpdateTestRector extends AbstractRector { diff --git a/tests/Issues/PrintStringNowDocUnderAttributeTarget/Source/SomeAttributeTargetRector.php b/tests/Issues/PrintStringNowDocUnderAttributeTarget/Source/SomeAttributeTargetRector.php index 6f89467ac4f..73a164404c4 100644 --- a/tests/Issues/PrintStringNowDocUnderAttributeTarget/Source/SomeAttributeTargetRector.php +++ b/tests/Issues/PrintStringNowDocUnderAttributeTarget/Source/SomeAttributeTargetRector.php @@ -8,7 +8,7 @@ use PhpParser\Node\Attribute; use PhpParser\Node\Name\FullyQualified; use Rector\Rector\AbstractRector; -use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use Rector\RuleDoc\RuleDefinition; final class SomeAttributeTargetRector extends AbstractRector { diff --git a/tests/Issues/ReturnEmptyNodes/Source/ReturnEmptyStmtsRector.php b/tests/Issues/ReturnEmptyNodes/Source/ReturnEmptyStmtsRector.php index 25390ce97bf..45067b6d3ff 100644 --- a/tests/Issues/ReturnEmptyNodes/Source/ReturnEmptyStmtsRector.php +++ b/tests/Issues/ReturnEmptyNodes/Source/ReturnEmptyStmtsRector.php @@ -7,7 +7,7 @@ use PhpParser\Node; use PhpParser\Node\Stmt\If_; use Rector\Rector\AbstractRector; -use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use Rector\RuleDoc\RuleDefinition; final class ReturnEmptyStmtsRector extends AbstractRector { diff --git a/tests/Rector/RectorRunner/Source/ReturnNullRector.php b/tests/Rector/RectorRunner/Source/ReturnNullRector.php index d791264d0c2..195c81c87f3 100644 --- a/tests/Rector/RectorRunner/Source/ReturnNullRector.php +++ b/tests/Rector/RectorRunner/Source/ReturnNullRector.php @@ -7,8 +7,8 @@ use PhpParser\Node; use PhpParser\Node\Stmt\Class_; use Rector\Rector\AbstractRector; -use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; -use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use Rector\RuleDoc\CodeSample\CodeSample; +use Rector\RuleDoc\RuleDefinition; final class ReturnNullRector extends AbstractRector { diff --git a/tests/Testing/RectorRuleShouldNotBeApplied/Source/NoChangeRector.php b/tests/Testing/RectorRuleShouldNotBeApplied/Source/NoChangeRector.php index 041ee9e7976..72b4ba90bf3 100644 --- a/tests/Testing/RectorRuleShouldNotBeApplied/Source/NoChangeRector.php +++ b/tests/Testing/RectorRuleShouldNotBeApplied/Source/NoChangeRector.php @@ -7,7 +7,7 @@ use PhpParser\Node; use PhpParser\Node\Stmt\Class_; use Rector\Rector\AbstractRector; -use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use Rector\RuleDoc\RuleDefinition; final class NoChangeRector extends AbstractRector { diff --git a/tests/VersionBonding/Fixture/ComposerPackageConstraintRector.php b/tests/VersionBonding/Fixture/ComposerPackageConstraintRector.php index 5dfe01c2425..6e21288a63a 100644 --- a/tests/VersionBonding/Fixture/ComposerPackageConstraintRector.php +++ b/tests/VersionBonding/Fixture/ComposerPackageConstraintRector.php @@ -8,7 +8,7 @@ use Rector\Rector\AbstractRector; use Rector\VersionBonding\Contract\ComposerPackageConstraintInterface; use Rector\VersionBonding\ValueObject\ComposerPackageConstraint; -use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use Rector\RuleDoc\RuleDefinition; final class ComposerPackageConstraintRector extends AbstractRector implements ComposerPackageConstraintInterface { diff --git a/tests/VersionBonding/Fixture/ComposerPackageConstraintsRector.php b/tests/VersionBonding/Fixture/ComposerPackageConstraintsRector.php index c075d8c2cd6..09f81e8ad5f 100644 --- a/tests/VersionBonding/Fixture/ComposerPackageConstraintsRector.php +++ b/tests/VersionBonding/Fixture/ComposerPackageConstraintsRector.php @@ -8,7 +8,7 @@ use Rector\Rector\AbstractRector; use Rector\VersionBonding\Contract\ComposerPackageConstraintInterface; use Rector\VersionBonding\ValueObject\ComposerPackageConstraint; -use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use Rector\RuleDoc\RuleDefinition; final class ComposerPackageConstraintsRector extends AbstractRector implements ComposerPackageConstraintInterface { diff --git a/tests/VersionBonding/Fixture/NoInterfaceRector.php b/tests/VersionBonding/Fixture/NoInterfaceRector.php index 18dd4921276..20ee03127b6 100644 --- a/tests/VersionBonding/Fixture/NoInterfaceRector.php +++ b/tests/VersionBonding/Fixture/NoInterfaceRector.php @@ -6,7 +6,7 @@ use PhpParser\Node; use Rector\Rector\AbstractRector; -use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use Rector\RuleDoc\RuleDefinition; final class NoInterfaceRector extends AbstractRector { diff --git a/tests/VersionBonding/Fixture/PolyfillPhp83Rector.php b/tests/VersionBonding/Fixture/PolyfillPhp83Rector.php index 0cd2a169709..f1ce5d188bd 100644 --- a/tests/VersionBonding/Fixture/PolyfillPhp83Rector.php +++ b/tests/VersionBonding/Fixture/PolyfillPhp83Rector.php @@ -10,7 +10,7 @@ use Rector\ValueObject\PolyfillPackage; use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Rector\VersionBonding\Contract\RelatedPolyfillInterface; -use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; +use Rector\RuleDoc\RuleDefinition; final class PolyfillPhp83Rector extends AbstractRector implements MinPhpVersionInterface, RelatedPolyfillInterface { From eb89b797418d3fc1ada73e908f801c29596bcd2f Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Fri, 16 Oct 2026 12:37:13 +0200 Subject: [PATCH 2/3] Declare array shapes on positional tuple returns for new RequireArrayShapeReturnRule --- rules/Php70/EregToPcreTransformer.php | 6 +++--- .../StaticDoctrineAnnotationParser/ArrayParser.php | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/rules/Php70/EregToPcreTransformer.php b/rules/Php70/EregToPcreTransformer.php index 4c28dc7d36b..b2ef75e1c13 100644 --- a/rules/Php70/EregToPcreTransformer.php +++ b/rules/Php70/EregToPcreTransformer.php @@ -90,7 +90,7 @@ public function transform(string $content, bool $ignorecase): string /** * Recursively converts ERE into PCRE, starting at the position $i. * - * @return float[]|int[]|string[] + * @return array{string, int} */ private function _ere2pcre(string $content, int $i): array { @@ -223,7 +223,7 @@ private function processBracket(string $content, int $i, int $l, array &$r, int } /** - * @return float[]|int[]|string[] + * @return array{string, int} */ private function processSquareBracket(string $s, int $i, int $l, string $cls, bool $start): array { @@ -313,7 +313,7 @@ private function processCurlyBracket(string $s, int $i, array &$r, int $rr): int } /** - * @return int[]|string[] + * @return array{string, int} */ private function processCharacterClass(string $content, int $i, string $cls): array { diff --git a/src/BetterPhpDocParser/PhpDocParser/StaticDoctrineAnnotationParser/ArrayParser.php b/src/BetterPhpDocParser/PhpDocParser/StaticDoctrineAnnotationParser/ArrayParser.php index e9940c8b7dd..ad0c5b2955e 100644 --- a/src/BetterPhpDocParser/PhpDocParser/StaticDoctrineAnnotationParser/ArrayParser.php +++ b/src/BetterPhpDocParser/PhpDocParser/StaticDoctrineAnnotationParser/ArrayParser.php @@ -107,7 +107,7 @@ public function createArrayFromValues(array $values): array /** * Mimics https://github.com/doctrine/annotations/blob/c66f06b7c83e9a2a7523351a9d5a4b55f885e574/lib/Doctrine/Common/Annotations/DocParser.php#L1354-L1385 - * @return array + * @return array{mixed, mixed} */ private function resolveArrayItem(BetterTokenIterator $tokenIterator, Node $currentPhpNode): array { From bfda3efd81606f02b612d58f78720cab8c12bf1a Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Fri, 16 Oct 2026 21:06:49 +0200 Subject: [PATCH 3/3] Remove stale offsetAccess ignore now covered by array shape --- phpstan.neon | 5 ----- 1 file changed, 5 deletions(-) diff --git a/phpstan.neon b/phpstan.neon index c90b9ba3ba0..6b12b4d71f5 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -189,11 +189,6 @@ parameters: identifier: offsetAccess.nonArray path: src/PhpParser/NodeTraverser/RectorNodeTraverser.php - - - identifier: offsetAccess.notFound - message: '#Offset float\|int\|string might not exist on string#' - path: rules/Php70/EregToPcreTransformer.php - # phpstan internalls - identifier: phpstanApi.class - identifier: phpstanApi.classConstant