Skip to content

Commit b5c99e3

Browse files
committed
Updated Rector to commit afe7c46c0387e27e1eae37cf76f8a3a4119a1d39
rectorphp/rector-src@afe7c46 [DeadCode] Skip nullable @ template on RemoveUselessReturnTagRector (#6409)
1 parent 3b34bec commit b5c99e3

File tree

7 files changed

+57
-11
lines changed

7 files changed

+57
-11
lines changed

rules/DeadCode/PhpDoc/DeadParamTagValueNodeAnalyzer.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
use PhpParser\Node\Param;
99
use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode;
1010
use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
11-
use PHPStan\Type\Generic\TemplateType;
1211
use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger;
1312
use Rector\BetterPhpDocParser\ValueObject\Type\BracketsAwareUnionTypeNode;
1413
use Rector\DeadCode\PhpDoc\Guard\StandaloneTypeRemovalGuard;
14+
use Rector\DeadCode\PhpDoc\Guard\TemplateTypeRemovalGuard;
1515
use Rector\DeadCode\TypeNodeAnalyzer\GenericTypeNodeAnalyzer;
1616
use Rector\DeadCode\TypeNodeAnalyzer\MixedArrayTypeNodeAnalyzer;
1717
use Rector\NodeNameResolver\NodeNameResolver;
@@ -60,7 +60,12 @@ final class DeadParamTagValueNodeAnalyzer
6060
* @var \Rector\StaticTypeMapper\StaticTypeMapper
6161
*/
6262
private $staticTypeMapper;
63-
public function __construct(NodeNameResolver $nodeNameResolver, TypeComparator $typeComparator, GenericTypeNodeAnalyzer $genericTypeNodeAnalyzer, MixedArrayTypeNodeAnalyzer $mixedArrayTypeNodeAnalyzer, ParamAnalyzer $paramAnalyzer, PhpDocTypeChanger $phpDocTypeChanger, StandaloneTypeRemovalGuard $standaloneTypeRemovalGuard, StaticTypeMapper $staticTypeMapper)
63+
/**
64+
* @readonly
65+
* @var \Rector\DeadCode\PhpDoc\Guard\TemplateTypeRemovalGuard
66+
*/
67+
private $templateTypeRemovalGuard;
68+
public function __construct(NodeNameResolver $nodeNameResolver, TypeComparator $typeComparator, GenericTypeNodeAnalyzer $genericTypeNodeAnalyzer, MixedArrayTypeNodeAnalyzer $mixedArrayTypeNodeAnalyzer, ParamAnalyzer $paramAnalyzer, PhpDocTypeChanger $phpDocTypeChanger, StandaloneTypeRemovalGuard $standaloneTypeRemovalGuard, StaticTypeMapper $staticTypeMapper, TemplateTypeRemovalGuard $templateTypeRemovalGuard)
6469
{
6570
$this->nodeNameResolver = $nodeNameResolver;
6671
$this->typeComparator = $typeComparator;
@@ -70,6 +75,7 @@ public function __construct(NodeNameResolver $nodeNameResolver, TypeComparator $
7075
$this->phpDocTypeChanger = $phpDocTypeChanger;
7176
$this->standaloneTypeRemovalGuard = $standaloneTypeRemovalGuard;
7277
$this->staticTypeMapper = $staticTypeMapper;
78+
$this->templateTypeRemovalGuard = $templateTypeRemovalGuard;
7379
}
7480
public function isDead(ParamTagValueNode $paramTagValueNode, FunctionLike $functionLike) : bool
7581
{
@@ -84,7 +90,7 @@ public function isDead(ParamTagValueNode $paramTagValueNode, FunctionLike $funct
8490
return \false;
8591
}
8692
$docType = $this->staticTypeMapper->mapPHPStanPhpDocTypeNodeToPHPStanType($paramTagValueNode->type, $functionLike);
87-
if ($docType instanceof TemplateType) {
93+
if (!$this->templateTypeRemovalGuard->isLegal($docType)) {
8894
return \false;
8995
}
9096
if ($param->type instanceof Name && $this->nodeNameResolver->isName($param->type, 'object')) {

rules/DeadCode/PhpDoc/DeadReturnTagValueNodeAnalyzer.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111
use PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode;
1212
use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
1313
use PHPStan\PhpDocParser\Ast\Type\ThisTypeNode;
14-
use PHPStan\Type\Generic\TemplateType;
1514
use PHPStan\Type\TypeCombinator;
1615
use PHPStan\Type\UnionType;
1716
use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger;
1817
use Rector\BetterPhpDocParser\ValueObject\Type\BracketsAwareUnionTypeNode;
1918
use Rector\DeadCode\PhpDoc\Guard\StandaloneTypeRemovalGuard;
19+
use Rector\DeadCode\PhpDoc\Guard\TemplateTypeRemovalGuard;
2020
use Rector\DeadCode\TypeNodeAnalyzer\GenericTypeNodeAnalyzer;
2121
use Rector\DeadCode\TypeNodeAnalyzer\MixedArrayTypeNodeAnalyzer;
2222
use Rector\NodeTypeResolver\Node\AttributeKey;
@@ -54,14 +54,20 @@ final class DeadReturnTagValueNodeAnalyzer
5454
* @var \Rector\StaticTypeMapper\StaticTypeMapper
5555
*/
5656
private $staticTypeMapper;
57-
public function __construct(TypeComparator $typeComparator, GenericTypeNodeAnalyzer $genericTypeNodeAnalyzer, MixedArrayTypeNodeAnalyzer $mixedArrayTypeNodeAnalyzer, StandaloneTypeRemovalGuard $standaloneTypeRemovalGuard, PhpDocTypeChanger $phpDocTypeChanger, StaticTypeMapper $staticTypeMapper)
57+
/**
58+
* @readonly
59+
* @var \Rector\DeadCode\PhpDoc\Guard\TemplateTypeRemovalGuard
60+
*/
61+
private $templateTypeRemovalGuard;
62+
public function __construct(TypeComparator $typeComparator, GenericTypeNodeAnalyzer $genericTypeNodeAnalyzer, MixedArrayTypeNodeAnalyzer $mixedArrayTypeNodeAnalyzer, StandaloneTypeRemovalGuard $standaloneTypeRemovalGuard, PhpDocTypeChanger $phpDocTypeChanger, StaticTypeMapper $staticTypeMapper, TemplateTypeRemovalGuard $templateTypeRemovalGuard)
5863
{
5964
$this->typeComparator = $typeComparator;
6065
$this->genericTypeNodeAnalyzer = $genericTypeNodeAnalyzer;
6166
$this->mixedArrayTypeNodeAnalyzer = $mixedArrayTypeNodeAnalyzer;
6267
$this->standaloneTypeRemovalGuard = $standaloneTypeRemovalGuard;
6368
$this->phpDocTypeChanger = $phpDocTypeChanger;
6469
$this->staticTypeMapper = $staticTypeMapper;
70+
$this->templateTypeRemovalGuard = $templateTypeRemovalGuard;
6571
}
6672
/**
6773
* @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Function_ $functionLike
@@ -76,7 +82,7 @@ public function isDead(ReturnTagValueNode $returnTagValueNode, $functionLike) :
7682
return \false;
7783
}
7884
$docType = $this->staticTypeMapper->mapPHPStanPhpDocTypeNodeToPHPStanType($returnTagValueNode->type, $functionLike);
79-
if ($docType instanceof TemplateType) {
85+
if (!$this->templateTypeRemovalGuard->isLegal($docType)) {
8086
return \false;
8187
}
8288
$scope = $functionLike->getAttribute(AttributeKey::SCOPE);

rules/DeadCode/PhpDoc/DeadVarTagValueNodeAnalyzer.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55

66
use PhpParser\Node\Stmt\Property;
77
use PHPStan\PhpDocParser\Ast\PhpDoc\VarTagValueNode;
8-
use PHPStan\Type\Generic\TemplateType;
98
use PHPStan\Type\IntersectionType;
109
use PHPStan\Type\ObjectType;
1110
use PHPStan\Type\TypeCombinator;
1211
use PHPStan\Type\UnionType;
12+
use Rector\DeadCode\PhpDoc\Guard\TemplateTypeRemovalGuard;
1313
use Rector\NodeTypeResolver\TypeComparator\TypeComparator;
1414
use Rector\StaticTypeMapper\StaticTypeMapper;
1515
final class DeadVarTagValueNodeAnalyzer
@@ -24,10 +24,16 @@ final class DeadVarTagValueNodeAnalyzer
2424
* @var \Rector\StaticTypeMapper\StaticTypeMapper
2525
*/
2626
private $staticTypeMapper;
27-
public function __construct(TypeComparator $typeComparator, StaticTypeMapper $staticTypeMapper)
27+
/**
28+
* @readonly
29+
* @var \Rector\DeadCode\PhpDoc\Guard\TemplateTypeRemovalGuard
30+
*/
31+
private $templateTypeRemovalGuard;
32+
public function __construct(TypeComparator $typeComparator, StaticTypeMapper $staticTypeMapper, TemplateTypeRemovalGuard $templateTypeRemovalGuard)
2833
{
2934
$this->typeComparator = $typeComparator;
3035
$this->staticTypeMapper = $staticTypeMapper;
36+
$this->templateTypeRemovalGuard = $templateTypeRemovalGuard;
3137
}
3238
public function isDead(VarTagValueNode $varTagValueNode, Property $property) : bool
3339
{
@@ -40,7 +46,7 @@ public function isDead(VarTagValueNode $varTagValueNode, Property $property) : b
4046
// is strict type superior to doc type? keep strict type only
4147
$propertyType = $this->staticTypeMapper->mapPhpParserNodePHPStanType($property->type);
4248
$docType = $this->staticTypeMapper->mapPHPStanPhpDocTypeNodeToPHPStanType($varTagValueNode->type, $property);
43-
if ($docType instanceof TemplateType) {
49+
if (!$this->templateTypeRemovalGuard->isLegal($docType)) {
4450
return \false;
4551
}
4652
if ($propertyType instanceof UnionType && !$docType instanceof UnionType) {
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
declare (strict_types=1);
4+
namespace Rector\DeadCode\PhpDoc\Guard;
5+
6+
use PHPStan\Type\Type;
7+
use PHPStan\Type\UnionType;
8+
use PHPStan\Type\Generic\TemplateType;
9+
final class TemplateTypeRemovalGuard
10+
{
11+
public function isLegal(Type $docType) : bool
12+
{
13+
// cover direct \PHPStan\Type\Generic\TemplateUnionType
14+
if ($docType instanceof TemplateType) {
15+
return \false;
16+
}
17+
// cover mixed template with mix from @template and non @template
18+
$types = $docType instanceof UnionType ? $docType->getTypes() : [$docType];
19+
foreach ($types as $type) {
20+
if ($type instanceof TemplateType) {
21+
return \false;
22+
}
23+
}
24+
return \true;
25+
}
26+
}

src/Application/VersionResolver.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ final class VersionResolver
1919
* @api
2020
* @var string
2121
*/
22-
public const PACKAGE_VERSION = '1afc64719771eae635df76bf5f85b225b459b3d6';
22+
public const PACKAGE_VERSION = 'afe7c46c0387e27e1eae37cf76f8a3a4119a1d39';
2323
/**
2424
* @api
2525
* @var string
2626
*/
27-
public const RELEASE_DATE = '2024-11-04 22:15:08';
27+
public const RELEASE_DATE = '2024-11-05 21:18:05';
2828
/**
2929
* @var int
3030
*/

vendor/composer/autoload_classmap.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1279,6 +1279,7 @@
12791279
'Rector\\DeadCode\\PhpDoc\\DeadReturnTagValueNodeAnalyzer' => $baseDir . '/rules/DeadCode/PhpDoc/DeadReturnTagValueNodeAnalyzer.php',
12801280
'Rector\\DeadCode\\PhpDoc\\DeadVarTagValueNodeAnalyzer' => $baseDir . '/rules/DeadCode/PhpDoc/DeadVarTagValueNodeAnalyzer.php',
12811281
'Rector\\DeadCode\\PhpDoc\\Guard\\StandaloneTypeRemovalGuard' => $baseDir . '/rules/DeadCode/PhpDoc/Guard/StandaloneTypeRemovalGuard.php',
1282+
'Rector\\DeadCode\\PhpDoc\\Guard\\TemplateTypeRemovalGuard' => $baseDir . '/rules/DeadCode/PhpDoc/Guard/TemplateTypeRemovalGuard.php',
12821283
'Rector\\DeadCode\\PhpDoc\\TagRemover\\ParamTagRemover' => $baseDir . '/rules/DeadCode/PhpDoc/TagRemover/ParamTagRemover.php',
12831284
'Rector\\DeadCode\\PhpDoc\\TagRemover\\ReturnTagRemover' => $baseDir . '/rules/DeadCode/PhpDoc/TagRemover/ReturnTagRemover.php',
12841285
'Rector\\DeadCode\\PhpDoc\\TagRemover\\VarTagRemover' => $baseDir . '/rules/DeadCode/PhpDoc/TagRemover/VarTagRemover.php',

vendor/composer/autoload_static.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1498,6 +1498,7 @@ class ComposerStaticInit4d4c37b878ce01a3ff505ba7def6aac7
14981498
'Rector\\DeadCode\\PhpDoc\\DeadReturnTagValueNodeAnalyzer' => __DIR__ . '/../..' . '/rules/DeadCode/PhpDoc/DeadReturnTagValueNodeAnalyzer.php',
14991499
'Rector\\DeadCode\\PhpDoc\\DeadVarTagValueNodeAnalyzer' => __DIR__ . '/../..' . '/rules/DeadCode/PhpDoc/DeadVarTagValueNodeAnalyzer.php',
15001500
'Rector\\DeadCode\\PhpDoc\\Guard\\StandaloneTypeRemovalGuard' => __DIR__ . '/../..' . '/rules/DeadCode/PhpDoc/Guard/StandaloneTypeRemovalGuard.php',
1501+
'Rector\\DeadCode\\PhpDoc\\Guard\\TemplateTypeRemovalGuard' => __DIR__ . '/../..' . '/rules/DeadCode/PhpDoc/Guard/TemplateTypeRemovalGuard.php',
15011502
'Rector\\DeadCode\\PhpDoc\\TagRemover\\ParamTagRemover' => __DIR__ . '/../..' . '/rules/DeadCode/PhpDoc/TagRemover/ParamTagRemover.php',
15021503
'Rector\\DeadCode\\PhpDoc\\TagRemover\\ReturnTagRemover' => __DIR__ . '/../..' . '/rules/DeadCode/PhpDoc/TagRemover/ReturnTagRemover.php',
15031504
'Rector\\DeadCode\\PhpDoc\\TagRemover\\VarTagRemover' => __DIR__ . '/../..' . '/rules/DeadCode/PhpDoc/TagRemover/VarTagRemover.php',

0 commit comments

Comments
 (0)