Skip to content

Commit 50e22e8

Browse files
committed
Updated Rector to commit bcb51e81bc9cbc667017eea9240d7f8564848768
rectorphp/rector-src@bcb51e8 [Renaming] Deprecate PseudoNamespaceToNamespaceRector as too dynamic and unreliable, use the RenameClassRector instead (#4755)
1 parent dde9963 commit 50e22e8

File tree

14 files changed

+154
-293
lines changed

14 files changed

+154
-293
lines changed

config/config.php

-1
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,6 @@
110110
__DIR__ . '/../packages/PhpDocParser/PhpDocParser/PhpDocNodeVisitor/CallablePhpDocNodeVisitor.php',
111111
__DIR__ . '/../packages/PHPStanStaticTypeMapper/Enum',
112112
__DIR__ . '/../packages/Caching/Cache.php',
113-
__DIR__ . '/../packages/NodeTypeResolver/PhpDocNodeVisitor/UnderscoreRenamePhpDocNodeVisitor.php',
114113
__DIR__ . '/../packages/NodeTypeResolver/PHPStan/ObjectWithoutClassTypeWithParentTypes.php',
115114
// used in PHPStan
116115
__DIR__ . '/../packages/NodeTypeResolver/Reflection/BetterReflection/RectorBetterReflectionSourceLocatorFactory.php',

packages/NodeTypeResolver/PhpDoc/PhpDocTypeRenamer.php

-33
This file was deleted.

packages/NodeTypeResolver/PhpDocNodeVisitor/UnderscoreRenamePhpDocNodeVisitor.php

-78
This file was deleted.

rules/Renaming/Rector/FileWithoutNamespace/PseudoNamespaceToNamespaceRector.php

+6-154
Original file line numberDiff line numberDiff line change
@@ -3,51 +3,19 @@
33
declare (strict_types=1);
44
namespace Rector\Renaming\Rector\FileWithoutNamespace;
55

6-
use RectorPrefix202308\Nette\Utils\Strings;
76
use PhpParser\Node;
8-
use PhpParser\Node\FunctionLike;
9-
use PhpParser\Node\Identifier;
10-
use PhpParser\Node\Name;
11-
use PhpParser\Node\Name\FullyQualified;
12-
use PhpParser\Node\Stmt;
137
use PhpParser\Node\Stmt\Namespace_;
14-
use PhpParser\Node\Stmt\Property;
158
use Rector\Core\Contract\Rector\ConfigurableRectorInterface;
16-
use Rector\Core\Exception\ShouldNotHappenException;
179
use Rector\Core\PhpParser\Node\CustomNode\FileWithoutNamespace;
1810
use Rector\Core\Rector\AbstractRector;
19-
use Rector\NodeTypeResolver\PhpDoc\PhpDocTypeRenamer;
2011
use Rector\Renaming\ValueObject\PseudoNamespaceToNamespace;
2112
use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample;
2213
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
23-
use RectorPrefix202308\Webmozart\Assert\Assert;
2414
/**
25-
* @see \Rector\Tests\Renaming\Rector\FileWithoutNamespace\PseudoNamespaceToNamespaceRector\PseudoNamespaceToNamespaceRectorTest
15+
* @api deprecated and soon to be removed
2616
*/
2717
final class PseudoNamespaceToNamespaceRector extends AbstractRector implements ConfigurableRectorInterface
2818
{
29-
/**
30-
* @readonly
31-
* @var \Rector\NodeTypeResolver\PhpDoc\PhpDocTypeRenamer
32-
*/
33-
private $phpDocTypeRenamer;
34-
/**
35-
* @see https://regex101.com/r/chvLgs/1/
36-
* @var string
37-
*/
38-
private const SPLIT_BY_UNDERSCORE_REGEX = '#([a-zA-Z])(_)?(_)([a-zA-Z])#';
39-
/**
40-
* @var PseudoNamespaceToNamespace[]
41-
*/
42-
private $pseudoNamespacesToNamespaces = [];
43-
/**
44-
* @var string|null
45-
*/
46-
private $newNamespace;
47-
public function __construct(PhpDocTypeRenamer $phpDocTypeRenamer)
48-
{
49-
$this->phpDocTypeRenamer = $phpDocTypeRenamer;
50-
}
5119
public function getRuleDefinition() : RuleDefinition
5220
{
5321
return new RuleDefinition('Replaces defined Pseudo_Namespaces by Namespace\\Ones.', [new ConfiguredCodeSample(<<<'CODE_SAMPLE'
@@ -75,132 +43,16 @@ public function getNodeTypes() : array
7543
*/
7644
public function refactor(Node $node) : ?Node
7745
{
78-
$this->newNamespace = null;
79-
if ($node instanceof FileWithoutNamespace) {
80-
return $this->refactorFileWithoutNamespace($node);
81-
}
82-
return $this->refactorNamespace($node);
46+
$errorMessage = \sprintf('Rule "%s" is deprecated, as unreliable and too dynamic. Use more robuts RenameClassRector instead.', self::class);
47+
\trigger_error($errorMessage, \E_USER_WARNING);
48+
\sleep(3);
49+
return null;
8350
}
8451
/**
8552
* @param mixed[] $configuration
8653
*/
8754
public function configure(array $configuration) : void
8855
{
89-
Assert::allIsAOf($configuration, PseudoNamespaceToNamespace::class);
90-
$this->pseudoNamespacesToNamespaces = $configuration;
91-
}
92-
/**
93-
* @param Stmt[] $stmts
94-
* @return Stmt[]|null
95-
*/
96-
private function refactorStmts(array $stmts) : ?array
97-
{
98-
$hasChanged = \false;
99-
$this->traverseNodesWithCallable($stmts, function (Node $node) use(&$hasChanged) : ?Node {
100-
if (!$node instanceof Name && !$node instanceof Identifier && !$node instanceof Property && !$node instanceof FunctionLike) {
101-
return null;
102-
}
103-
if ($this->refactorPhpDoc($node)) {
104-
$hasChanged = \true;
105-
}
106-
// @todo - update rule to allow for bool instanceof check
107-
if ($node instanceof Name || $node instanceof Identifier) {
108-
$changedNode = $this->processNameOrIdentifier($node);
109-
if ($changedNode instanceof Node) {
110-
$hasChanged = \true;
111-
return $changedNode;
112-
}
113-
}
114-
return null;
115-
});
116-
if ($hasChanged) {
117-
return $stmts;
118-
}
119-
return null;
120-
}
121-
/**
122-
* @return Identifier|Name|null
123-
* @param \PhpParser\Node\Name|\PhpParser\Node\Identifier $node
124-
*/
125-
private function processNameOrIdentifier($node) : ?Node
126-
{
127-
// no name → skip
128-
if ($node->toString() === '') {
129-
return null;
130-
}
131-
foreach ($this->pseudoNamespacesToNamespaces as $pseudoNamespaceToNamespace) {
132-
if (!$this->isName($node, $pseudoNamespaceToNamespace->getNamespacePrefix() . '*')) {
133-
continue;
134-
}
135-
$excludedClasses = $pseudoNamespaceToNamespace->getExcludedClasses();
136-
if ($excludedClasses !== [] && $this->isNames($node, $excludedClasses)) {
137-
return null;
138-
}
139-
if ($node instanceof Name) {
140-
return $this->processName($node);
141-
}
142-
return $this->processIdentifier($node);
143-
}
144-
return null;
145-
}
146-
private function processName(Name $name) : Name
147-
{
148-
$nodeName = $this->getName($name);
149-
return $name instanceof FullyQualified ? new FullyQualified(\explode('_', $nodeName), $name->getAttributes()) : new Name(\explode('_', $nodeName), $name->getAttributes());
150-
}
151-
private function processIdentifier(Identifier $identifier) : ?Identifier
152-
{
153-
$name = $this->getName($identifier);
154-
if ($name === null) {
155-
return null;
156-
}
157-
/** @var string $namespaceName */
158-
$namespaceName = Strings::before($name, '_', -1);
159-
/** @var string $lastNewNamePart */
160-
$lastNewNamePart = Strings::after($name, '_', -1);
161-
$newNamespace = Strings::replace($namespaceName, self::SPLIT_BY_UNDERSCORE_REGEX, '$1$2\\\\$4');
162-
if ($this->newNamespace !== null && $this->newNamespace !== $newNamespace) {
163-
throw new ShouldNotHappenException('There cannot be 2 different namespaces in one file');
164-
}
165-
$this->newNamespace = $newNamespace;
166-
$identifier->name = $lastNewNamePart;
167-
return $identifier;
168-
}
169-
private function refactorNamespace(Namespace_ $namespace) : ?Namespace_
170-
{
171-
$changedStmts = $this->refactorStmts($namespace->stmts);
172-
if ($changedStmts === null) {
173-
return null;
174-
}
175-
return $namespace;
176-
}
177-
/**
178-
* @param \PhpParser\Node\Name|\PhpParser\Node\FunctionLike|\PhpParser\Node\Identifier|\PhpParser\Node\Stmt\Property $node
179-
*/
180-
private function refactorPhpDoc($node) : bool
181-
{
182-
$hasChanged = \false;
183-
$phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node);
184-
// replace on @var/@param/@return/@throws
185-
foreach ($this->pseudoNamespacesToNamespaces as $pseudoNamespaceToNamespace) {
186-
$hasDocTypeChanged = $this->phpDocTypeRenamer->changeUnderscoreType($phpDocInfo, $node, $pseudoNamespaceToNamespace);
187-
if ($hasDocTypeChanged) {
188-
$hasChanged = \true;
189-
}
190-
}
191-
return $hasChanged;
192-
}
193-
private function refactorFileWithoutNamespace(FileWithoutNamespace $fileWithoutNamespace) : ?Namespace_
194-
{
195-
$changedStmts = $this->refactorStmts($fileWithoutNamespace->stmts);
196-
if ($changedStmts === null) {
197-
return null;
198-
}
199-
$fileWithoutNamespace->stmts = $changedStmts;
200-
// add a new namespace?
201-
if ($this->newNamespace !== null) {
202-
return new Namespace_(new Name($this->newNamespace), $changedStmts);
203-
}
204-
return null;
56+
// for BC
20557
}
20658
}

rules/Renaming/ValueObject/PseudoNamespaceToNamespace.php

+3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
declare (strict_types=1);
44
namespace Rector\Renaming\ValueObject;
55

6+
/**
7+
* @api deprecated, soon to be removed
8+
*/
69
final class PseudoNamespaceToNamespace
710
{
811
/**

src/Application/VersionResolver.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ final class VersionResolver
1919
* @api
2020
* @var string
2121
*/
22-
public const PACKAGE_VERSION = 'f294e6df400814dbd8125ba141b16d96930716c5';
22+
public const PACKAGE_VERSION = 'bcb51e81bc9cbc667017eea9240d7f8564848768';
2323
/**
2424
* @api
2525
* @var string
2626
*/
27-
public const RELEASE_DATE = '2023-08-10 11:10:16';
27+
public const RELEASE_DATE = '2023-08-10 12:44:08';
2828
/**
2929
* @var int
3030
*/

vendor/autoload.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,4 @@
2222

2323
require_once __DIR__ . '/composer/autoload_real.php';
2424

25-
return ComposerAutoloaderInit6d3b3aba1b36e46f7d925f0c660f452e::getLoader();
25+
return ComposerAutoloaderInit474f93b1535aa0fa14eb116db0880ba2::getLoader();

vendor/composer/autoload_classmap.php

-2
Original file line numberDiff line numberDiff line change
@@ -1982,11 +1982,9 @@
19821982
'Rector\\NodeTypeResolver\\PHPStan\\Type\\TypeFactory' => $baseDir . '/packages/NodeTypeResolver/PHPStan/Type/TypeFactory.php',
19831983
'Rector\\NodeTypeResolver\\PhpDocNodeVisitor\\ClassRenamePhpDocNodeVisitor' => $baseDir . '/packages/NodeTypeResolver/PhpDocNodeVisitor/ClassRenamePhpDocNodeVisitor.php',
19841984
'Rector\\NodeTypeResolver\\PhpDocNodeVisitor\\NameImportingPhpDocNodeVisitor' => $baseDir . '/packages/NodeTypeResolver/PhpDocNodeVisitor/NameImportingPhpDocNodeVisitor.php',
1985-
'Rector\\NodeTypeResolver\\PhpDocNodeVisitor\\UnderscoreRenamePhpDocNodeVisitor' => $baseDir . '/packages/NodeTypeResolver/PhpDocNodeVisitor/UnderscoreRenamePhpDocNodeVisitor.php',
19861985
'Rector\\NodeTypeResolver\\PhpDoc\\NodeAnalyzer\\DocBlockClassRenamer' => $baseDir . '/packages/NodeTypeResolver/PhpDoc/NodeAnalyzer/DocBlockClassRenamer.php',
19871986
'Rector\\NodeTypeResolver\\PhpDoc\\NodeAnalyzer\\DocBlockNameImporter' => $baseDir . '/packages/NodeTypeResolver/PhpDoc/NodeAnalyzer/DocBlockNameImporter.php',
19881987
'Rector\\NodeTypeResolver\\PhpDoc\\NodeAnalyzer\\DocBlockTagReplacer' => $baseDir . '/packages/NodeTypeResolver/PhpDoc/NodeAnalyzer/DocBlockTagReplacer.php',
1989-
'Rector\\NodeTypeResolver\\PhpDoc\\PhpDocTypeRenamer' => $baseDir . '/packages/NodeTypeResolver/PhpDoc/PhpDocTypeRenamer.php',
19901988
'Rector\\NodeTypeResolver\\Reflection\\BetterReflection\\RectorBetterReflectionSourceLocatorFactory' => $baseDir . '/packages/NodeTypeResolver/Reflection/BetterReflection/RectorBetterReflectionSourceLocatorFactory.php',
19911989
'Rector\\NodeTypeResolver\\Reflection\\BetterReflection\\SourceLocatorProvider\\DynamicSourceLocatorProvider' => $baseDir . '/packages/NodeTypeResolver/Reflection/BetterReflection/SourceLocatorProvider/DynamicSourceLocatorProvider.php',
19921990
'Rector\\NodeTypeResolver\\Reflection\\BetterReflection\\SourceLocator\\IntermediateSourceLocator' => $baseDir . '/packages/NodeTypeResolver/Reflection/BetterReflection/SourceLocator/IntermediateSourceLocator.php',

vendor/composer/autoload_real.php

+5-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
// autoload_real.php @generated by Composer
44

5-
class ComposerAutoloaderInit6d3b3aba1b36e46f7d925f0c660f452e
5+
class ComposerAutoloaderInit474f93b1535aa0fa14eb116db0880ba2
66
{
77
private static $loader;
88

@@ -22,17 +22,17 @@ public static function getLoader()
2222
return self::$loader;
2323
}
2424

25-
spl_autoload_register(array('ComposerAutoloaderInit6d3b3aba1b36e46f7d925f0c660f452e', 'loadClassLoader'), true, true);
25+
spl_autoload_register(array('ComposerAutoloaderInit474f93b1535aa0fa14eb116db0880ba2', 'loadClassLoader'), true, true);
2626
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
27-
spl_autoload_unregister(array('ComposerAutoloaderInit6d3b3aba1b36e46f7d925f0c660f452e', 'loadClassLoader'));
27+
spl_autoload_unregister(array('ComposerAutoloaderInit474f93b1535aa0fa14eb116db0880ba2', 'loadClassLoader'));
2828

2929
require __DIR__ . '/autoload_static.php';
30-
call_user_func(\Composer\Autoload\ComposerStaticInit6d3b3aba1b36e46f7d925f0c660f452e::getInitializer($loader));
30+
call_user_func(\Composer\Autoload\ComposerStaticInit474f93b1535aa0fa14eb116db0880ba2::getInitializer($loader));
3131

3232
$loader->setClassMapAuthoritative(true);
3333
$loader->register(true);
3434

35-
$filesToLoad = \Composer\Autoload\ComposerStaticInit6d3b3aba1b36e46f7d925f0c660f452e::$files;
35+
$filesToLoad = \Composer\Autoload\ComposerStaticInit474f93b1535aa0fa14eb116db0880ba2::$files;
3636
$requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
3737
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
3838
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;

0 commit comments

Comments
 (0)