mirror of
https://github.com/rectorphp/rector.git
synced 2024-06-02 09:20:52 +00:00
decouple PhpParser mappers to StaticTypeMapper
This commit is contained in:
parent
2a930f893d
commit
8d47291c96
|
@ -40,7 +40,7 @@ final class NodeTypeResolver
|
|||
/**
|
||||
* @var NodeTypeResolverInterface[]
|
||||
*/
|
||||
private $perNodeTypeResolvers = [];
|
||||
private $nodeTypeResolvers = [];
|
||||
|
||||
/**
|
||||
* @var NodeNameResolver
|
||||
|
@ -73,7 +73,7 @@ final class NodeTypeResolver
|
|||
private $arrayTypeAnalyzer;
|
||||
|
||||
/**
|
||||
* @param NodeTypeResolverInterface[] $perNodeTypeResolvers
|
||||
* @param NodeTypeResolverInterface[] $nodeTypeResolvers
|
||||
*/
|
||||
public function __construct(
|
||||
NodeNameResolver $nodeNameResolver,
|
||||
|
@ -81,12 +81,12 @@ final class NodeTypeResolver
|
|||
ReflectionProvider $reflectionProvider,
|
||||
TypeFactory $typeFactory,
|
||||
ObjectTypeSpecifier $objectTypeSpecifier,
|
||||
array $perNodeTypeResolvers
|
||||
array $nodeTypeResolvers
|
||||
) {
|
||||
$this->nodeNameResolver = $nodeNameResolver;
|
||||
|
||||
foreach ($perNodeTypeResolvers as $perNodeTypeResolver) {
|
||||
$this->addPerNodeTypeResolver($perNodeTypeResolver);
|
||||
foreach ($nodeTypeResolvers as $nodeTypeResolver) {
|
||||
$this->addNodeTypeResolver($nodeTypeResolver);
|
||||
}
|
||||
|
||||
$this->classReflectionTypesResolver = $classReflectionTypesResolver;
|
||||
|
@ -238,10 +238,10 @@ final class NodeTypeResolver
|
|||
return is_a($this->resolve($node), $staticTypeClass);
|
||||
}
|
||||
|
||||
private function addPerNodeTypeResolver(NodeTypeResolverInterface $perNodeTypeResolver): void
|
||||
private function addNodeTypeResolver(NodeTypeResolverInterface $nodeTypeResolver): void
|
||||
{
|
||||
foreach ($perNodeTypeResolver->getNodeClasses() as $nodeClass) {
|
||||
$this->perNodeTypeResolvers[$nodeClass] = $perNodeTypeResolver;
|
||||
foreach ($nodeTypeResolver->getNodeClasses() as $nodeClass) {
|
||||
$this->nodeTypeResolvers[$nodeClass] = $nodeTypeResolver;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -283,13 +283,13 @@ final class NodeTypeResolver
|
|||
|
||||
private function resolveFirstType(Node $node): Type
|
||||
{
|
||||
foreach ($this->perNodeTypeResolvers as $perNodeTypeResolver) {
|
||||
foreach ($perNodeTypeResolver->getNodeClasses() as $nodeClass) {
|
||||
foreach ($this->nodeTypeResolvers as $nodeTypeResolver) {
|
||||
foreach ($nodeTypeResolver->getNodeClasses() as $nodeClass) {
|
||||
if (! is_a($node, $nodeClass)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
return $perNodeTypeResolver->resolve($node);
|
||||
return $nodeTypeResolver->resolve($node);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\NodeTypeResolver\Contract\PhpDocParser;
|
||||
namespace Rector\StaticTypeMapper\Contract\PhpDocParser;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PHPStan\Analyser\NameScope;
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\NodeTypeResolver\Contract\PhpParser;
|
||||
namespace Rector\StaticTypeMapper\Contract\PhpParser;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PHPStan\Type\Type;
|
|
@ -2,12 +2,12 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\NodeTypeResolver\TypeMapper;
|
||||
namespace Rector\StaticTypeMapper\Mapper;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PHPStan\Type\Type;
|
||||
use Rector\Core\Exception\NotImplementedException;
|
||||
use Rector\NodeTypeResolver\Contract\PhpParser\PhpParserNodeMapperInterface;
|
||||
use Rector\StaticTypeMapper\Contract\PhpParser\PhpParserNodeMapperInterface;
|
||||
|
||||
final class PhpParserNodeMapper
|
||||
{
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\NodeTypeResolver\TypeMapper;
|
||||
namespace Rector\StaticTypeMapper\Mapper;
|
||||
|
||||
use Nette\Utils\Strings;
|
||||
use PHPStan\Type\ArrayType;
|
||||
|
@ -20,23 +20,26 @@ use PHPStan\Type\VoidType;
|
|||
|
||||
final class ScalarStringToTypeMapper
|
||||
{
|
||||
/**
|
||||
* @var string[][]
|
||||
*/
|
||||
private const SCALAR_NAME_BY_TYPE = [
|
||||
StringType::class => ['string'],
|
||||
FloatType::class => ['float', 'real', 'double'],
|
||||
IntegerType::class => ['int', 'integer'],
|
||||
BooleanType::class => ['false', 'true', 'bool', 'boolean'],
|
||||
NullType::class => ['null'],
|
||||
VoidType::class => ['void'],
|
||||
ResourceType::class => ['resource'],
|
||||
CallableType::class => ['callback', 'callable'],
|
||||
ObjectWithoutClassType::class => ['object'],
|
||||
];
|
||||
|
||||
public function mapScalarStringToType(string $scalarName): Type
|
||||
{
|
||||
$loweredScalarName = Strings::lower($scalarName);
|
||||
|
||||
$scalarNameByType = [
|
||||
StringType::class => ['string'],
|
||||
FloatType::class => ['float', 'real', 'double'],
|
||||
IntegerType::class => ['int', 'integer'],
|
||||
BooleanType::class => ['false', 'true', 'bool', 'boolean'],
|
||||
NullType::class => ['null'],
|
||||
VoidType::class => ['void'],
|
||||
ResourceType::class => ['resource'],
|
||||
CallableType::class => ['callback', 'callable'],
|
||||
ObjectWithoutClassType::class => ['object'],
|
||||
];
|
||||
|
||||
foreach ($scalarNameByType as $objectType => $scalarNames) {
|
||||
foreach (self::SCALAR_NAME_BY_TYPE as $objectType => $scalarNames) {
|
||||
if (! in_array($loweredScalarName, $scalarNames, true)) {
|
||||
continue;
|
||||
}
|
|
@ -14,25 +14,22 @@ use Rector\Core\Exception\NotImplementedException;
|
|||
|
||||
final class StringTypeToPhpParserNodeMapper
|
||||
{
|
||||
/**
|
||||
* @var string[]
|
||||
*/
|
||||
private const SAME_NAMED_IDENTIFIERS = ['string', 'int', 'float', 'array', 'void'];
|
||||
|
||||
/**
|
||||
* @return Identifier|Name|NullableType
|
||||
*/
|
||||
public function map(string $type): Node
|
||||
{
|
||||
if ($type === 'string') {
|
||||
return new Identifier('string');
|
||||
}
|
||||
foreach (self::SAME_NAMED_IDENTIFIERS as $sameNamedIdentifier) {
|
||||
if ($type !== $sameNamedIdentifier) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($type === 'int') {
|
||||
return new Identifier('int');
|
||||
}
|
||||
|
||||
if ($type === 'array') {
|
||||
return new Identifier('array');
|
||||
}
|
||||
|
||||
if ($type === 'float') {
|
||||
return new Identifier('float');
|
||||
return new Identifier($sameNamedIdentifier);
|
||||
}
|
||||
|
||||
if (Strings::contains($type, '\\') || ctype_upper($type[0])) {
|
||||
|
@ -48,10 +45,6 @@ final class StringTypeToPhpParserNodeMapper
|
|||
return new NullableType($nameNode);
|
||||
}
|
||||
|
||||
if ($type === 'void') {
|
||||
return new Identifier('void');
|
||||
}
|
||||
|
||||
throw new NotImplementedException(sprintf('%s for "%s"', __METHOD__, $type));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\NodeTypeResolver\PhpDoc;
|
||||
namespace Rector\StaticTypeMapper\PhpDoc;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PHPStan\Analyser\NameScope;
|
||||
use PHPStan\PhpDocParser\Ast\Type\TypeNode;
|
||||
use PHPStan\Type\Type;
|
||||
use Rector\Core\Exception\NotImplementedException;
|
||||
use Rector\NodeTypeResolver\Contract\PhpDocParser\PhpDocTypeMapperInterface;
|
||||
use Rector\StaticTypeMapper\Contract\PhpDocParser\PhpDocTypeMapperInterface;
|
||||
|
||||
final class PhpDocTypeMapper
|
||||
{
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\NodeTypeResolver\PhpDocParser;
|
||||
namespace Rector\StaticTypeMapper\PhpDocParser;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PHPStan\Analyser\NameScope;
|
||||
|
@ -11,8 +11,8 @@ use PHPStan\PhpDocParser\Ast\Type\TypeNode;
|
|||
use PHPStan\Type\ArrayType;
|
||||
use PHPStan\Type\MixedType;
|
||||
use PHPStan\Type\Type;
|
||||
use Rector\NodeTypeResolver\Contract\PhpDocParser\PhpDocTypeMapperInterface;
|
||||
use Rector\NodeTypeResolver\PhpDoc\PhpDocTypeMapper;
|
||||
use Rector\StaticTypeMapper\Contract\PhpDocParser\PhpDocTypeMapperInterface;
|
||||
use Rector\StaticTypeMapper\PhpDoc\PhpDocTypeMapper;
|
||||
|
||||
final class ArrayTypeMapper implements PhpDocTypeMapperInterface
|
||||
{
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\NodeTypeResolver\PhpDocParser;
|
||||
namespace Rector\StaticTypeMapper\PhpDocParser;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PHPStan\Analyser\NameScope;
|
||||
|
@ -10,7 +10,7 @@ use PHPStan\PhpDoc\TypeNodeResolver;
|
|||
use PHPStan\PhpDocParser\Ast\Type\GenericTypeNode;
|
||||
use PHPStan\PhpDocParser\Ast\Type\TypeNode;
|
||||
use PHPStan\Type\Type;
|
||||
use Rector\NodeTypeResolver\Contract\PhpDocParser\PhpDocTypeMapperInterface;
|
||||
use Rector\StaticTypeMapper\Contract\PhpDocParser\PhpDocTypeMapperInterface;
|
||||
|
||||
final class GenericTypeMapper implements PhpDocTypeMapperInterface
|
||||
{
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\NodeTypeResolver\PhpDocParser;
|
||||
namespace Rector\StaticTypeMapper\PhpDocParser;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PHPStan\Analyser\NameScope;
|
||||
|
@ -16,11 +16,11 @@ use PHPStan\Type\StaticType;
|
|||
use PHPStan\Type\Type;
|
||||
use Rector\AttributeAwarePhpDoc\Ast\Type\AttributeAwareIdentifierTypeNode;
|
||||
use Rector\BetterPhpDocParser\Type\PreSlashStringType;
|
||||
use Rector\NodeTypeResolver\Contract\PhpDocParser\PhpDocTypeMapperInterface;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\NodeTypeResolver\TypeMapper\ScalarStringToTypeMapper;
|
||||
use Rector\PHPStan\Type\ParentStaticType;
|
||||
use Rector\PHPStan\Type\SelfObjectType;
|
||||
use Rector\StaticTypeMapper\Contract\PhpDocParser\PhpDocTypeMapperInterface;
|
||||
use Rector\StaticTypeMapper\Mapper\ScalarStringToTypeMapper;
|
||||
use Rector\TypeDeclaration\PHPStan\Type\ObjectTypeSpecifier;
|
||||
|
||||
final class IdentifierTypeMapper implements PhpDocTypeMapperInterface
|
|
@ -2,16 +2,16 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\NodeTypeResolver\PhpDocParser;
|
||||
namespace Rector\StaticTypeMapper\PhpDocParser;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PHPStan\Analyser\NameScope;
|
||||
use PHPStan\PhpDocParser\Ast\Type\IntersectionTypeNode;
|
||||
use PHPStan\PhpDocParser\Ast\Type\TypeNode;
|
||||
use PHPStan\Type\Type;
|
||||
use Rector\NodeTypeResolver\Contract\PhpDocParser\PhpDocTypeMapperInterface;
|
||||
use Rector\NodeTypeResolver\PhpDoc\PhpDocTypeMapper;
|
||||
use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory;
|
||||
use Rector\StaticTypeMapper\Contract\PhpDocParser\PhpDocTypeMapperInterface;
|
||||
use Rector\StaticTypeMapper\PhpDoc\PhpDocTypeMapper;
|
||||
|
||||
final class IntersectionTypeMapper implements PhpDocTypeMapperInterface
|
||||
{
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\NodeTypeResolver\PhpDocParser;
|
||||
namespace Rector\StaticTypeMapper\PhpDocParser;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PHPStan\Analyser\NameScope;
|
||||
|
@ -11,8 +11,8 @@ use PHPStan\PhpDocParser\Ast\Type\TypeNode;
|
|||
use PHPStan\Type\ThisType;
|
||||
use PHPStan\Type\Type;
|
||||
use Rector\Core\Exception\ShouldNotHappenException;
|
||||
use Rector\NodeTypeResolver\Contract\PhpDocParser\PhpDocTypeMapperInterface;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\StaticTypeMapper\Contract\PhpDocParser\PhpDocTypeMapperInterface;
|
||||
|
||||
final class ThisTypeMapper implements PhpDocTypeMapperInterface
|
||||
{
|
|
@ -2,16 +2,16 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\NodeTypeResolver\PhpDocParser;
|
||||
namespace Rector\StaticTypeMapper\PhpDocParser;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PHPStan\Analyser\NameScope;
|
||||
use PHPStan\PhpDocParser\Ast\Type\TypeNode;
|
||||
use PHPStan\PhpDocParser\Ast\Type\UnionTypeNode;
|
||||
use PHPStan\Type\Type;
|
||||
use Rector\NodeTypeResolver\Contract\PhpDocParser\PhpDocTypeMapperInterface;
|
||||
use Rector\NodeTypeResolver\PhpDoc\PhpDocTypeMapper;
|
||||
use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory;
|
||||
use Rector\StaticTypeMapper\Contract\PhpDocParser\PhpDocTypeMapperInterface;
|
||||
use Rector\StaticTypeMapper\PhpDoc\PhpDocTypeMapper;
|
||||
|
||||
final class UnionTypeMapper implements PhpDocTypeMapperInterface
|
||||
{
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\NodeTypeResolver\PhpParser;
|
||||
namespace Rector\StaticTypeMapper\PhpParser;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Type\MixedType;
|
||||
use PHPStan\Type\Type;
|
||||
use Rector\NodeTypeResolver\Contract\PhpParser\PhpParserNodeMapperInterface;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\StaticTypeMapper\Contract\PhpParser\PhpParserNodeMapperInterface;
|
||||
|
||||
final class ExprNodeMapper implements PhpParserNodeMapperInterface
|
||||
{
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\NodeTypeResolver\PhpParser;
|
||||
namespace Rector\StaticTypeMapper\PhpParser;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Name\FullyQualified;
|
||||
use PHPStan\Type\Type;
|
||||
use Rector\NodeTypeResolver\Contract\PhpParser\PhpParserNodeMapperInterface;
|
||||
use Rector\PHPStan\Type\FullyQualifiedObjectType;
|
||||
use Rector\StaticTypeMapper\Contract\PhpParser\PhpParserNodeMapperInterface;
|
||||
|
||||
final class FullyQualifiedNodeMapper implements PhpParserNodeMapperInterface
|
||||
{
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\NodeTypeResolver\PhpParser;
|
||||
namespace Rector\StaticTypeMapper\PhpParser;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Identifier;
|
||||
use PHPStan\Type\MixedType;
|
||||
use PHPStan\Type\StringType;
|
||||
use PHPStan\Type\Type;
|
||||
use Rector\NodeTypeResolver\Contract\PhpParser\PhpParserNodeMapperInterface;
|
||||
use Rector\NodeTypeResolver\TypeMapper\ScalarStringToTypeMapper;
|
||||
use Rector\StaticTypeMapper\Contract\PhpParser\PhpParserNodeMapperInterface;
|
||||
use Rector\StaticTypeMapper\Mapper\ScalarStringToTypeMapper;
|
||||
|
||||
final class IdentifierNodeMapper implements PhpParserNodeMapperInterface
|
||||
{
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\NodeTypeResolver\PhpParser;
|
||||
namespace Rector\StaticTypeMapper\PhpParser;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Name;
|
||||
use PHPStan\Type\MixedType;
|
||||
use PHPStan\Type\Type;
|
||||
use Rector\NodeTypeResolver\ClassExistenceStaticHelper;
|
||||
use Rector\NodeTypeResolver\Contract\PhpParser\PhpParserNodeMapperInterface;
|
||||
use Rector\PHPStan\Type\FullyQualifiedObjectType;
|
||||
use Rector\StaticTypeMapper\Contract\PhpParser\PhpParserNodeMapperInterface;
|
||||
|
||||
final class NameNodeMapper implements PhpParserNodeMapperInterface
|
||||
{
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\NodeTypeResolver\PhpParser;
|
||||
namespace Rector\StaticTypeMapper\PhpParser;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\NullableType;
|
||||
use PHPStan\Type\NullType;
|
||||
use PHPStan\Type\Type;
|
||||
use Rector\NodeTypeResolver\Contract\PhpParser\PhpParserNodeMapperInterface;
|
||||
use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory;
|
||||
use Rector\NodeTypeResolver\TypeMapper\PhpParserNodeMapper;
|
||||
use Rector\StaticTypeMapper\Contract\PhpParser\PhpParserNodeMapperInterface;
|
||||
use Rector\StaticTypeMapper\Mapper\PhpParserNodeMapper;
|
||||
|
||||
final class NullableTypeNodeMapper implements PhpParserNodeMapperInterface
|
||||
{
|
|
@ -16,10 +16,10 @@ use PHPStan\PhpDocParser\Ast\PhpDoc\VarTagValueNode;
|
|||
use PHPStan\PhpDocParser\Ast\Type\TypeNode;
|
||||
use PHPStan\Type\Type;
|
||||
use Rector\Core\Exception\NotImplementedException;
|
||||
use Rector\NodeTypeResolver\PhpDoc\PhpDocTypeMapper;
|
||||
use Rector\NodeTypeResolver\TypeMapper\PhpParserNodeMapper;
|
||||
use Rector\PHPStanStaticTypeMapper\PHPStanStaticTypeMapper;
|
||||
use Rector\StaticTypeMapper\Mapper\PhpParserNodeMapper;
|
||||
use Rector\StaticTypeMapper\Mapper\StringTypeToPhpParserNodeMapper;
|
||||
use Rector\StaticTypeMapper\PhpDoc\PhpDocTypeMapper;
|
||||
use Rector\StaticTypeMapper\PHPStan\NameScopeFactory;
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue
Block a user