Updated Rector to commit 95ad690d94

95ad690d94 [PHPStan 1.0] use selectFromArgs() for function reflectoin to get passed by reference positoins (#1113)
This commit is contained in:
Tomas Votruba 2021-10-30 13:43:30 +00:00
parent a1ac9ec25d
commit c90fff5b41
13 changed files with 63 additions and 78 deletions

View File

@ -118,7 +118,7 @@ final class PHPStanNodeScopeResolver
$traitScope = clone $scope;
$this->privatesAccessor->setPrivateProperty($traitScope, 'context', $scopeContext);
$traitScope = $traitScope->enterTrait($traitReflectionClass);
$this->nodeScopeResolver->processStmtNodes($node, $node->stmts, $traitScope, $nodeCallback);
$this->nodeScopeResolver->processNodes($node->stmts, $traitScope, $nodeCallback);
return;
}
// the class reflection is resolved AFTER entering to class node

View File

@ -6,14 +6,14 @@ namespace Rector\ReadWrite\Guard;
use PhpParser\Node\Arg;
use PhpParser\Node\Expr\FuncCall;
use PhpParser\Node\Name;
use PHPStan\Analyser\Scope;
use PHPStan\Reflection\FunctionReflection;
use PHPStan\Reflection\Native\NativeFunctionReflection;
use PHPStan\Reflection\ParameterReflection;
use PHPStan\Reflection\ParametersAcceptorSelector;
use PHPStan\Reflection\ReflectionProvider;
use Rector\Core\Exception\ShouldNotHappenException;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeTypeResolver\Node\AttributeKey;
use ReflectionFunction;
use RectorPrefix20211030\Symplify\PackageBuilder\Reflection\PrivatesAccessor;
final class VariableToConstantGuard
{
/**
@ -28,15 +28,10 @@ final class VariableToConstantGuard
* @var \PHPStan\Reflection\ReflectionProvider
*/
private $reflectionProvider;
/**
* @var \Symplify\PackageBuilder\Reflection\PrivatesAccessor
*/
private $privatesAccessor;
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \PHPStan\Reflection\ReflectionProvider $reflectionProvider, \RectorPrefix20211030\Symplify\PackageBuilder\Reflection\PrivatesAccessor $privatesAccessor)
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \PHPStan\Reflection\ReflectionProvider $reflectionProvider)
{
$this->nodeNameResolver = $nodeNameResolver;
$this->reflectionProvider = $reflectionProvider;
$this->privatesAccessor = $privatesAccessor;
}
public function isReadArg(\PhpParser\Node\Arg $arg) : bool
{
@ -55,7 +50,7 @@ final class VariableToConstantGuard
return \true;
}
$functionReflection = $this->reflectionProvider->getFunction($functionName, $argScope);
$referenceParametersPositions = $this->resolveFunctionReferencePositions($functionReflection);
$referenceParametersPositions = $this->resolveFunctionReferencePositions($functionReflection, [$arg], $argScope);
if ($referenceParametersPositions === []) {
// no reference always only write
return \true;
@ -64,31 +59,21 @@ final class VariableToConstantGuard
return !\in_array($argumentPosition, $referenceParametersPositions, \true);
}
/**
* @param Arg[] $args
* @return int[]
*/
private function resolveFunctionReferencePositions(\PHPStan\Reflection\FunctionReflection $functionReflection) : array
private function resolveFunctionReferencePositions(\PHPStan\Reflection\FunctionReflection $functionReflection, array $args, \PHPStan\Analyser\Scope $scope) : array
{
if (isset($this->referencePositionsByFunctionName[$functionReflection->getName()])) {
return $this->referencePositionsByFunctionName[$functionReflection->getName()];
}
// this is needed, as native function reflection does not have access to referenced parameters
if ($functionReflection instanceof \PHPStan\Reflection\Native\NativeFunctionReflection) {
$functionName = $functionReflection->getName();
if (!\function_exists($functionName)) {
return [];
}
$nativeFunctionReflection = new \ReflectionFunction($functionName);
} else {
$nativeFunctionReflection = $this->privatesAccessor->getPrivateProperty($functionReflection, 'reflection');
}
$referencePositions = [];
foreach ($nativeFunctionReflection->getParameters() as $position => $reflectionParameter) {
if (!$reflectionParameter->isPassedByReference()) {
$parametersAcceptor = \PHPStan\Reflection\ParametersAcceptorSelector::selectFromArgs($scope, $args, $functionReflection->getVariants());
foreach ($parametersAcceptor->getParameters() as $position => $parameterReflection) {
/** @var ParameterReflection $parameterReflection */
if (!$parameterReflection->passedByReference()->yes()) {
continue;
}
if (!\is_int($position)) {
throw new \Rector\Core\Exception\ShouldNotHappenException();
}
$referencePositions[] = $position;
}
$this->referencePositionsByFunctionName[$functionReflection->getName()] = $referencePositions;

View File

@ -16,11 +16,11 @@ final class VersionResolver
/**
* @var string
*/
public const PACKAGE_VERSION = '8a546871ef14add3aca94c9df56c99e967d823db';
public const PACKAGE_VERSION = '95ad690d94aacddc72af7ab6c33be0d4d15db22c';
/**
* @var string
*/
public const RELEASE_DATE = '2021-10-30 01:52:01';
public const RELEASE_DATE = '2021-10-30 13:28:28';
public static function resolvePackageVersion() : string
{
$process = new \RectorPrefix20211030\Symfony\Component\Process\Process(['git', 'log', '--pretty="%H"', '-n1', 'HEAD'], __DIR__);

2
vendor/autoload.php vendored
View File

@ -4,4 +4,4 @@
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInitbad39ab764f2bb198fb1e798082b78f0::getLoader();
return ComposerAutoloaderInit49e830dd306fc2dccafaebabb1a1a684::getLoader();

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
class ComposerAutoloaderInitbad39ab764f2bb198fb1e798082b78f0
class ComposerAutoloaderInit49e830dd306fc2dccafaebabb1a1a684
{
private static $loader;
@ -22,15 +22,15 @@ class ComposerAutoloaderInitbad39ab764f2bb198fb1e798082b78f0
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInitbad39ab764f2bb198fb1e798082b78f0', 'loadClassLoader'), true, true);
spl_autoload_register(array('ComposerAutoloaderInit49e830dd306fc2dccafaebabb1a1a684', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
spl_autoload_unregister(array('ComposerAutoloaderInitbad39ab764f2bb198fb1e798082b78f0', 'loadClassLoader'));
spl_autoload_unregister(array('ComposerAutoloaderInit49e830dd306fc2dccafaebabb1a1a684', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInitbad39ab764f2bb198fb1e798082b78f0::getInitializer($loader));
call_user_func(\Composer\Autoload\ComposerStaticInit49e830dd306fc2dccafaebabb1a1a684::getInitializer($loader));
} else {
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
@ -42,19 +42,19 @@ class ComposerAutoloaderInitbad39ab764f2bb198fb1e798082b78f0
$loader->register(true);
if ($useStaticLoader) {
$includeFiles = Composer\Autoload\ComposerStaticInitbad39ab764f2bb198fb1e798082b78f0::$files;
$includeFiles = Composer\Autoload\ComposerStaticInit49e830dd306fc2dccafaebabb1a1a684::$files;
} else {
$includeFiles = require __DIR__ . '/autoload_files.php';
}
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequirebad39ab764f2bb198fb1e798082b78f0($fileIdentifier, $file);
composerRequire49e830dd306fc2dccafaebabb1a1a684($fileIdentifier, $file);
}
return $loader;
}
}
function composerRequirebad39ab764f2bb198fb1e798082b78f0($fileIdentifier, $file)
function composerRequire49e830dd306fc2dccafaebabb1a1a684($fileIdentifier, $file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
require $file;

View File

@ -4,7 +4,7 @@
namespace Composer\Autoload;
class ComposerStaticInitbad39ab764f2bb198fb1e798082b78f0
class ComposerStaticInit49e830dd306fc2dccafaebabb1a1a684
{
public static $files = array (
'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
@ -3889,9 +3889,9 @@ class ComposerStaticInitbad39ab764f2bb198fb1e798082b78f0
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInitbad39ab764f2bb198fb1e798082b78f0::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitbad39ab764f2bb198fb1e798082b78f0::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInitbad39ab764f2bb198fb1e798082b78f0::$classMap;
$loader->prefixLengthsPsr4 = ComposerStaticInit49e830dd306fc2dccafaebabb1a1a684::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit49e830dd306fc2dccafaebabb1a1a684::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit49e830dd306fc2dccafaebabb1a1a684::$classMap;
}, null, ClassLoader::class);
}

View File

@ -833,12 +833,12 @@
"source": {
"type": "git",
"url": "https:\/\/github.com\/phpstan\/phpstan.git",
"reference": "9529499b60b1846099c588a8a46abfca6fc8e610"
"reference": "4ab973e0d2b68c401288f1fc1114b38ed7cff62c"
},
"dist": {
"type": "zip",
"url": "https:\/\/api.github.com\/repos\/phpstan\/phpstan\/zipball\/9529499b60b1846099c588a8a46abfca6fc8e610",
"reference": "9529499b60b1846099c588a8a46abfca6fc8e610",
"url": "https:\/\/api.github.com\/repos\/phpstan\/phpstan\/zipball\/4ab973e0d2b68c401288f1fc1114b38ed7cff62c",
"reference": "4ab973e0d2b68c401288f1fc1114b38ed7cff62c",
"shasum": ""
},
"require": {
@ -847,7 +847,7 @@
"conflict": {
"phpstan\/phpstan-shim": "*"
},
"time": "2021-10-29T22:23:14+00:00",
"time": "2021-10-30T12:53:01+00:00",
"default-branch": true,
"bin": [
"phpstan",
@ -4278,12 +4278,12 @@
"source": {
"type": "git",
"url": "https:\/\/github.com\/symplify\/package-builder.git",
"reference": "2103b1c4b310a8ea997efbff775e4a1252624a9d"
"reference": "09fac6ba61ebe908911f7312b7b6449dcd3a57d1"
},
"dist": {
"type": "zip",
"url": "https:\/\/api.github.com\/repos\/symplify\/package-builder\/zipball\/2103b1c4b310a8ea997efbff775e4a1252624a9d",
"reference": "2103b1c4b310a8ea997efbff775e4a1252624a9d",
"url": "https:\/\/api.github.com\/repos\/symplify\/package-builder\/zipball\/09fac6ba61ebe908911f7312b7b6449dcd3a57d1",
"reference": "09fac6ba61ebe908911f7312b7b6449dcd3a57d1",
"shasum": ""
},
"require": {
@ -4330,7 +4330,7 @@
"require-dev": {
"phpunit\/phpunit": "^9.5"
},
"time": "2021-10-29T18:16:12+00:00",
"time": "2021-10-30T00:10:09+00:00",
"default-branch": true,
"type": "library",
"extra": {
@ -4547,12 +4547,12 @@
"source": {
"type": "git",
"url": "https:\/\/github.com\/symplify\/skipper.git",
"reference": "6056b446277387d11e44e681fbd8b6c79aa838f3"
"reference": "e75c97e804ea1b30a3c3571c363da1300d70f6b8"
},
"dist": {
"type": "zip",
"url": "https:\/\/api.github.com\/repos\/symplify\/skipper\/zipball\/6056b446277387d11e44e681fbd8b6c79aa838f3",
"reference": "6056b446277387d11e44e681fbd8b6c79aa838f3",
"url": "https:\/\/api.github.com\/repos\/symplify\/skipper\/zipball\/e75c97e804ea1b30a3c3571c363da1300d70f6b8",
"reference": "e75c97e804ea1b30a3c3571c363da1300d70f6b8",
"shasum": ""
},
"require": {
@ -4597,7 +4597,7 @@
"require-dev": {
"phpunit\/phpunit": "^9.5"
},
"time": "2021-10-29T18:18:19+00:00",
"time": "2021-10-30T00:10:41+00:00",
"default-branch": true,
"type": "library",
"extra": {

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -1,16 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEE0yaA1ZV9xxFr4pwUzxoQjQ565yAFAmF8CUkACgkQzxoQjQ56
5yCn5A//Zysf4u2SQd14S53OpBVOwaoEerYhAYY81H8k3KXLAvuR+xgBD7MbOOWF
d/dX0lTDLaGGHdqb27NHY6EZNHL2/fO++t3H574YPDwkxWaEPBWHAw8f6eJ+eV5Y
G3Bbce1GpjX3lcmJmxMn/XdxAGtLIHurG74FlWv12IkV/B43hBksinhQYMeuma62
i9Cr15NoFU2dxJyOSUIyddZTo7n3gCz2OuoYK17fVufDjd3V+4I9Ydwii9ns9/Tk
7S68UhK9MHUIMMLr9IO8N7Dk3xIt2j2nY5/Ur7Si3xNUlLlRHs/b9vbDS8Jwzqc5
XoV6a5/hHfHN83XeCFiy/UelNpliPbxt08TLShzOLwgtPQrgEWFdyUG+gr7HCPD4
QI8F7APtwr6tDLcGjT14fsNRek/xV/xAspaA50PGEJdpl9niO/+zymKeweL9X8KA
SxTHledPryvk0bqrW5L3kSPO6pimXAOC8UBiqrnkClnHKG+AZr9WIp7IOzmFsZeB
gfqrB10tR0RjYKjrDts9NjAz8oYl/UOOC38jXZIriv8Yt2yISZyNF5QTBjzLJhOZ
0clYppJF7YBGMLMrJo0/SvQCbshEw+Oy2IKna17l89ppDT+xgnuNbAGMezKCv3O0
yjCYI3/KifWiAAzel5G1GHy0wrYhNNaiKCaQgkFWnveqpcvv1g4=
=swKV
iQIzBAABCgAdFiEE0yaA1ZV9xxFr4pwUzxoQjQ565yAFAmF9QCwACgkQzxoQjQ56
5yBjFg//dTV2vfqTjqie80X2xoqVCycF+7xqMvUWaGrFwY/kkS7rkSYx6f3DCLdj
0fi+WsV2SWbtwTgBzShNuaP7cZeFwQFrSNCJLzQeHNtx0GvBUfgFrSUuu4M+eC1z
M+9DQ4bXGpePgRMnv7J0j61ik8wpgJxSCQUfVST+Lgx/xYnmuVxwAJRq20uVfDom
GnuWpCMbt8i35ktzAuY1AZf5SD8dJD2AArQ8sAluBdS5Qdd7rALB2mgynLcwQuj/
in6IfSqmKHb4fkyxTY52gBl0LgYNZ1lZeHSUze1JpR12B2N/WLEakTRrt0f4vv7q
ZVycYm3YmCJAraeXps0VMZ6VlVCAlMS1a8je8422aO+ffmjTd+b520pjLie6BYLi
/9rD6q8funPAGow4Sz8wCynCI3v5bGx9in9O05UKpqy6aFPnNDcyL9+7tbexJXNL
FveNFTyKk5OMZ/lhh7zHOJ3fGYh3xJa7qUoyoYpCEtkiMB4eqBsoVIyuvjXGF4HS
Gp6ayJyClcC8S6wfnnz+WeN5FhEbg6kfPDF+aksiyKVZTlO4M3VbEeY2dUWfehyE
oaqZa2Z6Y7QIARhdZvH/xyonOOFMXCNivWqjTzCdnxBYQhrJRnp+BJeCR5KbrU3E
F1AbASWfWgfmkQwdrLeAKPBaqKiCicI4GPvF145iFh7xxf140S8=
=fGFI
-----END PGP SIGNATURE-----

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('RectorPrefix20211030\AutoloadIncluder');
}
if (!class_exists('ComposerAutoloaderInitbad39ab764f2bb198fb1e798082b78f0', false) && !interface_exists('ComposerAutoloaderInitbad39ab764f2bb198fb1e798082b78f0', false) && !trait_exists('ComposerAutoloaderInitbad39ab764f2bb198fb1e798082b78f0', false)) {
spl_autoload_call('RectorPrefix20211030\ComposerAutoloaderInitbad39ab764f2bb198fb1e798082b78f0');
if (!class_exists('ComposerAutoloaderInit49e830dd306fc2dccafaebabb1a1a684', false) && !interface_exists('ComposerAutoloaderInit49e830dd306fc2dccafaebabb1a1a684', false) && !trait_exists('ComposerAutoloaderInit49e830dd306fc2dccafaebabb1a1a684', false)) {
spl_autoload_call('RectorPrefix20211030\ComposerAutoloaderInit49e830dd306fc2dccafaebabb1a1a684');
}
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('RectorPrefix20211030\Helmich\TypoScriptParser\Parser\AST\Statement');
@ -3306,9 +3306,9 @@ if (!function_exists('print_node')) {
return \RectorPrefix20211030\print_node(...func_get_args());
}
}
if (!function_exists('composerRequirebad39ab764f2bb198fb1e798082b78f0')) {
function composerRequirebad39ab764f2bb198fb1e798082b78f0() {
return \RectorPrefix20211030\composerRequirebad39ab764f2bb198fb1e798082b78f0(...func_get_args());
if (!function_exists('composerRequire49e830dd306fc2dccafaebabb1a1a684')) {
function composerRequire49e830dd306fc2dccafaebabb1a1a684() {
return \RectorPrefix20211030\composerRequire49e830dd306fc2dccafaebabb1a1a684(...func_get_args());
}
}
if (!function_exists('parseArgs')) {

View File

@ -23,8 +23,8 @@ final class AutowireInterfacesCompilerPass implements \RectorPrefix20211030\Symf
*/
public function process($containerBuilder) : void
{
$containerBuilderDefinitions = $containerBuilder->getDefinitions();
foreach ($containerBuilderDefinitions as $definition) {
$definitions = $containerBuilder->getDefinitions();
foreach ($definitions as $definition) {
foreach ($this->typesToAutowire as $typeToAutowire) {
if (!\is_a((string) $definition->getClass(), $typeToAutowire, \true)) {
continue;

View File

@ -16,12 +16,12 @@ final class FileInfoMatcher
$this->fnMatchPathNormalizer = $fnMatchPathNormalizer;
}
/**
* @param string[] $filePattern
* @param string[] $filePatterns
*/
public function doesFileInfoMatchPatterns(\Symplify\SmartFileSystem\SmartFileInfo $smartFileInfo, array $filePattern) : bool
public function doesFileInfoMatchPatterns(\Symplify\SmartFileSystem\SmartFileInfo $smartFileInfo, array $filePatterns) : bool
{
foreach ($filePattern as $onlyFile) {
if ($this->doesFileInfoMatchPattern($smartFileInfo, $onlyFile)) {
foreach ($filePatterns as $filePattern) {
if ($this->doesFileInfoMatchPattern($smartFileInfo, $filePattern)) {
return \true;
}
}