Skip to content

Commit 39bd4d7

Browse files
committed
add set
1 parent a1414e2 commit 39bd4d7

13 files changed

Lines changed: 181 additions & 152 deletions

File tree

config/set/type-declaration-docblocks.php

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,15 @@
33
declare(strict_types=1);
44

55
use Rector\Config\RectorConfig;
6-
use Rector\TypeDeclaration\Rector\Class_\DocblockVarFromParamDocblockInConstructorRector;
7-
use Rector\TypeDeclaration\Rector\ClassMethod\DocblockGetterReturnArrayFromPropertyDocblockVarRector;
6+
use Rector\TypeDeclarationDocblocks\Rector\Class_\DocblockVarFromParamDocblockInConstructorRector;
7+
use Rector\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockGetterReturnArrayFromPropertyDocblockVarRector;
88

9+
/**
10+
* @experimental * 2025-09, experimental hidden set for type declaration in docblocks
11+
*/
912
return static function (RectorConfig $rectorConfig): void {
10-
// 2025-09, experimental hidden set for type declaration in docblocks
11-
1213
$rectorConfig->rules([
13-
// properties
1414
DocblockVarFromParamDocblockInConstructorRector::class,
15-
1615
DocblockGetterReturnArrayFromPropertyDocblockVarRector::class,
1716
]);
1817
};

rules-tests/TypeDeclaration/Rector/ClassMethod/DocblockGetterReturnArrayFromPropertyDocblockVarRector/DocblockGetterReturnArrayFromPropertyDocblockVarRectorTest.php renamed to rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockGetterReturnArrayFromPropertyDocblockVarRector/DocblockGetterReturnArrayFromPropertyDocblockVarRectorTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace Rector\Tests\TypeDeclaration\Rector\ClassMethod\DocblockGetterReturnArrayFromPropertyDocblockVarRector;
5+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockGetterReturnArrayFromPropertyDocblockVarRector;
66

77
use Iterator;
88
use PHPUnit\Framework\Attributes\DataProvider;

rules-tests/TypeDeclaration/Rector/ClassMethod/DocblockGetterReturnArrayFromPropertyDocblockVarRector/Fixture/skip_missing_return_type.php.inc renamed to rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockGetterReturnArrayFromPropertyDocblockVarRector/Fixture/skip_missing_return_type.php.inc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace Rector\Tests\TypeDeclaration\Rector\ClassMethod\DocblockGetterReturnArrayFromPropertyDocblockVarRector\Fixture;
3+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockGetterReturnArrayFromPropertyDocblockVarRector\Fixture;
44

55
final class SkipMissingPropertyType
66
{

rules-tests/TypeDeclaration/Rector/ClassMethod/DocblockGetterReturnArrayFromPropertyDocblockVarRector/Fixture/some_property_with_array_docblock.php.inc renamed to rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockGetterReturnArrayFromPropertyDocblockVarRector/Fixture/some_property_with_array_docblock.php.inc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace Rector\Tests\TypeDeclaration\Rector\ClassMethod\DocblockGetterReturnArrayFromPropertyDocblockVarRector\Fixture;
3+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockGetterReturnArrayFromPropertyDocblockVarRector\Fixture;
44

55
final class SomePropertyWithArrayDocblock
66
{
@@ -19,7 +19,7 @@ final class SomePropertyWithArrayDocblock
1919
-----
2020
<?php
2121

22-
namespace Rector\Tests\TypeDeclaration\Rector\ClassMethod\DocblockGetterReturnArrayFromPropertyDocblockVarRector\Fixture;
22+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockGetterReturnArrayFromPropertyDocblockVarRector\Fixture;
2323

2424
final class SomePropertyWithArrayDocblock
2525
{

rules-tests/TypeDeclaration/Rector/ClassMethod/DocblockGetterReturnArrayFromPropertyDocblockVarRector/config/configured_rule.php renamed to rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockGetterReturnArrayFromPropertyDocblockVarRector/config/configured_rule.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
declare(strict_types=1);
44

55
use Rector\Config\RectorConfig;
6-
use Rector\TypeDeclaration\Rector\ClassMethod\DocblockGetterReturnArrayFromPropertyDocblockVarRector;
6+
use Rector\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockGetterReturnArrayFromPropertyDocblockVarRector;
77

88
return RectorConfig::configure()
99
->withRules([DocblockGetterReturnArrayFromPropertyDocblockVarRector::class]);

rules-tests/TypeDeclaration/Rector/Class_/DocblockVarFromParamDocblockInConstructorRector/DocblockVarFromParamDocblockInConstructorRectorTest.php renamed to rules-tests/TypeDeclarationDocblocks/Rector/Class_/DocblockVarFromParamDocblockInConstructorRector/DocblockVarFromParamDocblockInConstructorRectorTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace Rector\Tests\TypeDeclaration\Rector\Class_\DocblockVarFromParamDocblockInConstructorRector;
5+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\Class_\DocblockVarFromParamDocblockInConstructorRector;
66

77
use Iterator;
88
use PHPUnit\Framework\Attributes\DataProvider;

rules-tests/TypeDeclaration/Rector/Class_/DocblockVarFromParamDocblockInConstructorRector/Fixture/skip_if_array_type_missing.php.inc renamed to rules-tests/TypeDeclarationDocblocks/Rector/Class_/DocblockVarFromParamDocblockInConstructorRector/Fixture/skip_if_array_type_missing.php.inc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace Rector\Tests\TypeDeclaration\Rector\Class_\DocblockVarFromParamDocblockInConstructorRector\Fixture;
3+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\Class_\DocblockVarFromParamDocblockInConstructorRector\Fixture;
44

55
final class SkipIfArrayTypeMissing
66
{

rules-tests/TypeDeclaration/Rector/Class_/DocblockVarFromParamDocblockInConstructorRector/Fixture/some_class.php.inc renamed to rules-tests/TypeDeclarationDocblocks/Rector/Class_/DocblockVarFromParamDocblockInConstructorRector/Fixture/some_class.php.inc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace Rector\Tests\TypeDeclaration\Rector\Class_\DocblockVarFromParamDocblockInConstructorRector\Fixture;
3+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\Class_\DocblockVarFromParamDocblockInConstructorRector\Fixture;
44

55
final class SomeClass
66
{
@@ -19,7 +19,7 @@ final class SomeClass
1919
-----
2020
<?php
2121

22-
namespace Rector\Tests\TypeDeclaration\Rector\Class_\DocblockVarFromParamDocblockInConstructorRector\Fixture;
22+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\Class_\DocblockVarFromParamDocblockInConstructorRector\Fixture;
2323

2424
final class SomeClass
2525
{

rules-tests/TypeDeclaration/Rector/Class_/DocblockVarFromParamDocblockInConstructorRector/config/configured_rule.php renamed to rules-tests/TypeDeclarationDocblocks/Rector/Class_/DocblockVarFromParamDocblockInConstructorRector/config/configured_rule.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
declare(strict_types=1);
44

55
use Rector\Config\RectorConfig;
6-
use Rector\TypeDeclaration\Rector\Class_\DocblockVarFromParamDocblockInConstructorRector;
6+
use Rector\TypeDeclarationDocblocks\Rector\Class_\DocblockVarFromParamDocblockInConstructorRector;
77

88
return static function (RectorConfig $rectorConfig): void {
99
$rectorConfig->rule(DocblockVarFromParamDocblockInConstructorRector::class);
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Rector\TypeDeclarationDocblocks\NodeAnalyzer;
6+
7+
use PhpParser\Node\Expr\Assign;
8+
use PhpParser\Node\Expr\PropertyFetch;
9+
use PhpParser\Node\Stmt\Class_;
10+
use PhpParser\Node\Stmt\ClassMethod;
11+
use PHPStan\Type\Type;
12+
use Rector\NodeNameResolver\NodeNameResolver;
13+
use Rector\NodeTypeResolver\NodeTypeResolver;
14+
use Rector\PhpParser\Node\BetterNodeFinder;
15+
use Rector\ValueObject\MethodName;
16+
17+
final readonly class ConstructorAssignedTypeResolver
18+
{
19+
public function __construct(
20+
private BetterNodeFinder $betterNodeFinder,
21+
private NodeNameResolver $nodeNameResolver,
22+
private NodeTypeResolver $nodeTypeResolver
23+
) {
24+
}
25+
26+
public function resolve(Class_ $class, string $propertyName): ?Type
27+
{
28+
$constructorClassMethod = $class->getMethod(MethodName::CONSTRUCT);
29+
if (! $constructorClassMethod instanceof ClassMethod) {
30+
return null;
31+
}
32+
33+
if ($constructorClassMethod->stmts === null) {
34+
return null;
35+
}
36+
37+
$assigns = $this->betterNodeFinder->findInstancesOfScoped($constructorClassMethod->stmts, Assign::class);
38+
foreach ($assigns as $assign) {
39+
if (! $assign->var instanceof PropertyFetch) {
40+
continue;
41+
}
42+
43+
$propertyFetch = $assign->var;
44+
if (! $this->nodeNameResolver-> isName($propertyFetch->var, 'this')) {
45+
continue;
46+
}
47+
48+
if (! $this->nodeNameResolver-> isName($propertyFetch->name, $propertyName)) {
49+
continue;
50+
}
51+
52+
return $this->nodeTypeResolver->getType($assign->expr);
53+
}
54+
55+
return null;
56+
}
57+
}

0 commit comments

Comments
 (0)