From 3314d80ede10896587abcba2747c7abf33673f51 Mon Sep 17 00:00:00 2001 From: Kathryn Reeve <67553+BinaryKitten@users.noreply.github.com> Date: Tue, 6 Jan 2026 11:49:37 +0000 Subject: [PATCH 1/7] Add test case for issue with Carbon import --- .../error_merged_import_carbon.php.inc | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_carbon.php.inc diff --git a/rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_carbon.php.inc b/rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_carbon.php.inc new file mode 100644 index 00000000000..d78ed1c4383 --- /dev/null +++ b/rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_carbon.php.inc @@ -0,0 +1,43 @@ + +----- + From 0a67e6a838336270933adf5f48f27d31cab5c40f Mon Sep 17 00:00:00 2001 From: Kathryn Reeve <67553+BinaryKitten@users.noreply.github.com> Date: Tue, 6 Jan 2026 11:55:15 +0000 Subject: [PATCH 2/7] fix fixture php line to enable clearer error showing --- .../FixtureAutoImportNames/error_merged_import_carbon.php.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_carbon.php.inc b/rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_carbon.php.inc index d78ed1c4383..f93ee89c693 100644 --- a/rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_carbon.php.inc +++ b/rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_carbon.php.inc @@ -20,7 +20,7 @@ class MergedImportError ?> ----- - Date: Tue, 6 Jan 2026 12:31:29 +0000 Subject: [PATCH 3/7] Second example with Illuminate\Support\Carbon --- .../error_merged_import_carbon_2.php.inc | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_carbon_2.php.inc diff --git a/rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_carbon_2.php.inc b/rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_carbon_2.php.inc new file mode 100644 index 00000000000..89063dbb117 --- /dev/null +++ b/rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_carbon_2.php.inc @@ -0,0 +1,43 @@ + +----- + From dc39e6cb8489fc19628c8e48f20cde9b35dee6e7 Mon Sep 17 00:00:00 2001 From: Kathryn Reeve <67553+BinaryKitten@users.noreply.github.com> Date: Tue, 6 Jan 2026 12:42:05 +0000 Subject: [PATCH 4/7] rename test files after discussion --- ...on.php.inc => error_merged_import_property_annotation.php.inc} | 0 ....php.inc => error_merged_import_property_annotation_2.php.inc} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/{error_merged_import_carbon.php.inc => error_merged_import_property_annotation.php.inc} (100%) rename rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/{error_merged_import_carbon_2.php.inc => error_merged_import_property_annotation_2.php.inc} (100%) diff --git a/rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_carbon.php.inc b/rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_property_annotation.php.inc similarity index 100% rename from rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_carbon.php.inc rename to rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_property_annotation.php.inc diff --git a/rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_carbon_2.php.inc b/rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_property_annotation_2.php.inc similarity index 100% rename from rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_carbon_2.php.inc rename to rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_property_annotation_2.php.inc From 2efb395743c404db005975be63b5e66b972fc0cf Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 3 Apr 2026 06:43:13 +0700 Subject: [PATCH 5/7] move to tests --- .../Fixture/merged_import_property_annotation.php.inc | 0 .../Fixture/merged_import_property_annotation_2.php.inc | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_property_annotation.php.inc => tests/Issues/NamespacedUseAutoImport/Fixture/merged_import_property_annotation.php.inc (100%) rename rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_property_annotation_2.php.inc => tests/Issues/NamespacedUseAutoImport/Fixture/merged_import_property_annotation_2.php.inc (100%) diff --git a/rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_property_annotation.php.inc b/tests/Issues/NamespacedUseAutoImport/Fixture/merged_import_property_annotation.php.inc similarity index 100% rename from rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_property_annotation.php.inc rename to tests/Issues/NamespacedUseAutoImport/Fixture/merged_import_property_annotation.php.inc diff --git a/rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_property_annotation_2.php.inc b/tests/Issues/NamespacedUseAutoImport/Fixture/merged_import_property_annotation_2.php.inc similarity index 100% rename from rules-tests/Renaming/Rector/Name/RenameClassRector/FixtureAutoImportNames/error_merged_import_property_annotation_2.php.inc rename to tests/Issues/NamespacedUseAutoImport/Fixture/merged_import_property_annotation_2.php.inc From 2475409bbb3854da23b006cbabb4462c9261cd60 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 3 Apr 2026 07:20:04 +0700 Subject: [PATCH 6/7] update fixture namespace --- .../Fixture/merged_import_property_annotation.php.inc | 4 ++-- .../Fixture/merged_import_property_annotation_2.php.inc | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/Issues/NamespacedUseAutoImport/Fixture/merged_import_property_annotation.php.inc b/tests/Issues/NamespacedUseAutoImport/Fixture/merged_import_property_annotation.php.inc index f93ee89c693..96dd7e503f3 100644 --- a/tests/Issues/NamespacedUseAutoImport/Fixture/merged_import_property_annotation.php.inc +++ b/tests/Issues/NamespacedUseAutoImport/Fixture/merged_import_property_annotation.php.inc @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Rector\Tests\Renaming\Rector\Name\RenameClassRector\Source; +namespace Rector\Tests\Issues\NamespacedUseAutoImport\Fixture; use Carbon\Carbon; use Carbon\CarbonInterface; @@ -24,7 +24,7 @@ class MergedImportError declare(strict_types=1); -namespace Rector\Tests\Renaming\Rector\Name\RenameClassRector\Source; +namespace Rector\Tests\Issues\NamespacedUseAutoImport\Fixture; use Carbon\Carbon; use Carbon\CarbonInterface; diff --git a/tests/Issues/NamespacedUseAutoImport/Fixture/merged_import_property_annotation_2.php.inc b/tests/Issues/NamespacedUseAutoImport/Fixture/merged_import_property_annotation_2.php.inc index 89063dbb117..9efdcbd04af 100644 --- a/tests/Issues/NamespacedUseAutoImport/Fixture/merged_import_property_annotation_2.php.inc +++ b/tests/Issues/NamespacedUseAutoImport/Fixture/merged_import_property_annotation_2.php.inc @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Rector\Tests\Renaming\Rector\Name\RenameClassRector\Source; +namespace Rector\Tests\Issues\NamespacedUseAutoImport\Fixture; use Illuminate\Support\Carbon; use Carbon\CarbonInterface; @@ -24,7 +24,7 @@ class MergedImportErrorOtherVariety declare(strict_types=1); -namespace Rector\Tests\Renaming\Rector\Name\RenameClassRector\Source; +namespace Rector\Tests\Issues\NamespacedUseAutoImport\Fixture; use Illuminate\Support\Carbon; use Carbon\CarbonInterface; From 54f4fe138e7674adcc241e333aec129cde67924b Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sun, 5 Apr 2026 20:43:44 +0700 Subject: [PATCH 7/7] [AutoImport] Handle FQCN in/not in use on auto import + remove unused import --- .../PHPStan/ObjectTypeSpecifier.php | 16 +++--- stubs/Carbon/CarbonInterface.php | 12 +++++ .../Fixture/in_use_fqcn_docblock.php.inc | 49 +++++++++++++++++++ ...p.inc => not_in_use_fqcn_docblock.php.inc} | 4 +- ...php.inc => not_in_use_fqcn_docblock_2.inc} | 5 +- 5 files changed, 74 insertions(+), 12 deletions(-) create mode 100644 stubs/Carbon/CarbonInterface.php create mode 100644 tests/Issues/NamespacedUseAutoImport/Fixture/in_use_fqcn_docblock.php.inc rename tests/Issues/NamespacedUseAutoImport/Fixture/{merged_import_property_annotation_2.php.inc => not_in_use_fqcn_docblock.php.inc} (90%) rename tests/Issues/NamespacedUseAutoImport/Fixture/{merged_import_property_annotation.php.inc => not_in_use_fqcn_docblock_2.inc} (89%) diff --git a/rules/TypeDeclaration/PHPStan/ObjectTypeSpecifier.php b/rules/TypeDeclaration/PHPStan/ObjectTypeSpecifier.php index 012345a8744..10e30330fe7 100644 --- a/rules/TypeDeclaration/PHPStan/ObjectTypeSpecifier.php +++ b/rules/TypeDeclaration/PHPStan/ObjectTypeSpecifier.php @@ -51,14 +51,16 @@ public function narrowToFullyQualifiedOrAliasedObjectType( $uses = $this->useImportsResolver->resolve(); - $aliasedObjectType = $this->matchAliasedObjectType($objectType, $uses); - if ($aliasedObjectType instanceof AliasedObjectType) { - return $aliasedObjectType; - } + if (! $withPreslash) { + $aliasedObjectType = $this->matchAliasedObjectType($objectType, $uses); + if ($aliasedObjectType instanceof AliasedObjectType) { + return $aliasedObjectType; + } - $shortenedObjectType = $this->matchShortenedObjectType($objectType, $uses); - if ($shortenedObjectType !== null) { - return $shortenedObjectType; + $shortenedObjectType = $this->matchShortenedObjectType($objectType, $uses); + if ($shortenedObjectType !== null) { + return $shortenedObjectType; + } } if ($this->reflectionProvider->hasClass($className)) { diff --git a/stubs/Carbon/CarbonInterface.php b/stubs/Carbon/CarbonInterface.php new file mode 100644 index 00000000000..e269ec39d80 --- /dev/null +++ b/stubs/Carbon/CarbonInterface.php @@ -0,0 +1,12 @@ + +----- + \ No newline at end of file diff --git a/tests/Issues/NamespacedUseAutoImport/Fixture/merged_import_property_annotation_2.php.inc b/tests/Issues/NamespacedUseAutoImport/Fixture/not_in_use_fqcn_docblock.php.inc similarity index 90% rename from tests/Issues/NamespacedUseAutoImport/Fixture/merged_import_property_annotation_2.php.inc rename to tests/Issues/NamespacedUseAutoImport/Fixture/not_in_use_fqcn_docblock.php.inc index 9efdcbd04af..fe157429394 100644 --- a/tests/Issues/NamespacedUseAutoImport/Fixture/merged_import_property_annotation_2.php.inc +++ b/tests/Issues/NamespacedUseAutoImport/Fixture/not_in_use_fqcn_docblock.php.inc @@ -10,7 +10,7 @@ use Carbon\CarbonInterface; /** * @property \Carbon\CarbonInterface|null $deleted_at */ -class MergedImportErrorOtherVariety +class NotInUseFqcnDocblock { public function demoFunction(): array { @@ -32,7 +32,7 @@ use Carbon\CarbonInterface; /** * @property CarbonInterface|null $deleted_at */ -class MergedImportErrorOtherVariety +class NotInUseFqcnDocblock { public function demoFunction(): array { diff --git a/tests/Issues/NamespacedUseAutoImport/Fixture/merged_import_property_annotation.php.inc b/tests/Issues/NamespacedUseAutoImport/Fixture/not_in_use_fqcn_docblock_2.inc similarity index 89% rename from tests/Issues/NamespacedUseAutoImport/Fixture/merged_import_property_annotation.php.inc rename to tests/Issues/NamespacedUseAutoImport/Fixture/not_in_use_fqcn_docblock_2.inc index 96dd7e503f3..07b93a9e88d 100644 --- a/tests/Issues/NamespacedUseAutoImport/Fixture/merged_import_property_annotation.php.inc +++ b/tests/Issues/NamespacedUseAutoImport/Fixture/not_in_use_fqcn_docblock_2.inc @@ -10,7 +10,7 @@ use Carbon\CarbonInterface; /** * @property \Carbon\CarbonInterface|null $deleted_at */ -class MergedImportError +class NotInUseFqcnDocblock2 { public function demoFunction(): array { @@ -27,12 +27,11 @@ declare(strict_types=1); namespace Rector\Tests\Issues\NamespacedUseAutoImport\Fixture; use Carbon\Carbon; -use Carbon\CarbonInterface; /** * @property CarbonInterface|null $deleted_at */ -class MergedImportError +class NotInUseFqcnDocblock2 { public function demoFunction(): array {