Skip to content

Commit bb99076

Browse files
samsonasikTomasVotrubaactions-user
authored
[Dep] Update to php-parser ^4.13.2 (#1359)
* bump to php-parser 4.13.2 * uverify namespacedName property is a Name * phpstan * AnonymousClass type fix * [ci-review] Rector Rectify * phpstan * fix * clean up * final touch: verify namespacedName * final touch: clean up * final touch: regex phpstann single quote namespacedName in message * updated to compare exactly with Name class * update to check instanceof Class_ * added back property_exists * fix * cs fix * check in in_array of class node * clean up * [ci-review] Rector Rectify * phpstan * phpstan * remove unneded ClassLike check * [ci-review] Rector Rectify * [ci-review] Rector Rectify * [ci-review] Rector Rectify Co-authored-by: Tomas Votruba <tomas.vot@gmail.com> Co-authored-by: GitHub Action <action@github.com>
1 parent bf80d32 commit bb99076

7 files changed

Lines changed: 34 additions & 16 deletions

File tree

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"myclabs/php-enum": "^1.8",
2121
"nette/neon": "^3.3.2",
2222
"nette/utils": "^3.2",
23-
"nikic/php-parser": "4.13.1",
23+
"nikic/php-parser": "^4.13.2",
2424
"phpstan/phpdoc-parser": "^1.2",
2525
"phpstan/phpstan": "^1.2",
2626
"phpstan/phpstan-phpunit": "^1.0",

packages/NodeNameResolver/NodeNameResolver/ClassNameResolver.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Rector\NodeNameResolver\NodeNameResolver;
66

77
use PhpParser\Node;
8+
use PhpParser\Node\Name;
89
use PhpParser\Node\Stmt\ClassLike;
910
use Rector\NodeNameResolver\Contract\NodeNameResolverInterface;
1011
use Rector\NodeNameResolver\NodeNameResolver;
@@ -33,7 +34,7 @@ public function getNode(): string
3334
*/
3435
public function resolve(Node $node): ?string
3536
{
36-
if (property_exists($node, 'namespacedName')) {
37+
if (property_exists($node, 'namespacedName') && $node->namespacedName instanceof Name) {
3738
return $node->namespacedName->toString();
3839
}
3940

packages/NodeTypeResolver/NodeTypeResolver/ClassAndInterfaceTypeResolver.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use PHPStan\Type\MixedType;
1313
use PHPStan\Type\ObjectType;
1414
use PHPStan\Type\Type;
15+
use Rector\NodeNameResolver\NodeNameResolver;
1516
use Rector\NodeTypeResolver\Contract\NodeTypeResolverInterface;
1617
use Rector\NodeTypeResolver\Node\AttributeKey;
1718

@@ -23,6 +24,11 @@
2324
*/
2425
final class ClassAndInterfaceTypeResolver implements NodeTypeResolverInterface
2526
{
27+
public function __construct(
28+
private NodeNameResolver $nodeNameResolver
29+
) {
30+
}
31+
2632
/**
2733
* @return array<class-string<Node>>
2834
*/
@@ -45,7 +51,7 @@ public function resolve(Node $node): Type
4551

4652
$classReflection = $scope->getClassReflection();
4753
if (! $classReflection instanceof ClassReflection) {
48-
return new MixedType();
54+
return new ObjectType((string) $this->nodeNameResolver->getName($node));
4955
}
5056

5157
return new ObjectType($classReflection->getName(), null, $classReflection);

phpstan.neon

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -594,3 +594,11 @@ parameters:
594594
-
595595
message: '#Class has a static method must so must contains "Static" in its name#'
596596
path: src/Validation/RectorAssert.php
597+
598+
-
599+
message: '#Call to function property_exists\(\) with PhpParser\\Node\\Stmt\\ClassLike and .{1}namespacedName.{1} will always evaluate to true#'
600+
path: packages/NodeNameResolver/NodeNameResolver/ClassNameResolver.php
601+
602+
-
603+
message: '#Instanceof between PhpParser\\Node\\Name and PhpParser\\Node\\Name will always evaluate to true#'
604+
path: packages/NodeNameResolver/NodeNameResolver/ClassNameResolver.php

rules/CodingStyle/ClassNameImport/UsedImportsResolver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public function resolveForStmts(array $stmts): array
5353

5454
// add class itself
5555
// is not anonymous class
56-
if ($class !== null && property_exists($class, 'namespacedName')) {
56+
if ($class instanceof Class_) {
5757
$className = (string) $this->nodeNameResolver->getName($class);
5858
$usedImports[] = new FullyQualifiedObjectType($className);
5959
}

rules/Php74/TypeAnalyzer/ObjectTypeAnalyzer.php

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,20 @@ public function isSpecial(Type $varType): bool
1818
return true;
1919
}
2020

21-
$types = ! $varType instanceof UnionType
22-
? [$varType]
23-
: $varType->getTypes();
21+
$types = $varType instanceof UnionType
22+
? $varType->getTypes()
23+
: [$varType];
2424

2525
foreach ($types as $type) {
26-
if ($type instanceof FullyQualifiedObjectType && $type->getClassName() === 'Prophecy\Prophecy\ObjectProphecy') {
27-
return true;
26+
if (! $type instanceof FullyQualifiedObjectType) {
27+
continue;
2828
}
29+
30+
if ($type->getClassName() !== 'Prophecy\Prophecy\ObjectProphecy') {
31+
continue;
32+
}
33+
34+
return true;
2935
}
3036

3137
return false;

src/Reflection/ReflectionResolver.php

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
use PHPStan\Reflection\ReflectionProvider;
2323
use PHPStan\Type\TypeUtils;
2424
use PHPStan\Type\TypeWithClassName;
25+
use Rector\Core\NodeAnalyzer\ClassAnalyzer;
2526
use Rector\Core\PhpParser\Node\BetterNodeFinder;
2627
use Rector\Core\PHPStan\Reflection\TypeToCallReflectionResolver\TypeToCallReflectionResolverRegistry;
2728
use Rector\Core\ValueObject\MethodName;
@@ -36,13 +37,14 @@ public function __construct(
3637
private BetterNodeFinder $betterNodeFinder,
3738
private NodeTypeResolver $nodeTypeResolver,
3839
private NodeNameResolver $nodeNameResolver,
39-
private TypeToCallReflectionResolverRegistry $typeToCallReflectionResolverRegistry
40+
private TypeToCallReflectionResolverRegistry $typeToCallReflectionResolverRegistry,
41+
private ClassAnalyzer $classAnalyzer
4042
) {
4143
}
4244

4345
public function resolveClassAndAnonymousClass(ClassLike $classLike): ClassReflection|null
4446
{
45-
if ($classLike instanceof Class_ && $this->isAnonymousClass($classLike)) {
47+
if ($classLike instanceof Class_ && $this->classAnalyzer->isAnonymousClass($classLike)) {
4648
return $this->reflectionProvider->getAnonymousClassReflection(
4749
$classLike,
4850
$classLike->getAttribute(AttributeKey::SCOPE)
@@ -219,9 +221,4 @@ private function resolveFunctionReflectionFromFuncCall(
219221
$funcCallNameType = $scope->getType($funcCall->name);
220222
return $this->typeToCallReflectionResolverRegistry->resolve($funcCallNameType, $scope);
221223
}
222-
223-
private function isAnonymousClass(Class_ $class): bool
224-
{
225-
return ! property_exists($class, 'namespacedName');
226-
}
227224
}

0 commit comments

Comments
 (0)