Skip to content

Commit

Permalink
Updated Rector to commit 9c6f41e6c0b943912ca1fd2b6a289106b556efbe
Browse files Browse the repository at this point in the history
rectorphp/rector-src@9c6f41e Fix external packages bleeding edge includes (#3389)
  • Loading branch information
TomasVotruba committed Feb 17, 2023
1 parent d17680f commit 2a475d5
Show file tree
Hide file tree
Showing 14 changed files with 139 additions and 51 deletions.
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,11 @@
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
{
Expand All @@ -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
Expand Down Expand Up @@ -104,4 +123,20 @@ public function createDynamicSourceLocatorProvider() : DynamicSourceLocatorProvi
{
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');
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,6 @@ public function refactor(Node $node) : ?array
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);
}
}
4 changes: 2 additions & 2 deletions src/Application/VersionResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
*/
Expand Down
2 changes: 1 addition & 1 deletion vendor/autoload.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@

require_once __DIR__ . '/composer/autoload_real.php';

return ComposerAutoloaderInit6d6c25c9d00903292b712e7cb95efb28::getLoader();
return ComposerAutoloaderInitcfab34890a29bee73cf4939ee75786e1::getLoader();
1 change: 1 addition & 0 deletions vendor/composer/autoload_classmap.php
Original file line number Diff line number Diff line change
Expand Up @@ -1965,6 +1965,7 @@
'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',
Expand Down
10 changes: 5 additions & 5 deletions vendor/composer/autoload_real.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

// autoload_real.php @generated by Composer

class ComposerAutoloaderInit6d6c25c9d00903292b712e7cb95efb28
class ComposerAutoloaderInitcfab34890a29bee73cf4939ee75786e1
{
private static $loader;

Expand All @@ -22,17 +22,17 @@ public static function getLoader()
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;
Expand Down
9 changes: 5 additions & 4 deletions vendor/composer/autoload_static.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

namespace Composer\Autoload;

class ComposerStaticInit6d6c25c9d00903292b712e7cb95efb28
class ComposerStaticInitcfab34890a29bee73cf4939ee75786e1
{
public static $files = array (
'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php',
Expand Down Expand Up @@ -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',
Expand Down Expand Up @@ -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);
}
Expand Down
22 changes: 11 additions & 11 deletions vendor/composer/installed.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": {
Expand All @@ -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"
Expand All @@ -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": [
{
Expand Down Expand Up @@ -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": {
Expand Down Expand Up @@ -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": {
Expand Down
Loading

0 comments on commit 2a475d5

Please sign in to comment.