Updated Rector to commit 9ffa707afd96ae67e73d52a1e1dfab478d251e12

9ffa707afd Remove unused priority aware sorter etc (#3118)
This commit is contained in:
Tomas Votruba 2022-11-28 12:14:20 +00:00
parent 23a994ee6e
commit 44ed5df29f
11 changed files with 42 additions and 140 deletions

View File

@ -1,12 +0,0 @@
<?php
declare (strict_types=1);
namespace Rector\TypeDeclaration\Contract;
interface PriorityAwareInterface
{
/**
* Higher priority goes first.
*/
public function getPriority() : int;
}

View File

@ -1,16 +0,0 @@
<?php
declare (strict_types=1);
namespace Rector\TypeDeclaration\Contract\TypeInferer;
use PhpParser\Node\FunctionLike;
use PHPStan\Type\Type;
use Rector\TypeDeclaration\Contract\PriorityAwareInterface;
/**
* @deprecated These inferers are complex and work with non-reliable docblocks.
* Instead split them to specific rules that work with strict types.
*/
interface ReturnTypeInfererInterface extends PriorityAwareInterface
{
public function inferFunctionLike(FunctionLike $functionLike) : Type;
}

View File

@ -1,15 +0,0 @@
<?php
declare (strict_types=1);
namespace Rector\TypeDeclaration\Exception;
use Exception;
use Rector\TypeDeclaration\Contract\PriorityAwareInterface;
final class ConflictingPriorityException extends Exception
{
public function __construct(PriorityAwareInterface $firstPriorityAwareTypeInferer, PriorityAwareInterface $secondPriorityAwareTypeInferer)
{
$message = \sprintf('There are 2 type inferers with %d priority:%s- %s%s- %s.%sChange value in "getPriority()" method in one of them to different value', $firstPriorityAwareTypeInferer->getPriority(), \PHP_EOL, \get_class($firstPriorityAwareTypeInferer), \PHP_EOL, \get_class($secondPriorityAwareTypeInferer), \PHP_EOL);
parent::__construct($message);
}
}

View File

@ -1,36 +0,0 @@
<?php
declare (strict_types=1);
namespace Rector\TypeDeclaration\Sorter;
use Rector\TypeDeclaration\Contract\PriorityAwareInterface;
use Rector\TypeDeclaration\Exception\ConflictingPriorityException;
final class PriorityAwareSorter
{
/**
* @template TPriorityAware as PriorityAwareInterface
* @param TPriorityAware[] $priorityAwares
* @return TPriorityAware[]
*/
public function sort(array $priorityAwares) : array
{
$sortedTypeInferers = [];
foreach ($priorityAwares as $priorityAware) {
$this->ensurePriorityIsUnique($sortedTypeInferers, $priorityAware);
$sortedTypeInferers[$priorityAware->getPriority()] = $priorityAware;
}
\krsort($sortedTypeInferers);
return $sortedTypeInferers;
}
/**
* @param PriorityAwareInterface[] $sortedTypeInferers
*/
private function ensurePriorityIsUnique(array $sortedTypeInferers, PriorityAwareInterface $priorityAware) : void
{
if (!isset($sortedTypeInferers[$priorityAware->getPriority()])) {
return;
}
$alreadySetPropertyTypeInferer = $sortedTypeInferers[$priorityAware->getPriority()];
throw new ConflictingPriorityException($priorityAware, $alreadySetPropertyTypeInferer);
}
}

View File

@ -33,9 +33,8 @@ use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\NodeTypeResolver;
use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType;
use Rector\TypeDeclaration\Contract\TypeInferer\ReturnTypeInfererInterface;
use Rector\TypeDeclaration\Sorter\PriorityAwareSorter;
use Rector\TypeDeclaration\TypeAnalyzer\GenericClassStringTypeNormalizer;
use Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer\ReturnedNodesReturnTypeInfererTypeInferer;
use Rector\TypeDeclaration\TypeNormalizer;
/**
* @deprecated
@ -43,15 +42,16 @@ use Rector\TypeDeclaration\TypeNormalizer;
*/
final class ReturnTypeInferer
{
/**
* @var ReturnTypeInfererInterface[]
*/
private $returnTypeInferers = [];
/**
* @readonly
* @var \Rector\TypeDeclaration\TypeNormalizer
*/
private $typeNormalizer;
/**
* @readonly
* @var \Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer\ReturnedNodesReturnTypeInfererTypeInferer
*/
private $returnedNodesReturnTypeInfererTypeInferer;
/**
* @readonly
* @var \Rector\TypeDeclaration\TypeAnalyzer\GenericClassStringTypeNormalizer
@ -87,12 +87,10 @@ final class ReturnTypeInferer
* @var \Rector\NodeNameResolver\NodeNameResolver
*/
private $nodeNameResolver;
/**
* @param ReturnTypeInfererInterface[] $returnTypeInferers
*/
public function __construct(array $returnTypeInferers, TypeNormalizer $typeNormalizer, PriorityAwareSorter $priorityAwareSorter, GenericClassStringTypeNormalizer $genericClassStringTypeNormalizer, PhpVersionProvider $phpVersionProvider, ParameterProvider $parameterProvider, BetterNodeFinder $betterNodeFinder, ReflectionProvider $reflectionProvider, NodeTypeResolver $nodeTypeResolver, NodeNameResolver $nodeNameResolver)
public function __construct(TypeNormalizer $typeNormalizer, ReturnedNodesReturnTypeInfererTypeInferer $returnedNodesReturnTypeInfererTypeInferer, GenericClassStringTypeNormalizer $genericClassStringTypeNormalizer, PhpVersionProvider $phpVersionProvider, ParameterProvider $parameterProvider, BetterNodeFinder $betterNodeFinder, ReflectionProvider $reflectionProvider, NodeTypeResolver $nodeTypeResolver, NodeNameResolver $nodeNameResolver)
{
$this->typeNormalizer = $typeNormalizer;
$this->returnedNodesReturnTypeInfererTypeInferer = $returnedNodesReturnTypeInfererTypeInferer;
$this->genericClassStringTypeNormalizer = $genericClassStringTypeNormalizer;
$this->phpVersionProvider = $phpVersionProvider;
$this->parameterProvider = $parameterProvider;
@ -100,7 +98,6 @@ final class ReturnTypeInferer
$this->reflectionProvider = $reflectionProvider;
$this->nodeTypeResolver = $nodeTypeResolver;
$this->nodeNameResolver = $nodeNameResolver;
$this->returnTypeInferers = $priorityAwareSorter->sort($returnTypeInferers);
}
/**
* @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_|\PhpParser\Node\Expr\Closure $functionLike
@ -112,29 +109,26 @@ final class ReturnTypeInferer
if ($this->isAutoImportWithFullyQualifiedReturn($isAutoImport, $functionLike)) {
return new MixedType();
}
foreach ($this->returnTypeInferers as $returnTypeInferer) {
$originalType = $returnTypeInferer->inferFunctionLike($functionLike);
if ($originalType instanceof MixedType) {
continue;
}
$type = $this->typeNormalizer->normalizeArrayTypeAndArrayNever($originalType);
// in case of void, check return type of children methods
if ($type instanceof MixedType) {
continue;
}
$type = $this->verifyStaticType($type, $isSupportedStaticReturnType);
if (!$type instanceof Type) {
continue;
}
$type = $this->verifyThisType($type, $functionLike);
if (!$type instanceof Type) {
continue;
}
// normalize ConstStringType to ClassStringType
$resolvedType = $this->genericClassStringTypeNormalizer->normalize($type);
return $this->resolveTypeWithVoidHandling($functionLike, $resolvedType);
$originalType = $this->returnedNodesReturnTypeInfererTypeInferer->inferFunctionLike($functionLike);
if ($originalType instanceof MixedType) {
return new MixedType();
}
return new MixedType();
$type = $this->typeNormalizer->normalizeArrayTypeAndArrayNever($originalType);
// in case of void, check return type of children methods
if ($type instanceof MixedType) {
return new MixedType();
}
$type = $this->verifyStaticType($type, $isSupportedStaticReturnType);
if (!$type instanceof Type) {
return new MixedType();
}
$type = $this->verifyThisType($type, $functionLike);
if (!$type instanceof Type) {
return new MixedType();
}
// normalize ConstStringType to ClassStringType
$resolvedType = $this->genericClassStringTypeNormalizer->normalize($type);
return $this->resolveTypeWithVoidHandling($functionLike, $resolvedType);
}
public function verifyStaticType(Type $type, bool $isSupportedStaticReturnType) : ?Type
{

View File

@ -25,14 +25,13 @@ use Rector\Core\Reflection\ReflectionResolver;
use Rector\NodeTypeResolver\NodeTypeResolver;
use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory;
use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser;
use Rector\TypeDeclaration\Contract\TypeInferer\ReturnTypeInfererInterface;
use Rector\TypeDeclaration\TypeInferer\SilentVoidResolver;
use Rector\TypeDeclaration\TypeInferer\SplArrayFixedTypeNarrower;
/**
* @deprecated
* @todo Split into many narrow-focused rules
*/
final class ReturnedNodesReturnTypeInfererTypeInferer implements ReturnTypeInfererInterface
final class ReturnedNodesReturnTypeInfererTypeInferer
{
/**
* @readonly
@ -116,10 +115,6 @@ final class ReturnedNodesReturnTypeInfererTypeInferer implements ReturnTypeInfer
}
return $this->typeFactory->createMixedPassedOrUnionType($types);
}
public function getPriority() : int
{
return 1000;
}
/**
* @return Return_[]
*/

View File

@ -17,12 +17,12 @@ final class VersionResolver
* @api
* @var string
*/
public const PACKAGE_VERSION = '183bb5bda001a9d8d7302a350fe4c8979dbe4f19';
public const PACKAGE_VERSION = '9ffa707afd96ae67e73d52a1e1dfab478d251e12';
/**
* @api
* @var string
*/
public const RELEASE_DATE = '2022-11-28 12:58:09';
public const RELEASE_DATE = '2022-11-28 12:09:41';
/**
* @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 ComposerAutoloaderInitf9d7dd9e3f930d3620242b64c548337c::getLoader();
return ComposerAutoloaderInitcdcf77b3388cbeab2cfc8d24a0fddc50::getLoader();

View File

@ -2660,9 +2660,6 @@ return array(
'Rector\\TypeDeclaration\\AlreadyAssignDetector\\NullTypeAssignDetector' => $baseDir . '/rules/TypeDeclaration/AlreadyAssignDetector/NullTypeAssignDetector.php',
'Rector\\TypeDeclaration\\AlreadyAssignDetector\\PropertyDefaultAssignDetector' => $baseDir . '/rules/TypeDeclaration/AlreadyAssignDetector/PropertyDefaultAssignDetector.php',
'Rector\\TypeDeclaration\\Contract\\PHPStan\\TypeWithClassTypeSpecifierInterface' => $baseDir . '/rules/TypeDeclaration/Contract/PHPStan/TypeWithClassTypeSpecifierInterface.php',
'Rector\\TypeDeclaration\\Contract\\PriorityAwareInterface' => $baseDir . '/rules/TypeDeclaration/Contract/PriorityAwareInterface.php',
'Rector\\TypeDeclaration\\Contract\\TypeInferer\\ReturnTypeInfererInterface' => $baseDir . '/rules/TypeDeclaration/Contract/TypeInferer/ReturnTypeInfererInterface.php',
'Rector\\TypeDeclaration\\Exception\\ConflictingPriorityException' => $baseDir . '/rules/TypeDeclaration/Exception/ConflictingPriorityException.php',
'Rector\\TypeDeclaration\\FunctionLikeReturnTypeResolver' => $baseDir . '/rules/TypeDeclaration/FunctionLikeReturnTypeResolver.php',
'Rector\\TypeDeclaration\\Guard\\PhpDocNestedAnnotationGuard' => $baseDir . '/rules/TypeDeclaration/Guard/PhpDocNestedAnnotationGuard.php',
'Rector\\TypeDeclaration\\Guard\\PropertyTypeOverrideGuard' => $baseDir . '/rules/TypeDeclaration/Guard/PropertyTypeOverrideGuard.php',
@ -2724,7 +2721,6 @@ return array(
'Rector\\TypeDeclaration\\Rector\\Property\\TypedPropertyFromStrictGetterMethodReturnTypeRector' => $baseDir . '/rules/TypeDeclaration/Rector/Property/TypedPropertyFromStrictGetterMethodReturnTypeRector.php',
'Rector\\TypeDeclaration\\Rector\\Property\\TypedPropertyFromStrictSetUpRector' => $baseDir . '/rules/TypeDeclaration/Rector/Property/TypedPropertyFromStrictSetUpRector.php',
'Rector\\TypeDeclaration\\Rector\\Property\\VarAnnotationIncorrectNullableRector' => $baseDir . '/rules/TypeDeclaration/Rector/Property/VarAnnotationIncorrectNullableRector.php',
'Rector\\TypeDeclaration\\Sorter\\PriorityAwareSorter' => $baseDir . '/rules/TypeDeclaration/Sorter/PriorityAwareSorter.php',
'Rector\\TypeDeclaration\\TypeAlreadyAddedChecker\\ReturnTypeAlreadyAddedChecker' => $baseDir . '/rules/TypeDeclaration/TypeAlreadyAddedChecker/ReturnTypeAlreadyAddedChecker.php',
'Rector\\TypeDeclaration\\TypeAnalyzer\\AdvancedArrayAnalyzer' => $baseDir . '/rules/TypeDeclaration/TypeAnalyzer/AdvancedArrayAnalyzer.php',
'Rector\\TypeDeclaration\\TypeAnalyzer\\AlwaysStrictBoolExprAnalyzer' => $baseDir . '/rules/TypeDeclaration/TypeAnalyzer/AlwaysStrictBoolExprAnalyzer.php',

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
class ComposerAutoloaderInitf9d7dd9e3f930d3620242b64c548337c
class ComposerAutoloaderInitcdcf77b3388cbeab2cfc8d24a0fddc50
{
private static $loader;
@ -22,19 +22,19 @@ class ComposerAutoloaderInitf9d7dd9e3f930d3620242b64c548337c
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInitf9d7dd9e3f930d3620242b64c548337c', 'loadClassLoader'), true, true);
spl_autoload_register(array('ComposerAutoloaderInitcdcf77b3388cbeab2cfc8d24a0fddc50', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInitf9d7dd9e3f930d3620242b64c548337c', 'loadClassLoader'));
spl_autoload_unregister(array('ComposerAutoloaderInitcdcf77b3388cbeab2cfc8d24a0fddc50', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInitf9d7dd9e3f930d3620242b64c548337c::getInitializer($loader));
call_user_func(\Composer\Autoload\ComposerStaticInitcdcf77b3388cbeab2cfc8d24a0fddc50::getInitializer($loader));
$loader->setClassMapAuthoritative(true);
$loader->register(true);
$includeFiles = \Composer\Autoload\ComposerStaticInitf9d7dd9e3f930d3620242b64c548337c::$files;
$includeFiles = \Composer\Autoload\ComposerStaticInitcdcf77b3388cbeab2cfc8d24a0fddc50::$files;
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequiref9d7dd9e3f930d3620242b64c548337c($fileIdentifier, $file);
composerRequirecdcf77b3388cbeab2cfc8d24a0fddc50($fileIdentifier, $file);
}
return $loader;
@ -46,7 +46,7 @@ class ComposerAutoloaderInitf9d7dd9e3f930d3620242b64c548337c
* @param string $file
* @return void
*/
function composerRequiref9d7dd9e3f930d3620242b64c548337c($fileIdentifier, $file)
function composerRequirecdcf77b3388cbeab2cfc8d24a0fddc50($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 ComposerStaticInitf9d7dd9e3f930d3620242b64c548337c
class ComposerStaticInitcdcf77b3388cbeab2cfc8d24a0fddc50
{
public static $files = array (
'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php',
@ -2905,9 +2905,6 @@ class ComposerStaticInitf9d7dd9e3f930d3620242b64c548337c
'Rector\\TypeDeclaration\\AlreadyAssignDetector\\NullTypeAssignDetector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/AlreadyAssignDetector/NullTypeAssignDetector.php',
'Rector\\TypeDeclaration\\AlreadyAssignDetector\\PropertyDefaultAssignDetector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/AlreadyAssignDetector/PropertyDefaultAssignDetector.php',
'Rector\\TypeDeclaration\\Contract\\PHPStan\\TypeWithClassTypeSpecifierInterface' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Contract/PHPStan/TypeWithClassTypeSpecifierInterface.php',
'Rector\\TypeDeclaration\\Contract\\PriorityAwareInterface' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Contract/PriorityAwareInterface.php',
'Rector\\TypeDeclaration\\Contract\\TypeInferer\\ReturnTypeInfererInterface' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Contract/TypeInferer/ReturnTypeInfererInterface.php',
'Rector\\TypeDeclaration\\Exception\\ConflictingPriorityException' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Exception/ConflictingPriorityException.php',
'Rector\\TypeDeclaration\\FunctionLikeReturnTypeResolver' => __DIR__ . '/../..' . '/rules/TypeDeclaration/FunctionLikeReturnTypeResolver.php',
'Rector\\TypeDeclaration\\Guard\\PhpDocNestedAnnotationGuard' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Guard/PhpDocNestedAnnotationGuard.php',
'Rector\\TypeDeclaration\\Guard\\PropertyTypeOverrideGuard' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Guard/PropertyTypeOverrideGuard.php',
@ -2969,7 +2966,6 @@ class ComposerStaticInitf9d7dd9e3f930d3620242b64c548337c
'Rector\\TypeDeclaration\\Rector\\Property\\TypedPropertyFromStrictGetterMethodReturnTypeRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/Property/TypedPropertyFromStrictGetterMethodReturnTypeRector.php',
'Rector\\TypeDeclaration\\Rector\\Property\\TypedPropertyFromStrictSetUpRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/Property/TypedPropertyFromStrictSetUpRector.php',
'Rector\\TypeDeclaration\\Rector\\Property\\VarAnnotationIncorrectNullableRector' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Rector/Property/VarAnnotationIncorrectNullableRector.php',
'Rector\\TypeDeclaration\\Sorter\\PriorityAwareSorter' => __DIR__ . '/../..' . '/rules/TypeDeclaration/Sorter/PriorityAwareSorter.php',
'Rector\\TypeDeclaration\\TypeAlreadyAddedChecker\\ReturnTypeAlreadyAddedChecker' => __DIR__ . '/../..' . '/rules/TypeDeclaration/TypeAlreadyAddedChecker/ReturnTypeAlreadyAddedChecker.php',
'Rector\\TypeDeclaration\\TypeAnalyzer\\AdvancedArrayAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/TypeAnalyzer/AdvancedArrayAnalyzer.php',
'Rector\\TypeDeclaration\\TypeAnalyzer\\AlwaysStrictBoolExprAnalyzer' => __DIR__ . '/../..' . '/rules/TypeDeclaration/TypeAnalyzer/AlwaysStrictBoolExprAnalyzer.php',
@ -3026,9 +3022,9 @@ class ComposerStaticInitf9d7dd9e3f930d3620242b64c548337c
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInitf9d7dd9e3f930d3620242b64c548337c::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitf9d7dd9e3f930d3620242b64c548337c::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInitf9d7dd9e3f930d3620242b64c548337c::$classMap;
$loader->prefixLengthsPsr4 = ComposerStaticInitcdcf77b3388cbeab2cfc8d24a0fddc50::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitcdcf77b3388cbeab2cfc8d24a0fddc50::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInitcdcf77b3388cbeab2cfc8d24a0fddc50::$classMap;
}, null, ClassLoader::class);
}