rector/packages/NodeTypeResolver/src/DependencyInjection/PHPStanServicesFactory.php

61 lines
1.8 KiB
PHP
Raw Normal View History

<?php declare(strict_types=1);
namespace Rector\NodeTypeResolver\DependencyInjection;
use Nette\DI\Container;
use PHPStan\Analyser\NodeScopeResolver;
use PHPStan\Analyser\ScopeFactory;
use PHPStan\Analyser\TypeSpecifier;
use PHPStan\Broker\Broker;
use PHPStan\DependencyInjection\ContainerFactory;
use PHPStan\Reflection\SignatureMap\SignatureMapProvider;
final class PHPStanServicesFactory
{
/**
* @var Container
*/
private $container;
public function __construct()
{
$containerFactory = new ContainerFactory(getcwd());
$additionalConfigFiles = [];
// possible path collision for Docker
$phpstanPhpunitExtensionConfig = getcwd() . '/vendor/phpstan/phpstan-phpunit/extension.neon';
if (file_exists($phpstanPhpunitExtensionConfig) && class_exists('PHPUnit\\Framework\\TestCase')) {
$additionalConfigFiles[] = $phpstanPhpunitExtensionConfig;
}
2019-08-18 12:15:39 +00:00
$additionalConfigFiles[] = __DIR__ . '/../../config/phpstan/type-extensions.neon';
$this->container = $containerFactory->create(sys_get_temp_dir(), $additionalConfigFiles, []);
}
public function createBroker(): Broker
{
return $this->container->getByType(Broker::class);
}
public function createNodeScopeResolver(): NodeScopeResolver
{
return $this->container->getByType(NodeScopeResolver::class);
}
public function createTypeSpecifier(): TypeSpecifier
{
return $this->container->getByType(TypeSpecifier::class);
}
public function createSignatureMapProvider(): SignatureMapProvider
{
return $this->container->getByType(SignatureMapProvider::class);
}
public function createScopeFactory(): ScopeFactory
{
return $this->container->getByType(ScopeFactory::class);
}
}