Skip to content

Commit fa648ed

Browse files
authored
[DX] Make use of Laravel container in few tests - step #5 (#4682)
1 parent 3a048f6 commit fa648ed

15 files changed

Lines changed: 94 additions & 163 deletions

File tree

packages-tests/NodeTypeResolver/PerNodeTypeResolver/AbstractNodeTypeResolverTestCase.php

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
use PhpParser\Node;
88
use Rector\Core\PhpParser\Node\BetterNodeFinder;
99
use Rector\NodeTypeResolver\NodeTypeResolver;
10-
use Rector\Testing\PHPUnit\AbstractTestCase;
10+
use Rector\Testing\PHPUnit\AbstractLazyTestCase;
1111
use Rector\Testing\TestingParser\TestingParser;
1212

13-
abstract class AbstractNodeTypeResolverTestCase extends AbstractTestCase
13+
abstract class AbstractNodeTypeResolverTestCase extends AbstractLazyTestCase
1414
{
1515
protected NodeTypeResolver $nodeTypeResolver;
1616

@@ -20,11 +20,9 @@ abstract class AbstractNodeTypeResolverTestCase extends AbstractTestCase
2020

2121
protected function setUp(): void
2222
{
23-
$this->boot();
24-
25-
$this->betterNodeFinder = $this->getService(BetterNodeFinder::class);
26-
$this->testingParser = $this->getService(TestingParser::class);
27-
$this->nodeTypeResolver = $this->getService(NodeTypeResolver::class);
23+
$this->betterNodeFinder = $this->make(BetterNodeFinder::class);
24+
$this->testingParser = $this->make(TestingParser::class);
25+
$this->nodeTypeResolver = $this->make(NodeTypeResolver::class);
2826
}
2927

3028
/**
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Rector\NodeTypeResolver\Contract;
6+
7+
use Rector\NodeTypeResolver\NodeTypeResolver;
8+
9+
interface NodeTypeResolverAwareInterface
10+
{
11+
public function autowire(NodeTypeResolver $nodeTypeResolver): void;
12+
}

packages/NodeTypeResolver/DependencyInjection/PHPStanServicesFactory.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,17 @@ public function createScopeFactory(): ScopeFactory
105105
return $this->container->getByType(ScopeFactory::class);
106106
}
107107

108+
/**
109+
* @template TObject as Object
110+
*
111+
* @param class-string<TObject> $type
112+
* @return TObject
113+
*/
114+
public function getByType(string $type): object
115+
{
116+
return $this->container->getByType($type);
117+
}
118+
108119
/**
109120
* @api
110121
*/

packages/NodeTypeResolver/NodeTypeResolver.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
use PHPStan\Type\UnionType;
3535
use Rector\Core\Configuration\RenamedClassesDataCollector;
3636
use Rector\Core\NodeAnalyzer\ClassAnalyzer;
37+
use Rector\NodeTypeResolver\Contract\NodeTypeResolverAwareInterface;
3738
use Rector\NodeTypeResolver\Contract\NodeTypeResolverInterface;
3839
use Rector\NodeTypeResolver\Node\AttributeKey;
3940
use Rector\NodeTypeResolver\NodeTypeCorrector\AccessoryNonEmptyStringTypeCorrector;
@@ -62,6 +63,10 @@ public function __construct(
6263
iterable $nodeTypeResolvers
6364
) {
6465
foreach ($nodeTypeResolvers as $nodeTypeResolver) {
66+
if ($nodeTypeResolver instanceof NodeTypeResolverAwareInterface) {
67+
$nodeTypeResolver->autowire($this);
68+
}
69+
6570
foreach ($nodeTypeResolver->getNodeClasses() as $nodeClass) {
6671
$this->nodeTypeResolvers[$nodeClass] = $nodeTypeResolver;
6772
}

packages/NodeTypeResolver/NodeTypeResolver/ParamTypeResolver.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,19 @@
88
use PhpParser\Node\Param;
99
use PHPStan\Type\MixedType;
1010
use PHPStan\Type\Type;
11+
use Rector\NodeTypeResolver\Contract\NodeTypeResolverAwareInterface;
1112
use Rector\NodeTypeResolver\Contract\NodeTypeResolverInterface;
1213
use Rector\NodeTypeResolver\NodeTypeResolver;
13-
use Symfony\Contracts\Service\Attribute\Required;
1414

1515
/**
1616
* @see \Rector\Tests\NodeTypeResolver\PerNodeTypeResolver\ParamTypeResolver\ParamTypeResolverTest
1717
*
1818
* @implements NodeTypeResolverInterface<Param>
1919
*/
20-
final class ParamTypeResolver implements NodeTypeResolverInterface
20+
final class ParamTypeResolver implements NodeTypeResolverInterface, NodeTypeResolverAwareInterface
2121
{
2222
private NodeTypeResolver $nodeTypeResolver;
2323

24-
#[Required]
2524
public function autowire(NodeTypeResolver $nodeTypeResolver): void
2625
{
2726
$this->nodeTypeResolver = $nodeTypeResolver;

packages/NodeTypeResolver/NodeTypeResolver/PropertyFetchTypeResolver.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,17 @@
1212
use PHPStan\Type\ObjectType;
1313
use PHPStan\Type\Type;
1414
use Rector\NodeNameResolver\NodeNameResolver;
15+
use Rector\NodeTypeResolver\Contract\NodeTypeResolverAwareInterface;
1516
use Rector\NodeTypeResolver\Contract\NodeTypeResolverInterface;
1617
use Rector\NodeTypeResolver\Node\AttributeKey;
1718
use Rector\NodeTypeResolver\NodeTypeResolver;
18-
use Symfony\Contracts\Service\Attribute\Required;
1919

2020
/**
2121
* @see \Rector\Tests\NodeTypeResolver\PerNodeTypeResolver\PropertyFetchTypeResolver\PropertyFetchTypeResolverTest
2222
*
2323
* @implements NodeTypeResolverInterface<PropertyFetch>
2424
*/
25-
final class PropertyFetchTypeResolver implements NodeTypeResolverInterface
25+
final class PropertyFetchTypeResolver implements NodeTypeResolverInterface, NodeTypeResolverAwareInterface
2626
{
2727
private NodeTypeResolver $nodeTypeResolver;
2828

@@ -32,7 +32,6 @@ public function __construct(
3232
) {
3333
}
3434

35-
#[Required]
3635
public function autowire(NodeTypeResolver $nodeTypeResolver): void
3736
{
3837
$this->nodeTypeResolver = $nodeTypeResolver;

packages/NodeTypeResolver/NodeTypeResolver/ReturnTypeResolver.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,17 @@
99
use PhpParser\Node\Stmt\Return_;
1010
use PHPStan\Type\Type;
1111
use PHPStan\Type\VoidType;
12+
use Rector\NodeTypeResolver\Contract\NodeTypeResolverAwareInterface;
1213
use Rector\NodeTypeResolver\Contract\NodeTypeResolverInterface;
1314
use Rector\NodeTypeResolver\NodeTypeResolver;
14-
use Symfony\Contracts\Service\Attribute\Required;
1515

1616
/**
1717
* @implements NodeTypeResolverInterface<Return_>
1818
*/
19-
final class ReturnTypeResolver implements NodeTypeResolverInterface
19+
final class ReturnTypeResolver implements NodeTypeResolverInterface, NodeTypeResolverAwareInterface
2020
{
2121
private NodeTypeResolver $nodeTypeResolver;
2222

23-
#[Required]
2423
public function autowire(NodeTypeResolver $nodeTypeResolver): void
2524
{
2625
$this->nodeTypeResolver = $nodeTypeResolver;

packages/NodeTypeResolver/NodeTypeResolver/StaticCallMethodCallTypeResolver.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,16 @@
1313
use PHPStan\Type\MixedType;
1414
use PHPStan\Type\Type;
1515
use Rector\NodeNameResolver\NodeNameResolver;
16+
use Rector\NodeTypeResolver\Contract\NodeTypeResolverAwareInterface;
1617
use Rector\NodeTypeResolver\Contract\NodeTypeResolverInterface;
1718
use Rector\NodeTypeResolver\Node\AttributeKey;
1819
use Rector\NodeTypeResolver\NodeTypeResolver;
1920
use Rector\NodeTypeResolver\PHPStan\ParametersAcceptorSelectorVariantsWrapper;
20-
use Symfony\Contracts\Service\Attribute\Required;
2121

2222
/**
2323
* @implements NodeTypeResolverInterface<StaticCall|MethodCall>
2424
*/
25-
final class StaticCallMethodCallTypeResolver implements NodeTypeResolverInterface
25+
final class StaticCallMethodCallTypeResolver implements NodeTypeResolverInterface, NodeTypeResolverAwareInterface
2626
{
2727
private NodeTypeResolver $nodeTypeResolver;
2828

@@ -31,7 +31,6 @@ public function __construct(
3131
) {
3232
}
3333

34-
#[Required]
3534
public function autowire(NodeTypeResolver $nodeTypeResolver): void
3635
{
3736
$this->nodeTypeResolver = $nodeTypeResolver;

packages/NodeTypeResolver/NodeTypeResolver/VariableTypeResolver.php

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
use PHPStan\Analyser\Scope;
1010
use PHPStan\Type\MixedType;
1111
use PHPStan\Type\Type;
12-
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
1312
use Rector\NodeNameResolver\NodeNameResolver;
1413
use Rector\NodeTypeResolver\Contract\NodeTypeResolverInterface;
1514
use Rector\NodeTypeResolver\Node\AttributeKey;
@@ -23,7 +22,6 @@ final class VariableTypeResolver implements NodeTypeResolverInterface
2322
{
2423
public function __construct(
2524
private readonly NodeNameResolver $nodeNameResolver,
26-
private readonly PhpDocInfoFactory $phpDocInfoFactory
2725
) {
2826
}
2927

@@ -45,14 +43,7 @@ public function resolve(Node $node): Type
4543
return new MixedType();
4644
}
4745

48-
$scopeType = $this->resolveTypesFromScope($node, $variableName);
49-
if (! $scopeType instanceof MixedType) {
50-
return $scopeType;
51-
}
52-
53-
// get from annotation
54-
$phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node);
55-
return $phpDocInfo->getVarType();
46+
return $this->resolveTypesFromScope($node, $variableName);
5647
}
5748

5849
private function resolveTypesFromScope(Variable $variable, string $variableName): Type

phpstan.neon

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -685,3 +685,8 @@ parameters:
685685

686686
# false positives
687687
- '#Property Rector\\PhpAttribute\\AnnotationToAttributeMapper\:\:\$annotationToAttributeMappers \(array<Rector\\PhpAttribute\\Contract\\AnnotationToAttributeMapperInterface>\) does not accept iterable<Rector\\PhpAttribute\\Contract\\AnnotationToAttributeMapperInterface>#'
688+
689+
# avoid circular dependency
690+
-
691+
message: '#\$this as argument is not allowed\. Refactor method to service composition#'
692+
path: packages/NodeTypeResolver/NodeTypeResolver.php

0 commit comments

Comments
 (0)