Updated Rector to commit bcb51e81bc9cbc667017eea9240d7f8564848768

bcb51e81bc [Renaming] Deprecate PseudoNamespaceToNamespaceRector as too dynamic and unreliable, use the RenameClassRector instead (#4755)
This commit is contained in:
Tomas Votruba 2023-08-10 11:47:33 +00:00
parent dde9963adf
commit 50e22e8613
14 changed files with 154 additions and 293 deletions

View File

@ -110,7 +110,6 @@ return static function (RectorConfig $rectorConfig) : void {
__DIR__ . '/../packages/PhpDocParser/PhpDocParser/PhpDocNodeVisitor/CallablePhpDocNodeVisitor.php',
__DIR__ . '/../packages/PHPStanStaticTypeMapper/Enum',
__DIR__ . '/../packages/Caching/Cache.php',
__DIR__ . '/../packages/NodeTypeResolver/PhpDocNodeVisitor/UnderscoreRenamePhpDocNodeVisitor.php',
__DIR__ . '/../packages/NodeTypeResolver/PHPStan/ObjectWithoutClassTypeWithParentTypes.php',
// used in PHPStan
__DIR__ . '/../packages/NodeTypeResolver/Reflection/BetterReflection/RectorBetterReflectionSourceLocatorFactory.php',

View File

@ -1,33 +0,0 @@
<?php
declare (strict_types=1);
namespace Rector\NodeTypeResolver\PhpDoc;
use PhpParser\Node;
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo;
use Rector\NodeTypeResolver\PhpDocNodeVisitor\UnderscoreRenamePhpDocNodeVisitor;
use Rector\PhpDocParser\PhpDocParser\PhpDocNodeTraverser;
use Rector\Renaming\ValueObject\PseudoNamespaceToNamespace;
use Rector\StaticTypeMapper\StaticTypeMapper;
final class PhpDocTypeRenamer
{
/**
* @readonly
* @var \Rector\StaticTypeMapper\StaticTypeMapper
*/
private $staticTypeMapper;
public function __construct(StaticTypeMapper $staticTypeMapper)
{
$this->staticTypeMapper = $staticTypeMapper;
}
public function changeUnderscoreType(PhpDocInfo $phpDocInfo, Node $node, PseudoNamespaceToNamespace $pseudoNamespaceToNamespace) : bool
{
$phpDocNode = $phpDocInfo->getPhpDocNode();
$underscoreRenamePhpDocNodeVisitor = new UnderscoreRenamePhpDocNodeVisitor($this->staticTypeMapper, $pseudoNamespaceToNamespace, $node);
$phpDocNodeTraverser = new PhpDocNodeTraverser();
$phpDocNodeTraverser->addPhpDocNodeVisitor($underscoreRenamePhpDocNodeVisitor);
$phpDocNodeTraverser->traverse($phpDocNode);
// has changed?
return $underscoreRenamePhpDocNodeVisitor->hasChanged();
}
}

View File

@ -1,78 +0,0 @@
<?php
declare (strict_types=1);
namespace Rector\NodeTypeResolver\PhpDocNodeVisitor;
use RectorPrefix202308\Nette\Utils\Strings;
use PHPStan\PhpDocParser\Ast\Node;
use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
use PHPStan\Type\ObjectType;
use Rector\PhpDocParser\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor;
use Rector\Renaming\ValueObject\PseudoNamespaceToNamespace;
use Rector\StaticTypeMapper\StaticTypeMapper;
final class UnderscoreRenamePhpDocNodeVisitor extends AbstractPhpDocNodeVisitor
{
/**
* @readonly
* @var \Rector\StaticTypeMapper\StaticTypeMapper
*/
private $staticTypeMapper;
/**
* @readonly
* @var \Rector\Renaming\ValueObject\PseudoNamespaceToNamespace
*/
private $pseudoNamespaceToNamespace;
/**
* @readonly
* @var \PhpParser\Node
*/
private $phpNode;
/**
* @var bool
*/
private $hasChanged = \false;
public function __construct(StaticTypeMapper $staticTypeMapper, PseudoNamespaceToNamespace $pseudoNamespaceToNamespace, \PhpParser\Node $phpNode)
{
$this->staticTypeMapper = $staticTypeMapper;
$this->pseudoNamespaceToNamespace = $pseudoNamespaceToNamespace;
$this->phpNode = $phpNode;
}
public function beforeTraverse(Node $node) : void
{
$this->hasChanged = \false;
}
public function enterNode(Node $node) : ?Node
{
if (!$node instanceof IdentifierTypeNode) {
return null;
}
if ($this->shouldSkip($node, $this->phpNode, $this->pseudoNamespaceToNamespace)) {
return null;
}
/** @var IdentifierTypeNode $node */
$staticType = $this->staticTypeMapper->mapPHPStanPhpDocTypeNodeToPHPStanType($node, $this->phpNode);
if (!$staticType instanceof ObjectType) {
return null;
}
$this->hasChanged = \true;
// change underscore to \\
$slashedName = '\\' . Strings::replace($staticType->getClassName(), '#_#', '\\');
return new IdentifierTypeNode($slashedName);
}
public function hasChanged() : bool
{
return $this->hasChanged;
}
private function shouldSkip(IdentifierTypeNode $identifierTypeNode, \PhpParser\Node $phpParserNode, PseudoNamespaceToNamespace $pseudoNamespaceToNamespace) : bool
{
$staticType = $this->staticTypeMapper->mapPHPStanPhpDocTypeNodeToPHPStanType($identifierTypeNode, $phpParserNode);
if (!$staticType instanceof ObjectType) {
return \true;
}
if (\strncmp($staticType->getClassName(), $pseudoNamespaceToNamespace->getNamespacePrefix(), \strlen($pseudoNamespaceToNamespace->getNamespacePrefix())) !== 0) {
return \true;
}
// excluded?
return \in_array($staticType->getClassName(), $pseudoNamespaceToNamespace->getExcludedClasses(), \true);
}
}

View File

@ -3,51 +3,19 @@
declare (strict_types=1);
namespace Rector\Renaming\Rector\FileWithoutNamespace;
use RectorPrefix202308\Nette\Utils\Strings;
use PhpParser\Node;
use PhpParser\Node\FunctionLike;
use PhpParser\Node\Identifier;
use PhpParser\Node\Name;
use PhpParser\Node\Name\FullyQualified;
use PhpParser\Node\Stmt;
use PhpParser\Node\Stmt\Namespace_;
use PhpParser\Node\Stmt\Property;
use Rector\Core\Contract\Rector\ConfigurableRectorInterface;
use Rector\Core\Exception\ShouldNotHappenException;
use Rector\Core\PhpParser\Node\CustomNode\FileWithoutNamespace;
use Rector\Core\Rector\AbstractRector;
use Rector\NodeTypeResolver\PhpDoc\PhpDocTypeRenamer;
use Rector\Renaming\ValueObject\PseudoNamespaceToNamespace;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
use RectorPrefix202308\Webmozart\Assert\Assert;
/**
* @see \Rector\Tests\Renaming\Rector\FileWithoutNamespace\PseudoNamespaceToNamespaceRector\PseudoNamespaceToNamespaceRectorTest
* @api deprecated and soon to be removed
*/
final class PseudoNamespaceToNamespaceRector extends AbstractRector implements ConfigurableRectorInterface
{
/**
* @readonly
* @var \Rector\NodeTypeResolver\PhpDoc\PhpDocTypeRenamer
*/
private $phpDocTypeRenamer;
/**
* @see https://regex101.com/r/chvLgs/1/
* @var string
*/
private const SPLIT_BY_UNDERSCORE_REGEX = '#([a-zA-Z])(_)?(_)([a-zA-Z])#';
/**
* @var PseudoNamespaceToNamespace[]
*/
private $pseudoNamespacesToNamespaces = [];
/**
* @var string|null
*/
private $newNamespace;
public function __construct(PhpDocTypeRenamer $phpDocTypeRenamer)
{
$this->phpDocTypeRenamer = $phpDocTypeRenamer;
}
public function getRuleDefinition() : RuleDefinition
{
return new RuleDefinition('Replaces defined Pseudo_Namespaces by Namespace\\Ones.', [new ConfiguredCodeSample(<<<'CODE_SAMPLE'
@ -75,132 +43,16 @@ CODE_SAMPLE
*/
public function refactor(Node $node) : ?Node
{
$this->newNamespace = null;
if ($node instanceof FileWithoutNamespace) {
return $this->refactorFileWithoutNamespace($node);
}
return $this->refactorNamespace($node);
$errorMessage = \sprintf('Rule "%s" is deprecated, as unreliable and too dynamic. Use more robuts RenameClassRector instead.', self::class);
\trigger_error($errorMessage, \E_USER_WARNING);
\sleep(3);
return null;
}
/**
* @param mixed[] $configuration
*/
public function configure(array $configuration) : void
{
Assert::allIsAOf($configuration, PseudoNamespaceToNamespace::class);
$this->pseudoNamespacesToNamespaces = $configuration;
}
/**
* @param Stmt[] $stmts
* @return Stmt[]|null
*/
private function refactorStmts(array $stmts) : ?array
{
$hasChanged = \false;
$this->traverseNodesWithCallable($stmts, function (Node $node) use(&$hasChanged) : ?Node {
if (!$node instanceof Name && !$node instanceof Identifier && !$node instanceof Property && !$node instanceof FunctionLike) {
return null;
}
if ($this->refactorPhpDoc($node)) {
$hasChanged = \true;
}
// @todo - update rule to allow for bool instanceof check
if ($node instanceof Name || $node instanceof Identifier) {
$changedNode = $this->processNameOrIdentifier($node);
if ($changedNode instanceof Node) {
$hasChanged = \true;
return $changedNode;
}
}
return null;
});
if ($hasChanged) {
return $stmts;
}
return null;
}
/**
* @return Identifier|Name|null
* @param \PhpParser\Node\Name|\PhpParser\Node\Identifier $node
*/
private function processNameOrIdentifier($node) : ?Node
{
// no name → skip
if ($node->toString() === '') {
return null;
}
foreach ($this->pseudoNamespacesToNamespaces as $pseudoNamespaceToNamespace) {
if (!$this->isName($node, $pseudoNamespaceToNamespace->getNamespacePrefix() . '*')) {
continue;
}
$excludedClasses = $pseudoNamespaceToNamespace->getExcludedClasses();
if ($excludedClasses !== [] && $this->isNames($node, $excludedClasses)) {
return null;
}
if ($node instanceof Name) {
return $this->processName($node);
}
return $this->processIdentifier($node);
}
return null;
}
private function processName(Name $name) : Name
{
$nodeName = $this->getName($name);
return $name instanceof FullyQualified ? new FullyQualified(\explode('_', $nodeName), $name->getAttributes()) : new Name(\explode('_', $nodeName), $name->getAttributes());
}
private function processIdentifier(Identifier $identifier) : ?Identifier
{
$name = $this->getName($identifier);
if ($name === null) {
return null;
}
/** @var string $namespaceName */
$namespaceName = Strings::before($name, '_', -1);
/** @var string $lastNewNamePart */
$lastNewNamePart = Strings::after($name, '_', -1);
$newNamespace = Strings::replace($namespaceName, self::SPLIT_BY_UNDERSCORE_REGEX, '$1$2\\\\$4');
if ($this->newNamespace !== null && $this->newNamespace !== $newNamespace) {
throw new ShouldNotHappenException('There cannot be 2 different namespaces in one file');
}
$this->newNamespace = $newNamespace;
$identifier->name = $lastNewNamePart;
return $identifier;
}
private function refactorNamespace(Namespace_ $namespace) : ?Namespace_
{
$changedStmts = $this->refactorStmts($namespace->stmts);
if ($changedStmts === null) {
return null;
}
return $namespace;
}
/**
* @param \PhpParser\Node\Name|\PhpParser\Node\FunctionLike|\PhpParser\Node\Identifier|\PhpParser\Node\Stmt\Property $node
*/
private function refactorPhpDoc($node) : bool
{
$hasChanged = \false;
$phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node);
// replace on @var/@param/@return/@throws
foreach ($this->pseudoNamespacesToNamespaces as $pseudoNamespaceToNamespace) {
$hasDocTypeChanged = $this->phpDocTypeRenamer->changeUnderscoreType($phpDocInfo, $node, $pseudoNamespaceToNamespace);
if ($hasDocTypeChanged) {
$hasChanged = \true;
}
}
return $hasChanged;
}
private function refactorFileWithoutNamespace(FileWithoutNamespace $fileWithoutNamespace) : ?Namespace_
{
$changedStmts = $this->refactorStmts($fileWithoutNamespace->stmts);
if ($changedStmts === null) {
return null;
}
$fileWithoutNamespace->stmts = $changedStmts;
// add a new namespace?
if ($this->newNamespace !== null) {
return new Namespace_(new Name($this->newNamespace), $changedStmts);
}
return null;
// for BC
}
}

View File

@ -3,6 +3,9 @@
declare (strict_types=1);
namespace Rector\Renaming\ValueObject;
/**
* @api deprecated, soon to be removed
*/
final class PseudoNamespaceToNamespace
{
/**

View File

@ -19,12 +19,12 @@ final class VersionResolver
* @api
* @var string
*/
public const PACKAGE_VERSION = 'f294e6df400814dbd8125ba141b16d96930716c5';
public const PACKAGE_VERSION = 'bcb51e81bc9cbc667017eea9240d7f8564848768';
/**
* @api
* @var string
*/
public const RELEASE_DATE = '2023-08-10 11:10:16';
public const RELEASE_DATE = '2023-08-10 12:44:08';
/**
* @var int
*/

2
vendor/autoload.php vendored
View File

@ -22,4 +22,4 @@ if (PHP_VERSION_ID < 50600) {
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit6d3b3aba1b36e46f7d925f0c660f452e::getLoader();
return ComposerAutoloaderInit474f93b1535aa0fa14eb116db0880ba2::getLoader();

View File

@ -1982,11 +1982,9 @@ return array(
'Rector\\NodeTypeResolver\\PHPStan\\Type\\TypeFactory' => $baseDir . '/packages/NodeTypeResolver/PHPStan/Type/TypeFactory.php',
'Rector\\NodeTypeResolver\\PhpDocNodeVisitor\\ClassRenamePhpDocNodeVisitor' => $baseDir . '/packages/NodeTypeResolver/PhpDocNodeVisitor/ClassRenamePhpDocNodeVisitor.php',
'Rector\\NodeTypeResolver\\PhpDocNodeVisitor\\NameImportingPhpDocNodeVisitor' => $baseDir . '/packages/NodeTypeResolver/PhpDocNodeVisitor/NameImportingPhpDocNodeVisitor.php',
'Rector\\NodeTypeResolver\\PhpDocNodeVisitor\\UnderscoreRenamePhpDocNodeVisitor' => $baseDir . '/packages/NodeTypeResolver/PhpDocNodeVisitor/UnderscoreRenamePhpDocNodeVisitor.php',
'Rector\\NodeTypeResolver\\PhpDoc\\NodeAnalyzer\\DocBlockClassRenamer' => $baseDir . '/packages/NodeTypeResolver/PhpDoc/NodeAnalyzer/DocBlockClassRenamer.php',
'Rector\\NodeTypeResolver\\PhpDoc\\NodeAnalyzer\\DocBlockNameImporter' => $baseDir . '/packages/NodeTypeResolver/PhpDoc/NodeAnalyzer/DocBlockNameImporter.php',
'Rector\\NodeTypeResolver\\PhpDoc\\NodeAnalyzer\\DocBlockTagReplacer' => $baseDir . '/packages/NodeTypeResolver/PhpDoc/NodeAnalyzer/DocBlockTagReplacer.php',
'Rector\\NodeTypeResolver\\PhpDoc\\PhpDocTypeRenamer' => $baseDir . '/packages/NodeTypeResolver/PhpDoc/PhpDocTypeRenamer.php',
'Rector\\NodeTypeResolver\\Reflection\\BetterReflection\\RectorBetterReflectionSourceLocatorFactory' => $baseDir . '/packages/NodeTypeResolver/Reflection/BetterReflection/RectorBetterReflectionSourceLocatorFactory.php',
'Rector\\NodeTypeResolver\\Reflection\\BetterReflection\\SourceLocatorProvider\\DynamicSourceLocatorProvider' => $baseDir . '/packages/NodeTypeResolver/Reflection/BetterReflection/SourceLocatorProvider/DynamicSourceLocatorProvider.php',
'Rector\\NodeTypeResolver\\Reflection\\BetterReflection\\SourceLocator\\IntermediateSourceLocator' => $baseDir . '/packages/NodeTypeResolver/Reflection/BetterReflection/SourceLocator/IntermediateSourceLocator.php',

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
class ComposerAutoloaderInit6d3b3aba1b36e46f7d925f0c660f452e
class ComposerAutoloaderInit474f93b1535aa0fa14eb116db0880ba2
{
private static $loader;
@ -22,17 +22,17 @@ class ComposerAutoloaderInit6d3b3aba1b36e46f7d925f0c660f452e
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInit6d3b3aba1b36e46f7d925f0c660f452e', 'loadClassLoader'), true, true);
spl_autoload_register(array('ComposerAutoloaderInit474f93b1535aa0fa14eb116db0880ba2', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInit6d3b3aba1b36e46f7d925f0c660f452e', 'loadClassLoader'));
spl_autoload_unregister(array('ComposerAutoloaderInit474f93b1535aa0fa14eb116db0880ba2', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit6d3b3aba1b36e46f7d925f0c660f452e::getInitializer($loader));
call_user_func(\Composer\Autoload\ComposerStaticInit474f93b1535aa0fa14eb116db0880ba2::getInitializer($loader));
$loader->setClassMapAuthoritative(true);
$loader->register(true);
$filesToLoad = \Composer\Autoload\ComposerStaticInit6d3b3aba1b36e46f7d925f0c660f452e::$files;
$filesToLoad = \Composer\Autoload\ComposerStaticInit474f93b1535aa0fa14eb116db0880ba2::$files;
$requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;

View File

@ -4,7 +4,7 @@
namespace Composer\Autoload;
class ComposerStaticInit6d3b3aba1b36e46f7d925f0c660f452e
class ComposerStaticInit474f93b1535aa0fa14eb116db0880ba2
{
public static $files = array (
'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php',
@ -2236,11 +2236,9 @@ class ComposerStaticInit6d3b3aba1b36e46f7d925f0c660f452e
'Rector\\NodeTypeResolver\\PHPStan\\Type\\TypeFactory' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/PHPStan/Type/TypeFactory.php',
'Rector\\NodeTypeResolver\\PhpDocNodeVisitor\\ClassRenamePhpDocNodeVisitor' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/PhpDocNodeVisitor/ClassRenamePhpDocNodeVisitor.php',
'Rector\\NodeTypeResolver\\PhpDocNodeVisitor\\NameImportingPhpDocNodeVisitor' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/PhpDocNodeVisitor/NameImportingPhpDocNodeVisitor.php',
'Rector\\NodeTypeResolver\\PhpDocNodeVisitor\\UnderscoreRenamePhpDocNodeVisitor' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/PhpDocNodeVisitor/UnderscoreRenamePhpDocNodeVisitor.php',
'Rector\\NodeTypeResolver\\PhpDoc\\NodeAnalyzer\\DocBlockClassRenamer' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/PhpDoc/NodeAnalyzer/DocBlockClassRenamer.php',
'Rector\\NodeTypeResolver\\PhpDoc\\NodeAnalyzer\\DocBlockNameImporter' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/PhpDoc/NodeAnalyzer/DocBlockNameImporter.php',
'Rector\\NodeTypeResolver\\PhpDoc\\NodeAnalyzer\\DocBlockTagReplacer' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/PhpDoc/NodeAnalyzer/DocBlockTagReplacer.php',
'Rector\\NodeTypeResolver\\PhpDoc\\PhpDocTypeRenamer' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/PhpDoc/PhpDocTypeRenamer.php',
'Rector\\NodeTypeResolver\\Reflection\\BetterReflection\\RectorBetterReflectionSourceLocatorFactory' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/Reflection/BetterReflection/RectorBetterReflectionSourceLocatorFactory.php',
'Rector\\NodeTypeResolver\\Reflection\\BetterReflection\\SourceLocatorProvider\\DynamicSourceLocatorProvider' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/Reflection/BetterReflection/SourceLocatorProvider/DynamicSourceLocatorProvider.php',
'Rector\\NodeTypeResolver\\Reflection\\BetterReflection\\SourceLocator\\IntermediateSourceLocator' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/Reflection/BetterReflection/SourceLocator/IntermediateSourceLocator.php',
@ -3002,9 +3000,9 @@ class ComposerStaticInit6d3b3aba1b36e46f7d925f0c660f452e
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInit6d3b3aba1b36e46f7d925f0c660f452e::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit6d3b3aba1b36e46f7d925f0c660f452e::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit6d3b3aba1b36e46f7d925f0c660f452e::$classMap;
$loader->prefixLengthsPsr4 = ComposerStaticInit474f93b1535aa0fa14eb116db0880ba2::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit474f93b1535aa0fa14eb116db0880ba2::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit474f93b1535aa0fa14eb116db0880ba2::$classMap;
}, null, ClassLoader::class);
}

View File

@ -2058,12 +2058,12 @@
"source": {
"type": "git",
"url": "https:\/\/github.com\/rectorphp\/rector-phpunit.git",
"reference": "7b5dd42c595409787a37b6d171f893b8c33255df"
"reference": "14f0412eae74810120e4dd4916d49512e0fd5e60"
},
"dist": {
"type": "zip",
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-phpunit\/zipball\/7b5dd42c595409787a37b6d171f893b8c33255df",
"reference": "7b5dd42c595409787a37b6d171f893b8c33255df",
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-phpunit\/zipball\/14f0412eae74810120e4dd4916d49512e0fd5e60",
"reference": "14f0412eae74810120e4dd4916d49512e0fd5e60",
"shasum": ""
},
"require": {
@ -2092,7 +2092,7 @@
"tomasvotruba\/type-coverage": "^0.1",
"tomasvotruba\/unused-public": "^0.1"
},
"time": "2023-08-09T12:38:39+00:00",
"time": "2023-08-10T11:29:45+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/vendor/rector/rector-doctrine', 'relative_install_path' => '../../rector-doctrine', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main d09e0f3'), 'rector/rector-downgrade-php' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-downgrade-php', 'relative_install_path' => '../../rector-downgrade-php', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main 44cec67'), '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' => 'dev-main 7b5dd42'), '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' => 'dev-main c6b7ee7'));
public const EXTENSIONS = array('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' => 'dev-main d09e0f3'), 'rector/rector-downgrade-php' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-downgrade-php', 'relative_install_path' => '../../rector-downgrade-php', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main 44cec67'), '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' => 'dev-main 14f0412'), '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' => 'dev-main c6b7ee7'));
private function __construct()
{
}

View File

@ -8,18 +8,140 @@ use Rector\PHPUnit\PHPUnit60\Rector\ClassMethod\AddDoesNotPerformAssertionToNonA
use Rector\PHPUnit\PHPUnit60\Rector\ClassMethod\ExceptionAnnotationRector;
use Rector\PHPUnit\PHPUnit60\Rector\MethodCall\DelegateExceptionArgumentsRector;
use Rector\PHPUnit\PHPUnit60\Rector\MethodCall\GetMockBuilderGetMockToCreateMockRector;
use Rector\Renaming\Rector\FileWithoutNamespace\PseudoNamespaceToNamespaceRector;
use Rector\Renaming\Rector\MethodCall\RenameMethodRector;
use Rector\Renaming\Rector\Name\RenameClassRector;
use Rector\Renaming\ValueObject\MethodCallRename;
use Rector\Renaming\ValueObject\PseudoNamespaceToNamespace;
return static function (RectorConfig $rectorConfig) : void {
// handles 2nd and 3rd argument of setExpectedException
$rectorConfig->rules([DelegateExceptionArgumentsRector::class, ExceptionAnnotationRector::class, AddDoesNotPerformAssertionToNonAssertingTestRector::class, GetMockBuilderGetMockToCreateMockRector::class]);
$rectorConfig->ruleWithConfiguration(RenameMethodRector::class, [new MethodCallRename('PHPUnit\\Framework\\TestClass', 'setExpectedException', 'expectedException'), new MethodCallRename('PHPUnit\\Framework\\TestClass', 'setExpectedExceptionRegExp', 'expectedException'), new MethodCallRename('PHPUnit\\Framework\\TestCase', 'createMockBuilder', 'getMockBuilder')]);
$rectorConfig->ruleWithConfiguration(RenameClassRector::class, ['PHPUnit_Framework_MockObject_Stub' => 'PHPUnit\\Framework\\MockObject\\Stub', 'PHPUnit_Framework_MockObject_Stub_Return' => 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub', 'PHPUnit_Framework_MockObject_Matcher_Parameters' => 'PHPUnit\\Framework\\MockObject\\Matcher\\Parameters', 'PHPUnit_Framework_MockObject_Matcher_Invocation' => 'PHPUnit\\Framework\\MockObject\\Matcher\\Invocation', 'PHPUnit_Framework_MockObject_MockObject' => 'PHPUnit\\Framework\\MockObject\\MockObject', 'PHPUnit_Framework_MockObject_Invocation_Object' => 'PHPUnit\\Framework\\MockObject\\Invocation\\ObjectInvocation']);
$rectorConfig->ruleWithConfiguration(PseudoNamespaceToNamespaceRector::class, [
$rectorConfig->ruleWithConfiguration(RenameClassRector::class, [
// ref. https://github.com/sebastianbergmann/phpunit/compare/5.7.9...6.0.0
new PseudoNamespaceToNamespace('PHPUnit_', ['PHPUnit_Framework_MockObject_MockObject', 'PHPUnit_Framework_MockObject_Invocation_Object', 'PHPUnit_Framework_MockObject_Matcher_Invocation', 'PHPUnit_Framework_MockObject_Matcher_Parameters', 'PHPUnit_Framework_MockObject_Stub_Return', 'PHPUnit_Framework_MockObject_Stub']),
'PHPUnit_Framework_MockObject_Stub' => 'PHPUnit\\Framework\\MockObject\\Stub',
'PHPUnit_Framework_MockObject_Stub_Return' => 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub',
'PHPUnit_Framework_MockObject_Matcher_Parameters' => 'PHPUnit\\Framework\\MockObject\\Matcher\\Parameters',
'PHPUnit_Framework_MockObject_Matcher_Invocation' => 'PHPUnit\\Framework\\MockObject\\Matcher\\Invocation',
'PHPUnit_Framework_MockObject_MockObject' => 'PHPUnit\\Framework\\MockObject\\MockObject',
'PHPUnit_Framework_MockObject_Invocation_Object' => 'PHPUnit\\Framework\\MockObject\\Invocation\\ObjectInvocation',
'PHPUnit_Framework_Assert' => 'PHPUnit\\Framework\\Assert',
'PHPUnit_Framework_AssertionFailedError' => 'PHPUnit\\Framework\\AssertionFailedError',
'PHPUnit_Framework_BaseTestListener' => 'PHPUnit\\Framework\\BaseTestListener',
'PHPUnit_Framework_CodeCoverageException' => 'PHPUnit\\Framework\\CodeCoverageException',
'PHPUnit_Exception' => 'PHPUnit\\Exception',
'PHPUnit_Framework_Exception' => 'PHPUnit\\Framework\\Exception',
'PHPUnit_Framework_ExceptionWrapper' => 'PHPUnit\\Framework\\ExceptionWrapper',
'PHPUnit_Framework_ExpectationFailedException' => 'PHPUnit\\Framework\\ExpectationFailedException',
'PHPUnit_Framework_IncompleteTest' => 'PHPUnit\\Framework\\IncompleteTest',
'PHPUnit_Framework_IncompleteTestCase' => 'PHPUnit\\Framework\\IncompleteTestCase',
'PHPUnit_Framework_IncompleteTestError' => 'PHPUnit\\Framework\\IncompleteTestError',
'PHPUnit_Framework_InvalidCoversTargetException' => 'PHPUnit\\Framework\\InvalidCoversTargetException',
'PHPUnit_Framework_OutputError' => 'PHPUnit\\Framework\\OutputError',
'PHPUnit_Framework_CoveredCodeNotExecutedException' => 'PHPUnit\\Framework\\CoveredCodeNotExecutedException',
'PHPUnit_Framework_MissingCoversAnnotationException' => 'PHPUnit\\Framework\\MissingCoversAnnotationException',
'PHPUnit_Framework_RiskyTest' => 'PHPUnit\\Framework\\RiskyTest',
'PHPUnit_Framework_RiskyTestError' => 'PHPUnit\\Framework\\RiskyTestError',
'PHPUnit_Framework_SkippedTest' => 'PHPUnit\\Framework\\SkippedTest',
'PHPUnit_Framework_SkippedTestCase' => 'PHPUnit\\Framework\\SkippedTestCase',
'PHPUnit_Framework_SkippedTestError' => 'PHPUnit\\Framework\\SkippedTestError',
'PHPUnit_Framework_SkippedTestSuiteError' => 'PHPUnit\\Framework\\SkippedTestSuiteError',
'PHPUnit_Framework_SyntheticError' => 'PHPUnit\\Framework\\SyntheticError',
'PHPUnit_Framework_Test' => 'PHPUnit\\Framework\\Test',
'PHPUnit_Framework_TestCase' => 'PHPUnit\\Framework\\TestCase',
'PHPUnit_Framework_TestFailure' => 'PHPUnit\\Framework\\TestFailure',
'PHPUnit_Framework_TestListener' => 'PHPUnit\\Framework\\TestListener',
'PHPUnit_Framework_TestResult' => 'PHPUnit\\Framework\\TestResult',
'PHPUnit_Framework_TestSuite' => 'PHPUnit\\Framework\\TestSuite',
'PHPUnit_Framework_UnintentionallyCoveredCodeError' => 'PHPUnit\\Framework\\UnintentionallyCoveredCodeError',
'PHPUnit_Framework_Warning' => 'PHPUnit\\Framework\\Warning',
'PHPUnit_Framework_WarningTestCase' => 'PHPUnit\\Framework\\WarningTestCase',
'PHPUnit_Framework_Constraint_And' => 'PHPUnit\\Framework\\Constraint\\LogicalAnd',
'PHPUnit_Framework_Constraint_ArrayHasKey' => 'PHPUnit\\Framework\\Constraint\\ArrayHasKey',
'PHPUnit_Framework_Constraint_ArraySubset' => 'PHPUnit\\Framework\\Constraint\\ArraySubset',
'PHPUnit_Framework_Constraint_Attribute' => 'PHPUnit\\Framework\\Constraint\\Attribute',
'PHPUnit_Framework_Constraint_Callback' => 'PHPUnit\\Framework\\Constraint\\Callback',
'PHPUnit_Framework_Constraint_ClassHasAttribute' => 'PHPUnit\\Framework\\Constraint\\ClassHasAttribute',
'PHPUnit_Framework_Constraint_Composite' => 'PHPUnit\\Framework\\Constraint\\Composite',
'PHPUnit_Framework_Constraint_Count' => 'PHPUnit\\Framework\\Constraint\\Count',
'PHPUnit_Framework_Constraint_DirectoryExists' => 'PHPUnit\\Framework\\Constraint\\DirectoryExists',
'PHPUnit_Framework_Constraint' => 'PHPUnit\\Framework\\Constraint\\Constraint',
'PHPUnit_Framework_Constraint_Exception' => 'PHPUnit\\Framework\\Constraint\\Exception',
'PHPUnit_Framework_Constraint_ExceptionCode' => 'PHPUnit\\Framework\\Constraint\\ExceptionCode',
'PHPUnit_Framework_Constraint_ExceptionMessage' => 'PHPUnit\\Framework\\Constraint\\ExceptionMessage',
'PHPUnit_Framework_Constraint_ExceptionMessageRegExp' => 'PHPUnit_Framework_Constraint_ExceptionMessageRegularExpression',
'PHPUnit_Framework_Constraint_FileExists' => 'PHPUnit\\Framework\\Constraint\\FileExists',
'PHPUnit_Framework_Constraint_GreaterThan' => 'PHPUnit\\Framework\\Constraint\\GreaterThan',
'PHPUnit_Framework_Constraint_IsAnything' => 'PHPUnit\\Framework\\Constraint\\IsAnything',
'PHPUnit_Framework_Constraint_IsEmpty' => 'PHPUnit\\Framework\\Constraint\\IsEmpty',
'PHPUnit_Framework_Constraint_IsIdentical' => 'PHPUnit\\Framework\\Constraint\\IsIdentical',
'PHPUnit_Framework_Constraint_IsInfinite' => 'PHPUnit\\Framework\\Constraint\\IsInfinite',
'PHPUnit_Framework_Constraint_IsInstanceOf' => 'PHPUnit\\Framework\\Constraint\\IsInstanceOf',
'PHPUnit_Framework_Constraint_IsJson' => 'PHPUnit\\Framework\\Constraint\\IsJson',
'PHPUnit_Framework_Constraint_IsNan' => 'PHPUnit\\Framework\\Constraint\\IsNan',
'PHPUnit_Framework_Constraint_IsNull' => 'PHPUnit\\Framework\\Constraint\\IsNull',
'PHPUnit_Framework_Constraint_IsReadable' => 'PHPUnit\\Framework\\Constraint\\IsReadable',
'PHPUnit_Framework_Constraint_IsTrue' => 'PHPUnit\\Framework\\Constraint\\IsTrue',
'PHPUnit_Framework_Constraint_IsType' => 'PHPUnit\\Framework\\Constraint\\IsType',
'PHPUnit_Framework_Constraint_IsWritable' => 'PHPUnit\\Framework\\Constraint\\IsWritable',
'PHPUnit_Framework_Constraint_JsonMatches' => 'PHPUnit\\Framework\\Constraint\\JsonMatches',
'PHPUnit_Framework_Constraint_LessThan' => 'PHPUnit\\Framework\\Constraint\\LessThan',
'PHPUnit_Framework_Constraint_Not' => 'PHPUnit\\Framework\\Constraint\\LogicalNot',
'PHPUnit_Framework_Constraint_ObjectHasAttribute' => 'PHPUnit\\Framework\\Constraint\\ObjectHasAttribute',
'PHPUnit_Framework_Constraint_Or' => 'PHPUnit\\Framework\\Constraint\\LogicalOr',
'PHPUnit_Framework_Constraint_PCREMatch' => 'PHPUnit\\Framework\\Constraint\\RegularExpression',
'PHPUnit_Framework_Constraint_SameSize' => 'PHPUnit\\Framework\\Constraint\\SameSize',
'PHPUnit_Framework_Constraint_StringContains' => 'PHPUnit\\Framework\\Constraint\\StringContains',
'PHPUnit_Framework_Constraint_StringEndsWith' => 'PHPUnit\\Framework\\Constraint\\StringEndsWith',
'PHPUnit_Framework_Constraint_StringMatches' => 'PHPUnit\\Framework\\Constraint\\StringMatchesFormatDescription',
'PHPUnit_Framework_Constraint_StringStartsWith' => 'PHPUnit\\Framework\\Constraint\\StringStartsWith',
'PHPUnit_Framework_Constraint_TraversableContains' => 'PHPUnit\\Framework\\Constraint\\TraversableContains',
'PHPUnit_Framework_Constraint_TraversableContainsOnly' => 'PHPUnit\\Framework\\Constraint\\TraversableContainsOnly',
'PHPUnit_Framework_Constraint_Xor' => 'PHPUnit\\Framework\\Constraint\\LogicalXor',
'PHPUnit_Framework_Constraint_JsonMatches_ErrorMessageProvider' => 'PHPUnit\\Framework\\Constraint\\JsonMatchesErrorMessageProvider',
'PHPUnit_Framework_Error_Deprecated' => 'PHPUnit\\Framework\\Error\\Deprecated',
'PHPUnit_Framework_Error_Notice' => 'PHPUnit\\Framework\\Error\\Notice',
'PHPUnit_Framework_Error_Warning' => 'PHPUnit\\Framework\\Error\\Warning',
'PHPUnit_Framework_TestSuite_DataProvider' => 'PHPUnit\\Framework\\DataProviderTestSuite',
'PHPUnit_Framework_Error' => 'PHPUnit\\Framework\\Error\\Error',
'PHPUnit_Runner_BaseTestRunner' => 'PHPUnit\\Runner\\BaseTestRunner',
'PHPUnit_Runner_Exception' => 'PHPUnit\\Runner\\Exception',
'PHPUnit_Runner_PhptTestCase' => 'PHPUnit\\Runner\\PhptTestCase',
'PHPUnit_Runner_StandardTestSuiteLoader' => 'PHPUnit\\Runner\\StandardTestSuiteLoader',
'PHPUnit_Runner_TestSuiteLoader' => 'PHPUnit\\Runner\\TestSuiteLoader',
'PHPUnit_Runner_Version' => 'PHPUnit\\Runner\\Version',
'PHPUnit_Runner_Filter_Factory' => 'PHPUnit\\Runner\\Filter\\Factory',
'PHPUnit_Runner_Filter_GroupFilterIterator' => 'PHPUnit\\Runner\\Filter\\GroupFilterIterator',
'PHPUnit_Runner_Filter_Test' => 'PHPUnit\\Runner\\Filter\\NameFilterIterator',
'PHPUnit_Runner_Filter_Group_Exclude' => 'PHPUnit\\Runner\\Filter\\ExcludeGroupFilterIterator',
'PHPUnit_Runner_Filter_Group_Include' => 'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator',
'PHPUnit_TextUI_Command' => 'PHPUnit\\TextUI\\Command',
'PHPUnit_TextUI_ResultPrinter' => 'PHPUnit\\TextUI\\ResultPrinter',
'PHPUnit_TextUI_TestRunner' => 'PHPUnit\\TextUI\\TestRunner',
'PHPUnit_Util_Blacklist' => 'PHPUnit\\Util\\Blacklist',
'PHPUnit_Util_Configuration' => 'PHPUnit\\Util\\Configuration',
'PHPUnit_Util_ConfigurationGenerator' => 'PHPUnit\\Util\\ConfigurationGenerator',
'PHPUnit_Util_ErrorHandler' => 'PHPUnit\\Util\\ErrorHandler',
'PHPUnit_Util_Fileloader' => 'PHPUnit\\Util\\Fileloader',
'PHPUnit_Util_Filesystem' => 'PHPUnit\\Util\\Filesystem',
'PHPUnit_Util_Filter' => 'PHPUnit\\Util\\Filter',
'PHPUnit_Util_Getopt' => 'PHPUnit\\Util\\Getopt',
'PHPUnit_Util_GlobalState' => 'PHPUnit\\Util\\GlobalState',
'PHPUnit_Util_InvalidArgumentHelper' => 'PHPUnit\\Util\\InvalidArgumentHelper',
'PHPUnit_Util_PHP' => 'PHPUnit\\Util\\PHP\\AbstractPhpProcess',
'PHPUnit_Util_PHP_Default' => 'PHPUnit\\Util\\PHP\\DefaultPhpProcess',
'PHPUnit_Util_PHP_Windows' => 'PHPUnit\\Util\\PHP\\WindowsPhpProcesPhpProcess',
'PHPUnit_Util_Log_JUnit' => 'PHPUnit\\Util\\Log\\JUnit',
'PHPUnit_Util_Log_TeamCity' => 'PHPUnit\\Util\\Log\\TeamCity',
'PHPUnit_Util_TestDox_NamePrettifier' => 'PHPUnit\\Util\\TestDox\\NamePrettifier',
'PHPUnit_Util_TestDox_ResultPrinter' => 'PHPUnit\\Util\\TestDox\\ResultPrinter',
'PHPUnit_Util_TestDox_ResultPrinter_HTML' => 'PHPUnit\\Util\\TestDox\\HtmlResultPrinter',
'PHPUnit_Util_TestDox_ResultPrinter_Text' => 'PHPUnit\\Util\\TestDox\\TextResultPrinter',
'PHPUnit_Util_TestDox_ResultPrinter_XML' => 'PHPUnit\\Util\\TestDox\\XmlResultPrinter',
'PHPUnit_Util_Printer' => 'PHPUnit\\Util\\Printer',
'PHPUnit_Util_Regex' => 'PHPUnit\\Util\\RegularExpression',
'PHPUnit_Util_String' => 'PHPUnit\\Util\\Utf8',
'PHPUnit_Util_XML' => 'PHPUnit\\Util\\XML',
'PHPUnit_Util_TestSuiteIterator' => 'PHPUnit\\Framework\\TestSuiteIterator',
'PHPUnit_Util_Type' => 'PHPUnit\\Util\\Type',
'PHPUnit_Util_Test' => 'PHPUnit\\Util\\Test',
]);
};