From e4be4c3ebe98fb80695fd39d3dc0b19f4d3ee3c3 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Sat, 2 Nov 2019 19:34:00 +0100 Subject: [PATCH 1/2] add test case for #2226 --- .../RenameClassRector/AutoImportNamesParameterTest.php | 1 + .../skip_parent_class_same_name.php.inc | 7 +++++++ .../RenameClassRector/Source/SkipParentClassSameName.php | 8 ++++++++ 3 files changed, 16 insertions(+) create mode 100644 packages/Renaming/tests/Rector/Class_/RenameClassRector/Fixture/AutoImportNamesParameter/skip_parent_class_same_name.php.inc create mode 100644 packages/Renaming/tests/Rector/Class_/RenameClassRector/Source/SkipParentClassSameName.php diff --git a/packages/Renaming/tests/Rector/Class_/RenameClassRector/AutoImportNamesParameterTest.php b/packages/Renaming/tests/Rector/Class_/RenameClassRector/AutoImportNamesParameterTest.php index b3dfac270ce6..4f1483b16b90 100644 --- a/packages/Renaming/tests/Rector/Class_/RenameClassRector/AutoImportNamesParameterTest.php +++ b/packages/Renaming/tests/Rector/Class_/RenameClassRector/AutoImportNamesParameterTest.php @@ -34,6 +34,7 @@ public function provideDataForTest(): Iterator yield [__DIR__ . '/Fixture/AutoImportNamesParameter/class_to_new_with_post_import.php.inc']; yield [__DIR__ . '/Fixture/AutoImportNamesParameter/partial_expression.php.inc']; yield [__DIR__ . '/Fixture/AutoImportNamesParameter/skip_closure_me.php.inc']; + yield [__DIR__ . '/Fixture/AutoImportNamesParameter/skip_parent_class_same_name.php.inc']; } /** diff --git a/packages/Renaming/tests/Rector/Class_/RenameClassRector/Fixture/AutoImportNamesParameter/skip_parent_class_same_name.php.inc b/packages/Renaming/tests/Rector/Class_/RenameClassRector/Fixture/AutoImportNamesParameter/skip_parent_class_same_name.php.inc new file mode 100644 index 000000000000..9a33071f2ac5 --- /dev/null +++ b/packages/Renaming/tests/Rector/Class_/RenameClassRector/Fixture/AutoImportNamesParameter/skip_parent_class_same_name.php.inc @@ -0,0 +1,7 @@ + Date: Sat, 2 Nov 2019 19:38:24 +0100 Subject: [PATCH 2/2] fix importing parent that is identical in short to class name --- packages/CodingStyle/src/Imports/ShortNameResolver.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/CodingStyle/src/Imports/ShortNameResolver.php b/packages/CodingStyle/src/Imports/ShortNameResolver.php index dd7a8c1f3116..14eb2be7f58b 100644 --- a/packages/CodingStyle/src/Imports/ShortNameResolver.php +++ b/packages/CodingStyle/src/Imports/ShortNameResolver.php @@ -6,7 +6,9 @@ use Nette\Utils\Strings; use PhpParser\Node; +use PhpParser\Node\Identifier; use PhpParser\Node\Name; +use PhpParser\Node\Stmt\ClassLike; use PhpParser\Node\Stmt\Namespace_; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\PhpParser\NodeTraverser\CallableNodeTraverser; @@ -61,6 +63,14 @@ private function resolveForNamespace(Namespace_ $node): array $this->callableNodeTraverser->traverseNodesWithCallable($node->stmts, function (Node $node) use ( &$shortNames ): void { + // class name is used! + if ($node instanceof ClassLike) { + if ($node->name instanceof Identifier) { + $shortNames[$node->name->toString()] = $node->name->toString(); + return; + } + } + if (! $node instanceof Name) { return; }