From 9fa2fd0d28da5f9f752bbaafd02bb15f3b60019c Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Fri, 3 Jan 2020 20:47:07 +0100 Subject: [PATCH 1/2] add bleeding edge for #2431 --- phpstan.neon | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/phpstan.neon b/phpstan.neon index 3036261e701..91f8fb3d482 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,7 +1,8 @@ includes: - - 'utils/PHPStanExtensions/config/phpstan-extensions.neon' - - 'vendor/symplify/phpstan-extensions/config/config.neon' - - 'vendor/thecodingmachine/phpstan-strict-rules/phpstan-strict-rules.neon' + - 'utils/PHPStanExtensions/config/phpstan-extensions.neon' + - 'vendor/symplify/phpstan-extensions/config/config.neon' + - 'vendor/thecodingmachine/phpstan-strict-rules/phpstan-strict-rules.neon' + - 'vendor/phpstan/phpstan/conf/bleedingEdge.neon' parameters: checkGenericClassInNonGenericObjectType: false From 70fb9af2fdfa55db63c68c6dac6723fe55cec1a0 Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Fri, 3 Jan 2020 21:35:16 +0100 Subject: [PATCH 2/2] fix phar bleeding edge case phpstan bug --- .../PHPStanServicesFactory.php | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/packages/NodeTypeResolver/src/DependencyInjection/PHPStanServicesFactory.php b/packages/NodeTypeResolver/src/DependencyInjection/PHPStanServicesFactory.php index 27a22e8a320..b63044c5200 100644 --- a/packages/NodeTypeResolver/src/DependencyInjection/PHPStanServicesFactory.php +++ b/packages/NodeTypeResolver/src/DependencyInjection/PHPStanServicesFactory.php @@ -4,6 +4,8 @@ declare(strict_types=1); namespace Rector\NodeTypeResolver\DependencyInjection; +use Nette\Utils\FileSystem; +use Nette\Utils\Strings; use PHPStan\Analyser\NodeScopeResolver; use PHPStan\Analyser\ScopeFactory; use PHPStan\Analyser\TypeSpecifier; @@ -13,6 +15,12 @@ use PHPStan\DependencyInjection\ContainerFactory; final class PHPStanServicesFactory { + /** + * @see https://regex101.com/r/CWADBe/2 + * @var string + */ + private const BLEEDING_EDGE_PATTERN = '#\n\s+-(.*?)bleedingEdge\.neon[\'|"]?#'; + /** * @var Container */ @@ -31,14 +39,31 @@ final class PHPStanServicesFactory $additionalConfigFiles[] = $phpstanPhpunitExtensionConfig; } + $temporaryPhpstanNeon = null; + $currentProjectConfigFile = $currentWorkingDirectory . '/phpstan.neon'; if (file_exists($currentProjectConfigFile)) { - $additionalConfigFiles[] = $currentProjectConfigFile; + $phpstanNeonContent = FileSystem::read($currentProjectConfigFile); + + // bleeding edge clean out, see https://github.com/rectorphp/rector/issues/2431 + if (Strings::match($phpstanNeonContent, self::BLEEDING_EDGE_PATTERN)) { + $temporaryPhpstanNeon = $currentWorkingDirectory . '/rector-temp-phpstan.neon'; + $clearedPhpstanNeonContent = Strings::replace($phpstanNeonContent, self::BLEEDING_EDGE_PATTERN); + FileSystem::write($temporaryPhpstanNeon, $clearedPhpstanNeonContent); + + $additionalConfigFiles[] = $temporaryPhpstanNeon; + } else { + $additionalConfigFiles[] = $currentProjectConfigFile; + } } $additionalConfigFiles[] = __DIR__ . '/../../config/phpstan/type-extensions.neon'; - $this->container = $containerFactory->create(sys_get_temp_dir(), $additionalConfigFiles, []); + + // clear bleeding edge fallback + if ($temporaryPhpstanNeon !== null) { + FileSystem::delete($temporaryPhpstanNeon); + } } public function createBroker(): Broker