Skip to content

Commit d7906c8

Browse files
authored
[AutoImport] Add ShortClassImportSkipVoter to reduce repetitive same check on both docblock and FullyQualified node check (#7288)
1 parent b5dedb4 commit d7906c8

4 files changed

Lines changed: 29 additions & 30 deletions

File tree

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+
5+
namespace Rector\CodingStyle\ClassNameImport\ClassNameImportSkipVoter;
6+
7+
use PhpParser\Node;
8+
use Rector\CodingStyle\Contract\ClassNameImport\ClassNameImportSkipVoterInterface;
9+
use Rector\Configuration\Option;
10+
use Rector\Configuration\Parameter\SimpleParameterProvider;
11+
use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType;
12+
use Rector\ValueObject\Application\File;
13+
14+
final readonly class ShortClassImportSkipVoter implements ClassNameImportSkipVoterInterface
15+
{
16+
public function shouldSkip(File $file, FullyQualifiedObjectType $fullyQualifiedObjectType, Node $node): bool
17+
{
18+
$className = ltrim($fullyQualifiedObjectType->getClassName(), '\\');
19+
20+
if (substr_count($className, '\\') === 0) {
21+
return ! SimpleParameterProvider::provideBoolParameter(Option::IMPORT_SHORT_CLASSES);
22+
}
23+
24+
return false;
25+
}
26+
}

rules/CodingStyle/ClassNameImport/ClassNameImportSkipper.php

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
use PhpParser\Node\Stmt\Use_;
1313
use PhpParser\Node\UseItem;
1414
use Rector\CodingStyle\Contract\ClassNameImport\ClassNameImportSkipVoterInterface;
15-
use Rector\Configuration\Option;
16-
use Rector\Configuration\Parameter\SimpleParameterProvider;
1715
use Rector\Naming\Naming\UseImportsResolver;
1816
use Rector\NodeTypeResolver\Node\AttributeKey;
1917
use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType;
@@ -50,7 +48,7 @@ public function shouldSkipNameForFullyQualifiedObjectType(
5048
public function shouldSkipName(FullyQualified $fullyQualified, array $uses): bool
5149
{
5250
if (substr_count($fullyQualified->toCodeString(), '\\') === 1) {
53-
return $this->shouldSkipShortName($fullyQualified);
51+
return $this->isFunctionOrConstantImport($fullyQualified);
5452
}
5553

5654
// verify long name, as short name verify may conflict
@@ -87,16 +85,6 @@ public function shouldSkipName(FullyQualified $fullyQualified, array $uses): boo
8785
return false;
8886
}
8987

90-
private function shouldSkipShortName(FullyQualified $fullyQualified): bool
91-
{
92-
if ($this->isFunctionOrConstantImport($fullyQualified)) {
93-
return true;
94-
}
95-
96-
// Importing root namespace classes (like \DateTime) is optional
97-
return ! SimpleParameterProvider::provideBoolParameter(Option::IMPORT_SHORT_CLASSES);
98-
}
99-
10088
private function isFunctionOrConstantImport(FullyQualified $fullyQualified): bool
10189
{
10290
if ($fullyQualified->getAttribute(AttributeKey::IS_CONSTFETCH_NAME) === true) {

src/DependencyInjection/LazyContainerFactory.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
use Rector\CodingStyle\ClassNameImport\ClassNameImportSkipVoter\ClassLikeNameClassNameImportSkipVoter;
4747
use Rector\CodingStyle\ClassNameImport\ClassNameImportSkipVoter\FullyQualifiedNameClassNameImportSkipVoter;
4848
use Rector\CodingStyle\ClassNameImport\ClassNameImportSkipVoter\ReservedClassNameImportSkipVoter;
49+
use Rector\CodingStyle\ClassNameImport\ClassNameImportSkipVoter\ShortClassImportSkipVoter;
4950
use Rector\CodingStyle\ClassNameImport\ClassNameImportSkipVoter\UsesClassNameImportSkipVoter;
5051
use Rector\CodingStyle\Contract\ClassNameImport\ClassNameImportSkipVoterInterface;
5152
use Rector\Config\RectorConfig;
@@ -264,6 +265,7 @@ final class LazyContainerFactory
264265
FullyQualifiedNameClassNameImportSkipVoter::class,
265266
UsesClassNameImportSkipVoter::class,
266267
ReservedClassNameImportSkipVoter::class,
268+
ShortClassImportSkipVoter::class,
267269
];
268270

269271
/**

src/NodeTypeResolver/PhpDocNodeVisitor/NameImportingPhpDocNodeVisitor.php

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616
use Rector\BetterPhpDocParser\PhpDoc\SpacelessPhpDocTagNode;
1717
use Rector\BetterPhpDocParser\ValueObject\PhpDocAttributeKey;
1818
use Rector\CodingStyle\ClassNameImport\ClassNameImportSkipper;
19-
use Rector\Configuration\Option;
20-
use Rector\Configuration\Parameter\SimpleParameterProvider;
2119
use Rector\Exception\ShouldNotHappenException;
2220
use Rector\PhpDocParser\PhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor;
2321
use Rector\PostRector\Collector\UseNodesToAddCollector;
@@ -80,11 +78,6 @@ public function enterNode(Node $node): ?Node
8078
return null;
8179
}
8280

83-
// Importing root namespace classes (like \DateTime) is optional
84-
if ($this->shouldSkipShortClassName($staticType)) {
85-
return null;
86-
}
87-
8881
$file = $this->currentFileProvider->getFile();
8982
if (! $file instanceof File) {
9083
return null;
@@ -199,16 +192,6 @@ private function shouldImport(
199192
return count($namespaceParts) > 1;
200193
}
201194

202-
private function shouldSkipShortClassName(FullyQualifiedObjectType $fullyQualifiedObjectType): bool
203-
{
204-
$importShortClasses = SimpleParameterProvider::provideBoolParameter(Option::IMPORT_SHORT_CLASSES);
205-
if ($importShortClasses) {
206-
return false;
207-
}
208-
209-
return substr_count($fullyQualifiedObjectType->getClassName(), '\\') === 0;
210-
}
211-
212195
private function processDoctrineAnnotationTagValueNode(
213196
DoctrineAnnotationTagValueNode $doctrineAnnotationTagValueNode
214197
): void {

0 commit comments

Comments
 (0)