diff --git a/composer.json b/composer.json index 47b452cbaa35..e428b1163da4 100644 --- a/composer.json +++ b/composer.json @@ -21,7 +21,7 @@ "nikic/php-parser": "^4.3", "ondram/ci-detector": "^3.1", "phpstan/phpdoc-parser": "^0.4", - "phpstan/phpstan": "0.12.3", + "phpstan/phpstan": "^0.12.4", "phpstan/phpstan-phpunit": "^0.12", "sebastian/diff": "^3.0", "symfony/console": "^4.4|^5.0", diff --git a/packages/NodeTypeResolver/config/config.yaml b/packages/NodeTypeResolver/config/config.yaml index 5bc967efd348..5f4c7bfa4702 100644 --- a/packages/NodeTypeResolver/config/config.yaml +++ b/packages/NodeTypeResolver/config/config.yaml @@ -27,3 +27,6 @@ services: PHPStan\Analyser\ScopeFactory: factory: ['@Rector\NodeTypeResolver\DependencyInjection\PHPStanServicesFactory', 'createScopeFactory'] + + PHPStan\DependencyInjection\Container: + factory: ['@Rector\NodeTypeResolver\DependencyInjection\PHPStanServicesFactory', 'createContainer'] diff --git a/packages/NodeTypeResolver/src/DependencyInjection/PHPStanServicesFactory.php b/packages/NodeTypeResolver/src/DependencyInjection/PHPStanServicesFactory.php index f233a815683f..edb96d04a410 100644 --- a/packages/NodeTypeResolver/src/DependencyInjection/PHPStanServicesFactory.php +++ b/packages/NodeTypeResolver/src/DependencyInjection/PHPStanServicesFactory.php @@ -89,4 +89,9 @@ public function createScopeFactory(): ScopeFactory { return $this->container->getByType(ScopeFactory::class); } + + public function createContainer(): Container + { + return $this->container->getByType(Container::class); + } } diff --git a/packages/NodeTypeResolver/src/PHPStan/Scope/ScopeFactory.php b/packages/NodeTypeResolver/src/PHPStan/Scope/ScopeFactory.php index e0e21eef9515..fdc1512d29b3 100644 --- a/packages/NodeTypeResolver/src/PHPStan/Scope/ScopeFactory.php +++ b/packages/NodeTypeResolver/src/PHPStan/Scope/ScopeFactory.php @@ -10,6 +10,9 @@ use PHPStan\Analyser\ScopeFactory as PHPStanScopeFactory; use PHPStan\Analyser\TypeSpecifier; use PHPStan\Broker\Broker; +use PHPStan\DependencyInjection\Container; +use PHPStan\DependencyInjection\Type\DynamicReturnTypeExtensionRegistryProvider; +use PHPStan\DependencyInjection\Type\OperatorTypeSpecifyingExtensionRegistryProvider; use PHPStan\Rules\Properties\PropertyReflectionFinder; use Rector\PhpParser\Printer\BetterStandardPrinter; @@ -20,6 +23,11 @@ final class ScopeFactory */ private $broker; + /** + * @var \PHPStan\DependencyInjection\Container + */ + private $container; + /** * @var TypeSpecifier */ @@ -37,11 +45,13 @@ final class ScopeFactory public function __construct( Broker $broker, + Container $container, TypeSpecifier $typeSpecifier, PHPStanScopeFactory $phpStanScopeFactory, BetterStandardPrinter $betterStandardPrinter ) { $this->broker = $broker; + $this->container = $container; $this->typeSpecifier = $typeSpecifier; $this->phpStanScopeFactory = $phpStanScopeFactory; $this->betterStandardPrinter = $betterStandardPrinter; @@ -52,6 +62,8 @@ public function createFromFile(string $filePath): Scope return new MutatingScope( $this->phpStanScopeFactory, $this->broker, + $this->container->getByType(DynamicReturnTypeExtensionRegistryProvider::class)->getRegistry(), + $this->container->getByType(OperatorTypeSpecifyingExtensionRegistryProvider::class)->getRegistry(), $this->betterStandardPrinter, $this->typeSpecifier, new PropertyReflectionFinder(), diff --git a/packages/NodeTypeResolver/tests/PerNodeTypeResolver/PropertyTypeResolver/PropertyTypeResolverTest.php b/packages/NodeTypeResolver/tests/PerNodeTypeResolver/PropertyTypeResolver/PropertyTypeResolverTest.php index d9002376028c..2e4d289fc8b5 100644 --- a/packages/NodeTypeResolver/tests/PerNodeTypeResolver/PropertyTypeResolver/PropertyTypeResolverTest.php +++ b/packages/NodeTypeResolver/tests/PerNodeTypeResolver/PropertyTypeResolver/PropertyTypeResolverTest.php @@ -9,6 +9,7 @@ use PHPStan\Type\NullType; use PHPStan\Type\ObjectType; use PHPStan\Type\Type; +use PHPStan\Type\VerbosityLevel; use Rector\NodeTypeResolver\Tests\PerNodeTypeResolver\AbstractNodeTypeResolverTest; use Rector\NodeTypeResolver\Tests\PerNodeTypeResolver\PropertyTypeResolver\Source\ClassThatExtendsHtml; use Rector\NodeTypeResolver\Tests\PerNodeTypeResolver\PropertyTypeResolver\Source\Html; @@ -27,7 +28,7 @@ public function test(string $file, int $nodePosition, Type $expectedType): void { $propertyNodes = $this->getNodesForFileOfType($file, Property::class); - $this->assertEquals($expectedType, $this->nodeTypeResolver->resolve($propertyNodes[$nodePosition])); + $this->assertEquals($expectedType->describe(VerbosityLevel::precise()), $this->nodeTypeResolver->resolve($propertyNodes[$nodePosition])->describe(VerbosityLevel::precise())); } public function provideData(): Iterator diff --git a/src/Console/Command/ScreenFileCommand.php b/src/Console/Command/ScreenFileCommand.php index 9c13f5b97982..a8578430f61d 100644 --- a/src/Console/Command/ScreenFileCommand.php +++ b/src/Console/Command/ScreenFileCommand.php @@ -106,6 +106,8 @@ protected function configure(): void protected function execute(InputInterface $input, OutputInterface $output): int { // 1. load file + + /** @var string $filePath */ $filePath = $input->getArgument(self::FILE_ARGUMENT); $smartFileInfo = new SmartFileInfo($filePath);