-
Notifications
You must be signed in to change notification settings - Fork 568
Expand file tree
/
Copy pathFiberNodeScopeResolverTest.php
More file actions
86 lines (77 loc) · 3.01 KB
/
FiberNodeScopeResolverTest.php
File metadata and controls
86 lines (77 loc) · 3.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php declare(strict_types = 1);
namespace PHPStan\Analyser\Fiber;
use PHPStan\Analyser\NodeScopeResolver;
use PHPStan\DependencyInjection\Type\DynamicThrowTypeExtensionProvider;
use PHPStan\DependencyInjection\Type\ParameterClosureThisExtensionProvider;
use PHPStan\DependencyInjection\Type\ParameterClosureTypeExtensionProvider;
use PHPStan\DependencyInjection\Type\ParameterOutTypeExtensionProvider;
use PHPStan\File\FileHelper;
use PHPStan\Node\DeepNodeCloner;
use PHPStan\Php\PhpVersion;
use PHPStan\PhpDoc\PhpDocInheritanceResolver;
use PHPStan\Reflection\ClassReflectionFactory;
use PHPStan\Reflection\InitializerExprTypeResolver;
use PHPStan\Rules\Properties\ReadWritePropertiesExtensionProvider;
use PHPStan\Testing\TypeInferenceTestCase;
use PHPStan\Type\FileTypeMapper;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\RequiresPhp;
#[RequiresPhp('>= 8.1')]
class FiberNodeScopeResolverTest extends TypeInferenceTestCase
{
public static function dataFileAsserts(): iterable
{
yield from self::gatherAssertTypes(__DIR__ . '/data/fnsr.php');
}
/**
* @param mixed ...$args
*/
#[DataProvider('dataFileAsserts')]
public function testFileAsserts(
string $assertType,
string $file,
...$args,
): void
{
$this->assertFileAsserts($assertType, $file, ...$args);
}
protected static function createNodeScopeResolver(): NodeScopeResolver
{
$container = self::getContainer();
$reflectionProvider = self::createReflectionProvider();
$typeSpecifier = $container->getService('typeSpecifier');
return new FiberNodeScopeResolver(
$reflectionProvider,
$container->getByType(InitializerExprTypeResolver::class),
self::getReflector(),
$container->getByType(ClassReflectionFactory::class),
$container->getByType(ParameterOutTypeExtensionProvider::class),
self::getParser(),
$container->getByType(FileTypeMapper::class),
$container->getByType(PhpVersion::class),
$container->getByType(PhpDocInheritanceResolver::class),
$container->getByType(FileHelper::class),
$typeSpecifier,
$container->getByType(DynamicThrowTypeExtensionProvider::class),
$container->getByType(ReadWritePropertiesExtensionProvider::class),
$container->getByType(ParameterClosureThisExtensionProvider::class),
$container->getByType(ParameterClosureTypeExtensionProvider::class),
self::createScopeFactory($reflectionProvider, $typeSpecifier),
$container->getByType(DeepNodeCloner::class),
$container->getParameter('polluteScopeWithLoopInitialAssignments'),
$container->getParameter('polluteScopeWithAlwaysIterableForeach'),
$container->getParameter('polluteScopeWithBlock'),
static::getEarlyTerminatingMethodCalls(),
static::getEarlyTerminatingFunctionCalls(),
$container->getParameter('exceptions')['implicitThrows'],
$container->getParameter('treatPhpDocTypesAsCertain'),
$container->getParameter('rememberPossiblyImpureFunctionValues'),
);
}
public static function getAdditionalConfigFiles(): array
{
return [
__DIR__ . '/../../../../conf/bleedingEdge.neon',
];
}
}