Updated Rector to commit 9c6f41e6c0b943912ca1fd2b6a289106b556efbe

9c6f41e6c0 Fix external packages bleeding edge includes (#3389)
This commit is contained in:
Tomas Votruba 2023-02-17 19:53:09 +00:00
parent d17680f2a5
commit 2a475d5b03
14 changed files with 139 additions and 51 deletions

View File

@ -0,0 +1,48 @@
<?php
declare (strict_types=1);
namespace Rector\NodeTypeResolver\DependencyInjection;
use RectorPrefix202302\Nette\Utils\FileSystem;
use RectorPrefix202302\Nette\Utils\Strings;
/**
* Prevents failing include of bleeding edge in of phpstan extensions.
* @see https://github.com/rectorphp/rector/issues/2431
*
* Do not delete this. It's not tested here, but is needed to avoid this rare case happen. It's not possible to solve otherwise.
* @see https://github.com/rectorphp/rector-src/commit/70fb9af2fdfa55db63c68c6dac6723fe55cec1a0
* @eee https://github.com/rectorphp/rector/pull/2550
*
* @see \Rector\Tests\NodeTypeResolver\DependencyInjection\BleedingEdgeIncludePurifier\BleedingEdgeIncludePurifierTest
*/
final class BleedingEdgeIncludePurifier
{
/**
* @see https://regex101.com/r/CWADBe/2
* @var string
*/
private const BLEEDING_EDGE_REGEX = '#\\n\\s+-(.*?)bleedingEdge\\.neon[\'|"]?#';
public function purifyConfigFile(string $filePath) : ?string
{
// must be neon file
if (\substr_compare($filePath, '.neon', -\strlen('.neon')) !== 0) {
return null;
}
$fileContents = FileSystem::read($filePath);
// bleeding edge clean out, see https://github.com/rectorphp/rector/issues/2431
$matches = Strings::match($fileContents, self::BLEEDING_EDGE_REGEX);
if ($matches === null) {
return null;
}
$temporaryFilePath = $this->createTemporaryFilePath($filePath);
$clearedFileContents = Strings::replace($fileContents, self::BLEEDING_EDGE_REGEX);
FileSystem::write($temporaryFilePath, $clearedFileContents);
return $temporaryFilePath;
}
private function createTemporaryFilePath(string $filePath) : string
{
$fileDirectory = \dirname($filePath);
$baseFileName = \pathinfo($filePath, \PATHINFO_BASENAME);
return $fileDirectory . '/temp_' . $baseFileName;
}
}

View File

@ -16,8 +16,11 @@ use PHPStan\Reflection\ReflectionProvider;
use Rector\Core\Configuration\Option;
use Rector\Core\Configuration\Parameter\ParameterProvider;
use Rector\NodeTypeResolver\Reflection\BetterReflection\SourceLocatorProvider\DynamicSourceLocatorProvider;
use RectorPrefix202302\Symfony\Component\Filesystem\Filesystem;
/**
* Factory so Symfony app can use services from PHPStan container
*
* @see \Rector\NodeTypeResolver\DependencyInjection\PHPStanServicesFactory
*/
final class PHPStanServicesFactory
{
@ -26,20 +29,36 @@ final class PHPStanServicesFactory
* @var \PHPStan\DependencyInjection\Container
*/
private $container;
public function __construct(ParameterProvider $parameterProvider, \Rector\NodeTypeResolver\DependencyInjection\PHPStanExtensionsConfigResolver $phpStanExtensionsConfigResolver)
/**
* @readonly
* @var \Rector\Core\Configuration\Parameter\ParameterProvider
*/
private $parameterProvider;
/**
* @readonly
* @var \Rector\NodeTypeResolver\DependencyInjection\PHPStanExtensionsConfigResolver
*/
private $phpStanExtensionsConfigResolver;
public function __construct(ParameterProvider $parameterProvider, \Rector\NodeTypeResolver\DependencyInjection\PHPStanExtensionsConfigResolver $phpStanExtensionsConfigResolver, \Rector\NodeTypeResolver\DependencyInjection\BleedingEdgeIncludePurifier $bleedingEdgeIncludePurifier)
{
$containerFactory = new ContainerFactory(\getcwd());
$additionalConfigFiles = [];
if ($parameterProvider->hasParameter(Option::PHPSTAN_FOR_RECTOR_PATH)) {
$additionalConfigFiles[] = $parameterProvider->provideStringParameter(Option::PHPSTAN_FOR_RECTOR_PATH);
$this->parameterProvider = $parameterProvider;
$this->phpStanExtensionsConfigResolver = $phpStanExtensionsConfigResolver;
$additionalConfigFiles = $this->resolveAdditionalConfigFiles();
$purifiedConfigFiles = [];
foreach ($additionalConfigFiles as $key => $additionalConfigFile) {
$purifiedConfigFile = $bleedingEdgeIncludePurifier->purifyConfigFile($additionalConfigFile);
// nothing was changed
if ($purifiedConfigFile === null) {
continue;
}
$additionalConfigFiles[$key] = $purifiedConfigFile;
$purifiedConfigFiles[] = $purifiedConfigFile;
}
$additionalConfigFiles[] = __DIR__ . '/../../../config/phpstan/static-reflection.neon';
$additionalConfigFiles[] = __DIR__ . '/../../../config/phpstan/better-infer.neon';
$additionalConfigFiles[] = __DIR__ . '/../../../config/phpstan/parser.neon';
$extensionConfigFiles = $phpStanExtensionsConfigResolver->resolve();
$additionalConfigFiles = \array_merge($additionalConfigFiles, $extensionConfigFiles);
$existingAdditionalConfigFiles = \array_filter($additionalConfigFiles, 'file_exists');
$this->container = $containerFactory->create(\sys_get_temp_dir(), $existingAdditionalConfigFiles, []);
$containerFactory = new ContainerFactory(\getcwd());
$this->container = $containerFactory->create(\sys_get_temp_dir(), $additionalConfigFiles, []);
// clear temporary files, after container is created
$filesystem = new Filesystem();
$filesystem->remove($purifiedConfigFiles);
}
/**
* @api
@ -104,4 +123,20 @@ final class PHPStanServicesFactory
{
return $this->container->getByType(DynamicSourceLocatorProvider::class);
}
/**
* @return string[]
*/
private function resolveAdditionalConfigFiles() : array
{
$additionalConfigFiles = [];
if ($this->parameterProvider->hasParameter(Option::PHPSTAN_FOR_RECTOR_PATH)) {
$additionalConfigFiles[] = $this->parameterProvider->provideStringParameter(Option::PHPSTAN_FOR_RECTOR_PATH);
}
$additionalConfigFiles[] = __DIR__ . '/../../../config/phpstan/static-reflection.neon';
$additionalConfigFiles[] = __DIR__ . '/../../../config/phpstan/better-infer.neon';
$additionalConfigFiles[] = __DIR__ . '/../../../config/phpstan/parser.neon';
$extensionConfigFiles = $this->phpStanExtensionsConfigResolver->resolve();
$additionalConfigFiles = \array_merge($additionalConfigFiles, $extensionConfigFiles);
return \array_filter($additionalConfigFiles, 'file_exists');
}
}

View File

@ -65,6 +65,6 @@ CODE_SAMPLE
foreach ($allProperties as $allProperty) {
$nextProperties[] = new Property($node->flags, [$allProperty], $node->getAttributes());
}
return \array_merge([$node], \is_array($nextProperties) ? $nextProperties : \iterator_to_array($nextProperties));
return \array_merge([$node], $nextProperties);
}
}

View File

@ -19,12 +19,12 @@ final class VersionResolver
* @api
* @var string
*/
public const PACKAGE_VERSION = 'd8aa22b6713269ddafa80679777b3de9a4f456dd';
public const PACKAGE_VERSION = '9c6f41e6c0b943912ca1fd2b6a289106b556efbe';
/**
* @api
* @var string
*/
public const RELEASE_DATE = '2023-02-17 03:35:31';
public const RELEASE_DATE = '2023-02-17 19:47:24';
/**
* @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 ComposerAutoloaderInit6d6c25c9d00903292b712e7cb95efb28::getLoader();
return ComposerAutoloaderInitcfab34890a29bee73cf4939ee75786e1::getLoader();

View File

@ -1965,6 +1965,7 @@ return array(
'Rector\\NodeRemoval\\NodeRemover' => $baseDir . '/packages/NodeRemoval/NodeRemover.php',
'Rector\\NodeTypeResolver\\Contract\\NodeTypeResolverInterface' => $baseDir . '/packages/NodeTypeResolver/Contract/NodeTypeResolverInterface.php',
'Rector\\NodeTypeResolver\\Contract\\SourceLocatorProviderInterface' => $baseDir . '/packages/NodeTypeResolver/Contract/SourceLocatorProviderInterface.php',
'Rector\\NodeTypeResolver\\DependencyInjection\\BleedingEdgeIncludePurifier' => $baseDir . '/packages/NodeTypeResolver/DependencyInjection/BleedingEdgeIncludePurifier.php',
'Rector\\NodeTypeResolver\\DependencyInjection\\PHPStanExtensionsConfigResolver' => $baseDir . '/packages/NodeTypeResolver/DependencyInjection/PHPStanExtensionsConfigResolver.php',
'Rector\\NodeTypeResolver\\DependencyInjection\\PHPStanServicesFactory' => $baseDir . '/packages/NodeTypeResolver/DependencyInjection/PHPStanServicesFactory.php',
'Rector\\NodeTypeResolver\\MethodParameterTypeResolver' => $baseDir . '/packages/NodeTypeResolver/MethodParameterTypeResolver.php',

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
class ComposerAutoloaderInit6d6c25c9d00903292b712e7cb95efb28
class ComposerAutoloaderInitcfab34890a29bee73cf4939ee75786e1
{
private static $loader;
@ -22,17 +22,17 @@ class ComposerAutoloaderInit6d6c25c9d00903292b712e7cb95efb28
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInit6d6c25c9d00903292b712e7cb95efb28', 'loadClassLoader'), true, true);
spl_autoload_register(array('ComposerAutoloaderInitcfab34890a29bee73cf4939ee75786e1', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInit6d6c25c9d00903292b712e7cb95efb28', 'loadClassLoader'));
spl_autoload_unregister(array('ComposerAutoloaderInitcfab34890a29bee73cf4939ee75786e1', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit6d6c25c9d00903292b712e7cb95efb28::getInitializer($loader));
call_user_func(\Composer\Autoload\ComposerStaticInitcfab34890a29bee73cf4939ee75786e1::getInitializer($loader));
$loader->setClassMapAuthoritative(true);
$loader->register(true);
$filesToLoad = \Composer\Autoload\ComposerStaticInit6d6c25c9d00903292b712e7cb95efb28::$files;
$filesToLoad = \Composer\Autoload\ComposerStaticInitcfab34890a29bee73cf4939ee75786e1::$files;
$requireFile = \Closure::bind(static function ($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 ComposerStaticInit6d6c25c9d00903292b712e7cb95efb28
class ComposerStaticInitcfab34890a29bee73cf4939ee75786e1
{
public static $files = array (
'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php',
@ -2212,6 +2212,7 @@ class ComposerStaticInit6d6c25c9d00903292b712e7cb95efb28
'Rector\\NodeRemoval\\NodeRemover' => __DIR__ . '/../..' . '/packages/NodeRemoval/NodeRemover.php',
'Rector\\NodeTypeResolver\\Contract\\NodeTypeResolverInterface' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/Contract/NodeTypeResolverInterface.php',
'Rector\\NodeTypeResolver\\Contract\\SourceLocatorProviderInterface' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/Contract/SourceLocatorProviderInterface.php',
'Rector\\NodeTypeResolver\\DependencyInjection\\BleedingEdgeIncludePurifier' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/DependencyInjection/BleedingEdgeIncludePurifier.php',
'Rector\\NodeTypeResolver\\DependencyInjection\\PHPStanExtensionsConfigResolver' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/DependencyInjection/PHPStanExtensionsConfigResolver.php',
'Rector\\NodeTypeResolver\\DependencyInjection\\PHPStanServicesFactory' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/DependencyInjection/PHPStanServicesFactory.php',
'Rector\\NodeTypeResolver\\MethodParameterTypeResolver' => __DIR__ . '/../..' . '/packages/NodeTypeResolver/MethodParameterTypeResolver.php',
@ -3123,9 +3124,9 @@ class ComposerStaticInit6d6c25c9d00903292b712e7cb95efb28
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInit6d6c25c9d00903292b712e7cb95efb28::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit6d6c25c9d00903292b712e7cb95efb28::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit6d6c25c9d00903292b712e7cb95efb28::$classMap;
$loader->prefixLengthsPsr4 = ComposerStaticInitcfab34890a29bee73cf4939ee75786e1::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitcfab34890a29bee73cf4939ee75786e1::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInitcfab34890a29bee73cf4939ee75786e1::$classMap;
}, null, ClassLoader::class);
}

View File

@ -869,17 +869,17 @@
},
{
"name": "phpstan\/phpstan",
"version": "1.9.17",
"version_normalized": "1.9.17.0",
"version": "1.9.18",
"version_normalized": "1.9.18.0",
"source": {
"type": "git",
"url": "https:\/\/github.com\/phpstan\/phpstan.git",
"reference": "204e459e7822f2c586463029f5ecec31bb45a1f2"
"reference": "f2d5cf71be91172a57c649770b73c20ebcffb0bf"
},
"dist": {
"type": "zip",
"url": "https:\/\/api.github.com\/repos\/phpstan\/phpstan\/zipball\/204e459e7822f2c586463029f5ecec31bb45a1f2",
"reference": "204e459e7822f2c586463029f5ecec31bb45a1f2",
"url": "https:\/\/api.github.com\/repos\/phpstan\/phpstan\/zipball\/f2d5cf71be91172a57c649770b73c20ebcffb0bf",
"reference": "f2d5cf71be91172a57c649770b73c20ebcffb0bf",
"shasum": ""
},
"require": {
@ -888,7 +888,7 @@
"conflict": {
"phpstan\/phpstan-shim": "*"
},
"time": "2023-02-08T12:25:00+00:00",
"time": "2023-02-17T15:01:27+00:00",
"bin": [
"phpstan",
"phpstan.phar"
@ -911,7 +911,7 @@
],
"support": {
"issues": "https:\/\/github.com\/phpstan\/phpstan\/issues",
"source": "https:\/\/github.com\/phpstan\/phpstan\/tree\/1.9.17"
"source": "https:\/\/github.com\/phpstan\/phpstan\/tree\/1.9.18"
},
"funding": [
{
@ -2125,12 +2125,12 @@
"source": {
"type": "git",
"url": "https:\/\/github.com\/rectorphp\/rector-symfony.git",
"reference": "9f9cd3af37829eb4a4384de514edb6a27090aed1"
"reference": "3c56d7b4a717e405313d28e63113f4c9b59cbb71"
},
"dist": {
"type": "zip",
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-symfony\/zipball\/9f9cd3af37829eb4a4384de514edb6a27090aed1",
"reference": "9f9cd3af37829eb4a4384de514edb6a27090aed1",
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-symfony\/zipball\/3c56d7b4a717e405313d28e63113f4c9b59cbb71",
"reference": "3c56d7b4a717e405313d28e63113f4c9b59cbb71",
"shasum": ""
},
"require": {
@ -2160,7 +2160,7 @@
"tomasvotruba\/type-coverage": "^0.0.9",
"tomasvotruba\/unused-public": "^0.0.34"
},
"time": "2023-02-16T08:36:36+00:00",
"time": "2023-02-17T19:28:57+00:00",
"default-branch": true,
"type": "rector-extension",
"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-----
iQIzBAABCgAdFiEE0yaA1ZV9xxFr4pwUzxoQjQ565yAFAmPjlIQACgkQzxoQjQ56
5yB1xQ/+Kz+VRo1rx8OsL3lOZhbmGalg8QC1+r9SfoBI2jxi/IqG4olCH1b9yXiE
xaJU9xC5H+258a1JtfeUszm0zXgt/CHIHSVq3VAMlEajMbOHDSy7i9GrRA9OmG0H
5AbwB9tql4qZ0cj1SriS2j8VolUjb1C1aSJNAwMbBWbd1QlZqGLJLgo0rvVnN71h
kK5aYSZzV6XcbrJpNwWNjI9KNhbSlwHfWvsl2oW7Pl/ydyaWY+ZmL+i9MOT+TAuu
jJFzKY98HQk3ESOpRn2wg0tKU9qzzl5d5/3P03iY/o0VCHnj8aNSdXy+6aBS81n4
KPvBRclcwsncmBB4HNZxOpExVR2flaUM21ebSnmVv7Zofjcl/W+h49lrEAWFBjgy
PkdAjlKSPOUYgqSSftKitDHFXtNOYi+qNot0gPEcDezWVOwWY/UorqL0V/PQp4bI
SCKnkgw4SWDFGFY3R/m7qet0oomOvp6sTJZb/B37GZ6l9KKu4lXLsS8XRXmCGzTW
Wu/taFkP35LYDQ9Y+HNzYXzNKFalCbJNj1Qdx31OvthBfK3/Jk0gG1YRrE3+0sAa
J3qJX4nC/Zm7oK9wj5CvKMTS9tewbOBLgYNF1JuI2dlrhnc0VZXCdvg3M8SjI1zH
5752T9NuxK5ot1i7TPcPHj8ln4t35aUT8c0f9S7ruFS0icobdyE=
=SwMZ
iQIzBAABCgAdFiEE0yaA1ZV9xxFr4pwUzxoQjQ565yAFAmPvlrIACgkQzxoQjQ56
5yBxcxAAh+hB4rbyLWisLHJcB8o4oKu0Sgal+6g9M781kgISLnMq2sVFnzWjPAO6
XryxjbBgrVFhre8z9tQieJ9fJtiqTBTcz1Lt2yu2Hf1aril0vPv3z2ldaVx7ymLt
kBat8dxgR4wMC7ugEvQ6Vwxf3S0DD5qFO5njsJfU/HWH5VlUjN1Kv2gxJd2tSJwA
2WVRPWT+bE29mrhfOp3qlWAM7oRQAx2jwvar813XNGuniisBsADxydSwiaog+YNG
Gap8WGK7Pf9JHZ1R0f+HHhr21/HnzssHZnN3uGr5flcv9mOi8E1g486ztcr2xnlo
VOEbJY46bQlEcKhVueXUiiVnjCVGDBV5luR8RRa/bHzVFHQloBnC2gF1oLTxKIc6
Gf2dLB/kR0WX4L3Bw1vKn8j6JQDBwgchQZSBifErzBJksv04ZcjRol41StUZJKB5
Eo0pW5UZErq9YguBHf/Q0kZR1A3EeViqTlPLGnI4yM/ugGJZL9QAX+5poM3qYOiz
PgkBBZV+tubhuiCORzU7xfM5XrDyA4J5e3UBUKXZbp5yS+HKOuq8nG/3PsuBFUK/
IlZaGvlLLEWIoxpBRywIOkaID4DsU87izUfCoGTsCm+3On8StzIrGnhSWeETLWxw
dooaydsxSmrgK1yi5oTLqG8mkZ2GbNTyh4E+KjaOvDGAhdf24VI=
=12HF
-----END PGP SIGNATURE-----

View File

@ -9,7 +9,7 @@ namespace Rector\RectorInstaller;
*/
final class GeneratedConfig
{
public const EXTENSIONS = array('rector/rector-doctrine' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-doctrine', 'relative_install_path' => '../../rector-doctrine', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main ea9cf46'), 'rector/rector-downgrade-php' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-downgrade-php', 'relative_install_path' => '../../rector-downgrade-php', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main fb0167c'), 'rector/rector-phpunit' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-phpunit', 'relative_install_path' => '../../rector-phpunit', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main 13e842b'), 'rector/rector-symfony' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-symfony', 'relative_install_path' => '../../rector-symfony', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main 9f9cd3a'));
public const EXTENSIONS = array('rector/rector-doctrine' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-doctrine', 'relative_install_path' => '../../rector-doctrine', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main ea9cf46'), 'rector/rector-downgrade-php' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-downgrade-php', 'relative_install_path' => '../../rector-downgrade-php', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main fb0167c'), 'rector/rector-phpunit' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-phpunit', 'relative_install_path' => '../../rector-phpunit', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main 13e842b'), 'rector/rector-symfony' => array('install_path' => '/home/runner/work/rector-src/rector-src/vendor/rector/rector-symfony', 'relative_install_path' => '../../rector-symfony', 'extra' => array('includes' => array(0 => 'config/config.php')), 'version' => 'dev-main 3c56d7b'));
private function __construct()
{
}

View File

@ -61,6 +61,9 @@ final class RedirectToRouteRector extends AbstractRector
if (!$this->isName($argumentValue->name, 'generateUrl')) {
return null;
}
if (!$this->isName($argumentValue->var, 'this')) {
return null;
}
if (!$this->isDefaultReferenceType($argumentValue)) {
return null;
}