mirror of
https://github.com/rectorphp/rector.git
synced 2024-06-01 08:50:50 +00:00
Updated Rector to commit 697479f14891c51f53e64144826cbe65e2c48dcc
697479f148
Performance: Improve node name resolver performance (#3506)
This commit is contained in:
parent
8e44614ce3
commit
9d7d2b3376
|
@ -20,6 +20,17 @@ use Rector\NodeNameResolver\Regex\RegexPatternDetector;
|
|||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
final class NodeNameResolver
|
||||
{
|
||||
/**
|
||||
* Used to check if a string might contain a regex or fnmatch pattern
|
||||
*
|
||||
* @var string
|
||||
* @see https://regex101.com/r/ImTV1W/1
|
||||
*/
|
||||
private const CONTAINS_WILDCARD_CHARS_REGEX = '/[\\*\\#\\~\\/]/';
|
||||
/**
|
||||
* @var array<string, NodeNameResolverInterface|null>
|
||||
*/
|
||||
private $nodeNameResolversByClass = [];
|
||||
/**
|
||||
* @readonly
|
||||
* @var \Rector\NodeNameResolver\Regex\RegexPatternDetector
|
||||
|
@ -126,11 +137,9 @@ final class NodeNameResolver
|
|||
}
|
||||
$this->invalidNameNodeReporter->reportInvalidNodeForName($node);
|
||||
}
|
||||
foreach ($this->nodeNameResolvers as $nodeNameResolver) {
|
||||
if (!\is_a($node, $nodeNameResolver->getNode(), \true)) {
|
||||
continue;
|
||||
}
|
||||
return $nodeNameResolver->resolve($node);
|
||||
$resolvedName = $this->resolveNodeName($node);
|
||||
if ($resolvedName !== null) {
|
||||
return $resolvedName;
|
||||
}
|
||||
// more complex
|
||||
if (!\property_exists($node, 'name')) {
|
||||
|
@ -187,18 +196,20 @@ final class NodeNameResolver
|
|||
if ($desiredName === '') {
|
||||
return \false;
|
||||
}
|
||||
// is probably regex pattern
|
||||
if ($this->regexPatternDetector->isRegexPattern($desiredName)) {
|
||||
return StringUtils::isMatch($resolvedName, $desiredName);
|
||||
}
|
||||
// is probably fnmatch
|
||||
if (\strpos($desiredName, '*') !== \false) {
|
||||
return \fnmatch($desiredName, $resolvedName, \FNM_NOESCAPE);
|
||||
}
|
||||
// special case
|
||||
if ($desiredName === 'Object') {
|
||||
return $desiredName === $resolvedName;
|
||||
}
|
||||
if (StringUtils::isMatch($desiredName, self::CONTAINS_WILDCARD_CHARS_REGEX)) {
|
||||
// is probably regex pattern
|
||||
if ($this->regexPatternDetector->isRegexPattern($desiredName)) {
|
||||
return StringUtils::isMatch($resolvedName, $desiredName);
|
||||
}
|
||||
// is probably fnmatch
|
||||
if (\strpos($desiredName, '*') !== \false) {
|
||||
return \fnmatch($desiredName, $resolvedName, \FNM_NOESCAPE);
|
||||
}
|
||||
}
|
||||
return \strtolower($resolvedName) === \strtolower($desiredName);
|
||||
}
|
||||
/**
|
||||
|
@ -223,4 +234,24 @@ final class NodeNameResolver
|
|||
}
|
||||
return $this->isStringName($resolvedName, $desiredName);
|
||||
}
|
||||
private function resolveNodeName(Node $node) : ?string
|
||||
{
|
||||
$nodeClass = \get_class($node);
|
||||
if (\array_key_exists($nodeClass, $this->nodeNameResolversByClass)) {
|
||||
$resolver = $this->nodeNameResolversByClass[$nodeClass];
|
||||
if ($resolver instanceof NodeNameResolverInterface) {
|
||||
return $resolver->resolve($node);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
foreach ($this->nodeNameResolvers as $nodeNameResolver) {
|
||||
if (!\is_a($node, $nodeNameResolver->getNode(), \true)) {
|
||||
continue;
|
||||
}
|
||||
$this->nodeNameResolversByClass[$nodeClass] = $nodeNameResolver;
|
||||
return $nodeNameResolver->resolve($node);
|
||||
}
|
||||
$this->nodeNameResolversByClass[$nodeClass] = null;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,12 +19,12 @@ final class VersionResolver
|
|||
* @api
|
||||
* @var string
|
||||
*/
|
||||
public const PACKAGE_VERSION = '8609d3b83b7ff1242df1ca54219068e0308dfafa';
|
||||
public const PACKAGE_VERSION = '697479f14891c51f53e64144826cbe65e2c48dcc';
|
||||
/**
|
||||
* @api
|
||||
* @var string
|
||||
*/
|
||||
public const RELEASE_DATE = '2023-03-23 15:43:37';
|
||||
public const RELEASE_DATE = '2023-03-23 22:22:07';
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
|
|
2
vendor/autoload.php
vendored
2
vendor/autoload.php
vendored
|
@ -22,4 +22,4 @@ if (PHP_VERSION_ID < 50600) {
|
|||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
return ComposerAutoloaderInit4a2890a2fb74c36cbb291f625ed32610::getLoader();
|
||||
return ComposerAutoloaderInitad2a0b93b8525e4f01ffadf5b0385452::getLoader();
|
||||
|
|
10
vendor/composer/autoload_real.php
vendored
10
vendor/composer/autoload_real.php
vendored
|
@ -2,7 +2,7 @@
|
|||
|
||||
// autoload_real.php @generated by Composer
|
||||
|
||||
class ComposerAutoloaderInit4a2890a2fb74c36cbb291f625ed32610
|
||||
class ComposerAutoloaderInitad2a0b93b8525e4f01ffadf5b0385452
|
||||
{
|
||||
private static $loader;
|
||||
|
||||
|
@ -22,17 +22,17 @@ class ComposerAutoloaderInit4a2890a2fb74c36cbb291f625ed32610
|
|||
return self::$loader;
|
||||
}
|
||||
|
||||
spl_autoload_register(array('ComposerAutoloaderInit4a2890a2fb74c36cbb291f625ed32610', 'loadClassLoader'), true, true);
|
||||
spl_autoload_register(array('ComposerAutoloaderInitad2a0b93b8525e4f01ffadf5b0385452', 'loadClassLoader'), true, true);
|
||||
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInit4a2890a2fb74c36cbb291f625ed32610', 'loadClassLoader'));
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInitad2a0b93b8525e4f01ffadf5b0385452', 'loadClassLoader'));
|
||||
|
||||
require __DIR__ . '/autoload_static.php';
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInit4a2890a2fb74c36cbb291f625ed32610::getInitializer($loader));
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInitad2a0b93b8525e4f01ffadf5b0385452::getInitializer($loader));
|
||||
|
||||
$loader->setClassMapAuthoritative(true);
|
||||
$loader->register(true);
|
||||
|
||||
$filesToLoad = \Composer\Autoload\ComposerStaticInit4a2890a2fb74c36cbb291f625ed32610::$files;
|
||||
$filesToLoad = \Composer\Autoload\ComposerStaticInitad2a0b93b8525e4f01ffadf5b0385452::$files;
|
||||
$requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
|
||||
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
||||
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
||||
|
|
8
vendor/composer/autoload_static.php
vendored
8
vendor/composer/autoload_static.php
vendored
|
@ -4,7 +4,7 @@
|
|||
|
||||
namespace Composer\Autoload;
|
||||
|
||||
class ComposerStaticInit4a2890a2fb74c36cbb291f625ed32610
|
||||
class ComposerStaticInitad2a0b93b8525e4f01ffadf5b0385452
|
||||
{
|
||||
public static $files = array (
|
||||
'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php',
|
||||
|
@ -3127,9 +3127,9 @@ class ComposerStaticInit4a2890a2fb74c36cbb291f625ed32610
|
|||
public static function getInitializer(ClassLoader $loader)
|
||||
{
|
||||
return \Closure::bind(function () use ($loader) {
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInit4a2890a2fb74c36cbb291f625ed32610::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInit4a2890a2fb74c36cbb291f625ed32610::$prefixDirsPsr4;
|
||||
$loader->classMap = ComposerStaticInit4a2890a2fb74c36cbb291f625ed32610::$classMap;
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInitad2a0b93b8525e4f01ffadf5b0385452::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInitad2a0b93b8525e4f01ffadf5b0385452::$prefixDirsPsr4;
|
||||
$loader->classMap = ComposerStaticInitad2a0b93b8525e4f01ffadf5b0385452::$classMap;
|
||||
|
||||
}, null, ClassLoader::class);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user