Skip to content

Commit 078f193

Browse files
authored
[AutoImport] Allow on FQCN current same class (part 2) (#7235)
* [AutoImport] Allow on FQCN current same class (part 2) * [AutoImport] Allow on FQCN current same class (part 2) * add note: ensure future not forget about it
1 parent 0e50f45 commit 078f193

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
lines changed

rules/CodingStyle/ClassNameImport/ClassNameImportSkipVoter/ClassLikeNameClassNameImportSkipVoter.php

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
namespace Rector\CodingStyle\ClassNameImport\ClassNameImportSkipVoter;
66

77
use PhpParser\Node;
8+
use PHPStan\Analyser\Scope;
89
use Rector\CodingStyle\ClassNameImport\ShortNameResolver;
910
use Rector\CodingStyle\Contract\ClassNameImport\ClassNameImportSkipVoterInterface;
11+
use Rector\NodeTypeResolver\Node\AttributeKey;
1012
use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType;
1113
use Rector\ValueObject\Application\File;
1214

@@ -33,9 +35,31 @@ public function shouldSkip(File $file, FullyQualifiedObjectType $fullyQualifiedO
3335
return false;
3436
}
3537

38+
/**
39+
* Note: Don't use ScopeFetcher::fetch() on Name instance,
40+
* Scope can be null on Name
41+
* This is part of ScopeAnalyzer::NON_REFRESHABLE_NODES
42+
* @see https://github.com/rectorphp/rector-src/blob/9929af7c0179929b4fde6915cb7a06c3141dde6c/src/NodeAnalyzer/ScopeAnalyzer.php#L17
43+
*/
44+
$scope = $node->getAttribute(AttributeKey::SCOPE);
45+
$namespace = $scope instanceof Scope ? $scope->getNamespace() : null;
46+
$namespace = strtolower((string) $namespace);
47+
3648
$shortNameLowered = $fullyQualifiedObjectType->getShortNameLowered();
49+
$fullyQualifiedObjectTypeNamespace = strtolower(
50+
substr($fullyQualifiedObjectType->getClassName(), 0, -strlen($fullyQualifiedObjectType->getShortName()) - 1)
51+
);
52+
3753
foreach ($classLikeNames as $classLikeName) {
38-
if (strtolower($classLikeName) === $shortNameLowered) {
54+
if (strtolower($classLikeName) !== $shortNameLowered) {
55+
continue;
56+
}
57+
58+
if ($namespace === '') {
59+
return true;
60+
}
61+
62+
if ($namespace !== $fullyQualifiedObjectTypeNamespace) {
3963
return true;
4064
}
4165
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace App\Bar;
4+
5+
class FqcnCurrentSameClass
6+
{
7+
public \App\Bar\FqcnCurrentSameClass $prop;
8+
}
9+
10+
?>
11+
-----
12+
<?php
13+
14+
namespace App\Bar;
15+
16+
class FqcnCurrentSameClass
17+
{
18+
public FqcnCurrentSameClass $prop;
19+
}
20+
21+
?>

0 commit comments

Comments
 (0)