Updated Rector to commit f7b095495b

f7b095495b Remove last USE_NODE (#2165)
This commit is contained in:
Tomas Votruba 2022-04-25 16:12:00 +00:00
parent 18c61e765a
commit e3ae598c02
9 changed files with 57 additions and 45 deletions

View File

@ -7,6 +7,7 @@ use RectorPrefix20220425\Nette\Utils\Strings;
use PHPStan\Type\ArrayType;
use PHPStan\Type\BooleanType;
use PHPStan\Type\CallableType;
use PHPStan\Type\ClassStringType;
use PHPStan\Type\Constant\ConstantBooleanType;
use PHPStan\Type\FloatType;
use PHPStan\Type\IntegerType;
@ -24,7 +25,7 @@ final class ScalarStringToTypeMapper
/**
* @var array<class-string<Type>, string[]>
*/
private const SCALAR_NAME_BY_TYPE = [\PHPStan\Type\StringType::class => ['string'], \PHPStan\Type\FloatType::class => ['float', 'real', 'double'], \PHPStan\Type\IntegerType::class => ['int', 'integer'], \PHPStan\Type\BooleanType::class => ['bool', 'boolean'], \PHPStan\Type\NullType::class => ['null'], \PHPStan\Type\VoidType::class => ['void'], \PHPStan\Type\ResourceType::class => ['resource'], \PHPStan\Type\CallableType::class => ['callback', 'callable'], \PHPStan\Type\ObjectWithoutClassType::class => ['object'], \PHPStan\Type\NeverType::class => ['never', 'never-return', 'never-returns', 'no-return']];
private const SCALAR_NAME_BY_TYPE = [\PHPStan\Type\StringType::class => ['string'], \PHPStan\Type\ClassStringType::class => ['class-string'], \PHPStan\Type\FloatType::class => ['float', 'real', 'double'], \PHPStan\Type\IntegerType::class => ['int', 'integer'], \PHPStan\Type\BooleanType::class => ['bool', 'boolean'], \PHPStan\Type\NullType::class => ['null'], \PHPStan\Type\VoidType::class => ['void'], \PHPStan\Type\ResourceType::class => ['resource'], \PHPStan\Type\CallableType::class => ['callback', 'callable'], \PHPStan\Type\ObjectWithoutClassType::class => ['object'], \PHPStan\Type\NeverType::class => ['never', 'never-return', 'never-returns', 'no-return']];
public function mapScalarStringToType(string $scalarName) : \PHPStan\Type\Type
{
$loweredScalarName = \RectorPrefix20220425\Nette\Utils\Strings::lower($scalarName);

View File

@ -11,12 +11,16 @@ use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
use PHPStan\PhpDocParser\Ast\Type\TypeNode;
use PHPStan\Reflection\ClassReflection;
use PHPStan\Reflection\ReflectionProvider;
use PHPStan\Type\ClassStringType;
use PHPStan\Type\BooleanType;
use PHPStan\Type\FloatType;
use PHPStan\Type\IntegerType;
use PHPStan\Type\IterableType;
use PHPStan\Type\MixedType;
use PHPStan\Type\ObjectType;
use PHPStan\Type\StaticType;
use PHPStan\Type\StringType;
use PHPStan\Type\Type;
use PHPStan\Type\UnionType;
use Rector\Core\Enum\ObjectReference;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\NodeNameResolver\NodeNameResolver;
@ -82,9 +86,6 @@ final class IdentifierTypeMapper implements \Rector\StaticTypeMapper\Contract\Ph
return $type;
}
$loweredName = \strtolower($typeNode->name);
if ($loweredName === 'class-string') {
return new \PHPStan\Type\ClassStringType();
}
if ($loweredName === \Rector\Core\Enum\ObjectReference::SELF()->getValue()) {
return $this->mapSelf($node);
}
@ -102,6 +103,11 @@ final class IdentifierTypeMapper implements \Rector\StaticTypeMapper\Contract\Ph
$typeWithoutPreslash = \RectorPrefix20220425\Nette\Utils\Strings::substring($type, 1);
$objectType = new \Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType($typeWithoutPreslash);
} else {
if ($typeNode->name === 'scalar') {
// pseudo type, see https://www.php.net/manual/en/language.types.intro.php
$scalarTypes = [new \PHPStan\Type\BooleanType(), new \PHPStan\Type\StringType(), new \PHPStan\Type\IntegerType(), new \PHPStan\Type\FloatType()];
return new \PHPStan\Type\UnionType($scalarTypes);
}
$objectType = new \PHPStan\Type\ObjectType($typeNode->name);
}
$scope = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::SCOPE);

View File

@ -125,6 +125,7 @@ CODE_SAMPLE
}
/** @var PropertyFetch|StaticPropertyFetch $expr */
$variableType = $expr instanceof \PhpParser\Node\Expr\PropertyFetch ? $this->nodeTypeResolver->getType($expr->var) : $this->nodeTypeResolver->getType($expr->class);
// dump($variableType);die;
if ($variableType instanceof \Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType) {
$currentClassLike = $this->betterNodeFinder->findParentType($expr, \PhpParser\Node\Stmt\ClassLike::class);
if ($currentClassLike instanceof \PhpParser\Node\Stmt\ClassLike) {

View File

@ -11,14 +11,11 @@ use PhpParser\Node\Stmt\UseUse;
use PHPStan\Analyser\Scope;
use PHPStan\Reflection\ClassReflection;
use PHPStan\Reflection\ReflectionProvider;
use PHPStan\Type\BooleanType;
use PHPStan\Type\FloatType;
use PHPStan\Type\Generic\GenericObjectType;
use PHPStan\Type\IntegerType;
use PHPStan\Type\MixedType;
use PHPStan\Type\ObjectType;
use PHPStan\Type\StaticType;
use PHPStan\Type\StringType;
use PHPStan\Type\Type;
use PHPStan\Type\TypeWithClassName;
use PHPStan\Type\UnionType;
use Rector\Core\Enum\ObjectReference;
@ -55,10 +52,23 @@ final class ObjectTypeSpecifier
*/
public function narrowToFullyQualifiedOrAliasedObjectType(\PhpParser\Node $node, \PHPStan\Type\ObjectType $objectType, $scope)
{
// this change will break \Rector\Tests\NodeTypeResolver\PerNodeTypeResolver\ParamTypeResolver\ParamTypeResolverTest
$uses = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::USE_NODES);
if ($uses === null) {
return $objectType;
$sameNamespacedObjectType = $this->matchSameNamespacedObjectType($node, $objectType);
if ($sameNamespacedObjectType !== null) {
return $sameNamespacedObjectType;
}
if ($scope instanceof \PHPStan\Analyser\Scope) {
$className = \ltrim($objectType->getClassName(), '\\');
$objectReferenceType = $this->resolveObjectReferenceType($scope, $className);
if ($objectReferenceType instanceof \PHPStan\Type\Type) {
return $objectReferenceType;
}
}
$uses = $this->useImportsResolver->resolveForNode($node);
if ($uses === []) {
if (!$this->reflectionProvider->hasClass($objectType->getClassName())) {
return new \Rector\StaticTypeMapper\ValueObject\Type\NonExistingObjectType($objectType->getClassName());
}
return new \Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType($objectType->getClassName(), null, $objectType->getClassReflection());
}
$aliasedObjectType = $this->matchAliasedObjectType($node, $objectType);
if ($aliasedObjectType !== null) {
@ -68,25 +78,19 @@ final class ObjectTypeSpecifier
if ($shortenedObjectType !== null) {
return $shortenedObjectType;
}
$sameNamespacedObjectType = $this->matchSameNamespacedObjectType($node, $objectType);
if ($sameNamespacedObjectType !== null) {
return $sameNamespacedObjectType;
}
$className = \ltrim($objectType->getClassName(), '\\');
if (\Rector\Core\Enum\ObjectReference::isValid($className)) {
if (!$scope instanceof \PHPStan\Analyser\Scope) {
throw new \Rector\Core\Exception\ShouldNotHappenException();
}
return $this->resolveObjectReferenceType($scope, $className);
$resolvedType = $this->resolveObjectReferenceType($scope, $className);
if ($resolvedType instanceof \PHPStan\Type\Type) {
return $resolvedType;
}
}
if ($this->reflectionProvider->hasClass($className)) {
return new \Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType($className);
}
if ($className === 'scalar') {
// pseudo type, see https://www.php.net/manual/en/language.types.intro.php
$scalarTypes = [new \PHPStan\Type\BooleanType(), new \PHPStan\Type\StringType(), new \PHPStan\Type\IntegerType(), new \PHPStan\Type\FloatType()];
return new \PHPStan\Type\UnionType($scalarTypes);
}
// invalid type
return new \Rector\StaticTypeMapper\ValueObject\Type\NonExistingObjectType($className);
}
@ -212,13 +216,13 @@ final class ObjectTypeSpecifier
return new \Rector\StaticTypeMapper\ValueObject\Type\ShortenedObjectType($objectType->getClassName(), $useUse->name->toString());
}
/**
* @return \PHPStan\Type\StaticType|\Rector\StaticTypeMapper\ValueObject\Type\SelfObjectType
* @return \PHPStan\Type\StaticType|\Rector\StaticTypeMapper\ValueObject\Type\SelfObjectType|null
*/
private function resolveObjectReferenceType(\PHPStan\Analyser\Scope $scope, string $classReferenceValue)
{
$classReflection = $scope->getClassReflection();
if (!$classReflection instanceof \PHPStan\Reflection\ClassReflection) {
throw new \Rector\Core\Exception\ShouldNotHappenException();
return null;
}
if (\Rector\Core\Enum\ObjectReference::STATIC()->getValue() === $classReferenceValue) {
return new \PHPStan\Type\StaticType($classReflection);
@ -233,6 +237,6 @@ final class ObjectTypeSpecifier
}
return new \Rector\StaticTypeMapper\ValueObject\Type\ParentStaticType($parentClassReflection);
}
throw new \Rector\Core\Exception\ShouldNotHappenException();
return null;
}
}

View File

@ -16,11 +16,11 @@ final class VersionResolver
/**
* @var string
*/
public const PACKAGE_VERSION = '25e6b17a862a90d6f67baaba3f164a31d039d3d7';
public const PACKAGE_VERSION = 'f7b095495b98f954e5adb50b210cb4954193b6ab';
/**
* @var string
*/
public const RELEASE_DATE = '2022-04-25 10:07:31';
public const RELEASE_DATE = '2022-04-25 18:05:16';
/**
* @var string
*/

2
vendor/autoload.php vendored
View File

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

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
class ComposerAutoloaderInit24361428587464401adaac6b98a43b76
class ComposerAutoloaderInitbeaf7924f2c8bbcd3f78bea813d51ded
{
private static $loader;
@ -22,19 +22,19 @@ class ComposerAutoloaderInit24361428587464401adaac6b98a43b76
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInit24361428587464401adaac6b98a43b76', 'loadClassLoader'), true, true);
spl_autoload_register(array('ComposerAutoloaderInitbeaf7924f2c8bbcd3f78bea813d51ded', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInit24361428587464401adaac6b98a43b76', 'loadClassLoader'));
spl_autoload_unregister(array('ComposerAutoloaderInitbeaf7924f2c8bbcd3f78bea813d51ded', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit24361428587464401adaac6b98a43b76::getInitializer($loader));
call_user_func(\Composer\Autoload\ComposerStaticInitbeaf7924f2c8bbcd3f78bea813d51ded::getInitializer($loader));
$loader->setClassMapAuthoritative(true);
$loader->register(true);
$includeFiles = \Composer\Autoload\ComposerStaticInit24361428587464401adaac6b98a43b76::$files;
$includeFiles = \Composer\Autoload\ComposerStaticInitbeaf7924f2c8bbcd3f78bea813d51ded::$files;
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequire24361428587464401adaac6b98a43b76($fileIdentifier, $file);
composerRequirebeaf7924f2c8bbcd3f78bea813d51ded($fileIdentifier, $file);
}
return $loader;
@ -46,7 +46,7 @@ class ComposerAutoloaderInit24361428587464401adaac6b98a43b76
* @param string $file
* @return void
*/
function composerRequire24361428587464401adaac6b98a43b76($fileIdentifier, $file)
function composerRequirebeaf7924f2c8bbcd3f78bea813d51ded($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 ComposerStaticInit24361428587464401adaac6b98a43b76
class ComposerStaticInitbeaf7924f2c8bbcd3f78bea813d51ded
{
public static $files = array (
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
@ -3872,9 +3872,9 @@ class ComposerStaticInit24361428587464401adaac6b98a43b76
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInit24361428587464401adaac6b98a43b76::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit24361428587464401adaac6b98a43b76::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit24361428587464401adaac6b98a43b76::$classMap;
$loader->prefixLengthsPsr4 = ComposerStaticInitbeaf7924f2c8bbcd3f78bea813d51ded::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitbeaf7924f2c8bbcd3f78bea813d51ded::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInitbeaf7924f2c8bbcd3f78bea813d51ded::$classMap;
}, null, ClassLoader::class);
}

View File

@ -9,8 +9,8 @@ $loader = require_once __DIR__.'/autoload.php';
if (!class_exists('AutoloadIncluder', false) && !interface_exists('AutoloadIncluder', false) && !trait_exists('AutoloadIncluder', false)) {
spl_autoload_call('RectorPrefix20220425\AutoloadIncluder');
}
if (!class_exists('ComposerAutoloaderInit24361428587464401adaac6b98a43b76', false) && !interface_exists('ComposerAutoloaderInit24361428587464401adaac6b98a43b76', false) && !trait_exists('ComposerAutoloaderInit24361428587464401adaac6b98a43b76', false)) {
spl_autoload_call('RectorPrefix20220425\ComposerAutoloaderInit24361428587464401adaac6b98a43b76');
if (!class_exists('ComposerAutoloaderInitbeaf7924f2c8bbcd3f78bea813d51ded', false) && !interface_exists('ComposerAutoloaderInitbeaf7924f2c8bbcd3f78bea813d51ded', false) && !trait_exists('ComposerAutoloaderInitbeaf7924f2c8bbcd3f78bea813d51ded', false)) {
spl_autoload_call('RectorPrefix20220425\ComposerAutoloaderInitbeaf7924f2c8bbcd3f78bea813d51ded');
}
if (!class_exists('Helmich\TypoScriptParser\Parser\AST\Statement', false) && !interface_exists('Helmich\TypoScriptParser\Parser\AST\Statement', false) && !trait_exists('Helmich\TypoScriptParser\Parser\AST\Statement', false)) {
spl_autoload_call('RectorPrefix20220425\Helmich\TypoScriptParser\Parser\AST\Statement');
@ -59,9 +59,9 @@ if (!function_exists('print_node')) {
return \RectorPrefix20220425\print_node(...func_get_args());
}
}
if (!function_exists('composerRequire24361428587464401adaac6b98a43b76')) {
function composerRequire24361428587464401adaac6b98a43b76() {
return \RectorPrefix20220425\composerRequire24361428587464401adaac6b98a43b76(...func_get_args());
if (!function_exists('composerRequirebeaf7924f2c8bbcd3f78bea813d51ded')) {
function composerRequirebeaf7924f2c8bbcd3f78bea813d51ded() {
return \RectorPrefix20220425\composerRequirebeaf7924f2c8bbcd3f78bea813d51ded(...func_get_args());
}
}
if (!function_exists('scanPath')) {