-
-
Notifications
You must be signed in to change notification settings - Fork 345
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[AutoImport] Do not add cast on valid Integer type on Name Node on au…
…to import enabled (#6236) * [AutoImport] Do not add cast on valid Integer type on Name Node on auto import enabled * add ClassConstFetchTypeResolver * Fix phpstan * Fix phpstan * typo fix * add failing fixture on static call * fix * clean up
- Loading branch information
1 parent
3ed476b
commit 174adf1
Showing
7 changed files
with
147 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
54 changes: 54 additions & 0 deletions
54
src/NodeTypeResolver/NodeTypeResolver/ClassConstFetchTypeResolver.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Rector\NodeTypeResolver\NodeTypeResolver; | ||
|
||
use PhpParser\Node; | ||
use PhpParser\Node\Expr\ClassConstFetch; | ||
use PhpParser\Node\Name; | ||
use PhpParser\Node\Name\FullyQualified; | ||
use PHPStan\Analyser\Scope; | ||
use PHPStan\Type\MixedType; | ||
use PHPStan\Type\Type; | ||
use Rector\NodeTypeResolver\Contract\NodeTypeResolverInterface; | ||
use Rector\NodeTypeResolver\Node\AttributeKey; | ||
|
||
/** | ||
* @implements NodeTypeResolverInterface<ClassConstFetch> | ||
*/ | ||
final class ClassConstFetchTypeResolver implements NodeTypeResolverInterface | ||
{ | ||
/** | ||
* @return array<class-string<Node>> | ||
*/ | ||
public function getNodeClasses(): array | ||
{ | ||
return [ClassConstFetch::class]; | ||
} | ||
|
||
/** | ||
* @param ClassConstFetch $node | ||
*/ | ||
public function resolve(Node $node): Type | ||
{ | ||
$scope = $node->getAttribute(AttributeKey::SCOPE); | ||
|
||
if (! $scope instanceof Scope) { | ||
return new MixedType(); | ||
} | ||
|
||
if ($node->class instanceof FullyQualified) { | ||
return $scope->getType($node); | ||
} | ||
|
||
if ($node->class instanceof Name && $node->class->hasAttribute(AttributeKey::NAMESPACED_NAME)) { | ||
$newNode = clone $node; | ||
$newNode->class = new FullyQualified($node->class->getAttribute(AttributeKey::NAMESPACED_NAME)); | ||
|
||
return $scope->getType($newNode); | ||
} | ||
|
||
return $scope->getType($node); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
37 changes: 37 additions & 0 deletions
37
tests/Issues/AutoImport/Fixture/do_not_add_cast_valid_int_type_from_name.php.inc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
<?php | ||
|
||
namespace Rector\Tests\Issues\AutoImport\Fixture; | ||
|
||
use Symfony\Component\Console\Command\Command; | ||
use Symfony\Component\Console\Input\InputInterface; | ||
use Symfony\Component\Console\Output\OutputInterface; | ||
|
||
class DoNotAddCastValidIntTypeFromName extends Command | ||
{ | ||
private ?OutputInterface $outputInterface = null; | ||
|
||
protected function execute(InputInterface $input, OutputInterface $output): int | ||
{ | ||
return Command::SUCCESS; | ||
} | ||
} | ||
|
||
?> | ||
----- | ||
<?php | ||
|
||
namespace Rector\Tests\Issues\AutoImport\Fixture; | ||
|
||
use Symfony\Component\Console\Command\Command; | ||
use Symfony\Component\Console\Input\InputInterface; | ||
use Symfony\Component\Console\Output\OutputInterface; | ||
|
||
class DoNotAddCastValidIntTypeFromName extends Command | ||
{ | ||
protected function execute(InputInterface $input, OutputInterface $output): int | ||
{ | ||
return Command::SUCCESS; | ||
} | ||
} | ||
|
||
?> |
39 changes: 39 additions & 0 deletions
39
tests/Issues/AutoImport/Fixture/do_not_add_cast_valid_int_type_from_name2.php.inc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
<?php | ||
|
||
namespace Rector\Tests\Issues\AutoImport\Fixture; | ||
|
||
use Symfony\Component\Console\Command\Command; | ||
use Symfony\Component\Console\Input\InputInterface; | ||
use Symfony\Component\Console\Output\OutputInterface; | ||
use Rector\Tests\Issues\AutoImport\Source\SomeClass; | ||
|
||
class DoNotAddCastValidIntTypeFromName2 extends Command | ||
{ | ||
private ?OutputInterface $outputInterface = null; | ||
|
||
protected function execute(InputInterface $input, OutputInterface $output): int | ||
{ | ||
return SomeClass::zero(); | ||
} | ||
} | ||
|
||
?> | ||
----- | ||
<?php | ||
|
||
namespace Rector\Tests\Issues\AutoImport\Fixture; | ||
|
||
use Symfony\Component\Console\Command\Command; | ||
use Symfony\Component\Console\Input\InputInterface; | ||
use Symfony\Component\Console\Output\OutputInterface; | ||
use Rector\Tests\Issues\AutoImport\Source\SomeClass; | ||
|
||
class DoNotAddCastValidIntTypeFromName2 extends Command | ||
{ | ||
protected function execute(InputInterface $input, OutputInterface $output): int | ||
{ | ||
return SomeClass::zero(); | ||
} | ||
} | ||
|
||
?> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,4 +6,8 @@ | |
|
||
class SomeClass | ||
{ | ||
public static function zero(): int | ||
{ | ||
return 0; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters