[Downgrade PHP 7.0] Remove param and return types (#4819)

Co-authored-by: rector-bot <tomas@getrector.org>
This commit is contained in:
Leonardo Losoviz 2020-12-08 20:02:26 +08:00 committed by GitHub
parent a3add7d409
commit 7c991a9898
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
25 changed files with 350 additions and 11 deletions

View File

@ -86,6 +86,7 @@
"Rector\\DoctrineCodeQuality\\": "rules/doctrine-code-quality/src",
"Rector\\DoctrineGedmoToKnplabs\\": "rules/doctrine-gedmo-to-knplabs/src",
"Rector\\Doctrine\\": "rules/doctrine/src",
"Rector\\DowngradePhp70\\": "rules/downgrade-php70/src",
"Rector\\DowngradePhp71\\": "rules/downgrade-php71/src",
"Rector\\DowngradePhp72\\": "rules/downgrade-php72/src",
"Rector\\DowngradePhp73\\": "rules/downgrade-php73/src",
@ -209,6 +210,7 @@
"Rector\\DoctrineCodeQuality\\Tests\\": "rules/doctrine-code-quality/tests",
"Rector\\DoctrineGedmoToKnplabs\\Tests\\": "rules/doctrine-gedmo-to-knplabs/tests",
"Rector\\Doctrine\\Tests\\": "rules/doctrine/tests",
"Rector\\DowngradePhp70\\Tests\\": "rules/downgrade-php70/tests",
"Rector\\DowngradePhp71\\Tests\\": "rules/downgrade-php71/tests",
"Rector\\DowngradePhp72\\Tests\\": "rules/downgrade-php72/tests",
"Rector\\DowngradePhp73\\Tests\\": "rules/downgrade-php73/tests",

View File

@ -0,0 +1,18 @@
<?php
declare(strict_types=1);
use Rector\Downgrade\Rector\LNumber\ChangePhpVersionInPlatformCheckRector;
use Rector\DowngradePhp70\Rector\FunctionLike\DowngradeTypeParamDeclarationRector;
use Rector\DowngradePhp70\Rector\FunctionLike\DowngradeTypeReturnDeclarationRector;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
return static function (ContainerConfigurator $containerConfigurator): void {
$services = $containerConfigurator->services();
$services->set(DowngradeTypeParamDeclarationRector::class);
$services->set(DowngradeTypeReturnDeclarationRector::class);
$services->set(ChangePhpVersionInPlatformCheckRector::class)
->call('configure', [[
ChangePhpVersionInPlatformCheckRector::TARGET_PHP_VERSION => 70000,
]]);
};

View File

@ -6,6 +6,11 @@ namespace Rector\Set\ValueObject;
final class DowngradeSetList
{
/**
* @var string
*/
public const PHP_70 = __DIR__ . '/../../../../config/set/downgrade-php70.php';
/**
* @var string
*/

View File

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace Rector\DowngradePhp71\Contract\Rector;
namespace Rector\DowngradePhp70\Contract\Rector;
use PhpParser\Node\FunctionLike;
use PhpParser\Node\Param;

View File

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace Rector\DowngradePhp71\Contract\Rector;
namespace Rector\DowngradePhp70\Contract\Rector;
use PhpParser\Node\FunctionLike;

View File

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace Rector\DowngradePhp71\Rector\FunctionLike;
namespace Rector\DowngradePhp70\Rector\FunctionLike;
use PhpParser\Node;
use PhpParser\Node\FunctionLike;
@ -15,7 +15,7 @@ use PHPStan\Type\ObjectType;
use PHPStan\Type\UnionType;
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo;
use Rector\Core\Rector\AbstractRector;
use Rector\DowngradePhp71\Contract\Rector\DowngradeParamDeclarationRectorInterface;
use Rector\DowngradePhp70\Contract\Rector\DowngradeParamDeclarationRectorInterface;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Traversable;

View File

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace Rector\DowngradePhp71\Rector\FunctionLike;
namespace Rector\DowngradePhp70\Rector\FunctionLike;
use PhpParser\Node;
use PhpParser\Node\FunctionLike;
@ -14,7 +14,7 @@ use PHPStan\Type\ObjectType;
use PHPStan\Type\UnionType;
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo;
use Rector\Core\Rector\AbstractRector;
use Rector\DowngradePhp71\Contract\Rector\DowngradeReturnDeclarationRectorInterface;
use Rector\DowngradePhp70\Contract\Rector\DowngradeReturnDeclarationRectorInterface;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Traversable;

View File

@ -0,0 +1,65 @@
<?php
declare(strict_types=1);
namespace Rector\DowngradePhp70\Rector\FunctionLike;
use PhpParser\Node\FunctionLike;
use PhpParser\Node\Param;
use PHPStan\Type\ArrayType;
use PHPStan\Type\CallableType;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
* @see \Rector\DowngradePhp70\Tests\Rector\FunctionLike\DowngradeTypeParamDeclarationRector\DowngradeTypeParamDeclarationRectorTest
*/
final class DowngradeTypeParamDeclarationRector extends AbstractDowngradeParamDeclarationRector
{
public function getRuleDefinition(): RuleDefinition
{
return new RuleDefinition(
'Remove the type params, add @param tags instead',
[
new CodeSample(
<<<'CODE_SAMPLE'
class SomeClass
{
public function run(string $input)
{
// do something
}
}
CODE_SAMPLE
,
<<<'CODE_SAMPLE'
class SomeClass
{
/**
* @param string $input
*/
public function run($input)
{
// do something
}
}
CODE_SAMPLE
),
]
);
}
/**
* Only accepted types before PHP 7.0 are `array` and `callable`
*/
public function shouldRemoveParamDeclaration(Param $param, FunctionLike $functionLike): bool
{
if ($param->type === null) {
return false;
}
$type = $this->staticTypeMapper->mapPhpParserNodePHPStanType($param->type);
return ! is_a($type, ArrayType::class, true) && ! is_a($type, CallableType::class, true);
}
}

View File

@ -0,0 +1,59 @@
<?php
declare(strict_types=1);
namespace Rector\DowngradePhp70\Rector\FunctionLike;
use PhpParser\Node\FunctionLike;
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Function_;
use Rector\DowngradePhp70\Rector\FunctionLike\AbstractDowngradeReturnDeclarationRector;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
/**
* @see \Rector\DowngradePhp70\Tests\Rector\FunctionLike\DowngradeTypeReturnDeclarationRector\DowngradeTypeReturnDeclarationRectorTest
*/
final class DowngradeTypeReturnDeclarationRector extends AbstractDowngradeReturnDeclarationRector
{
public function getRuleDefinition(): RuleDefinition
{
return new RuleDefinition(
'Remove returning types, add a @return tag instead',
[
new CodeSample(
<<<'CODE_SAMPLE'
class SomeClass
{
public function getResponse(): string
{
return 'Hello world';
}
}
CODE_SAMPLE
,
<<<'CODE_SAMPLE'
class SomeClass
{
/**
* @return string
*/
public function getResponse()
{
return 'Hello world';
}
}
CODE_SAMPLE
),
]
);
}
/**
* @param ClassMethod|Function_ $functionLike
*/
public function shouldRemoveReturnDeclaration(FunctionLike $functionLike): bool
{
return true;
}
}

View File

@ -0,0 +1,37 @@
<?php
declare(strict_types=1);
namespace Rector\DowngradePhp70\Tests\Rector\FunctionLike\DowngradeTypeParamDeclarationRector;
use Iterator;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\DowngradePhp70\Rector\FunctionLike\DowngradeTypeParamDeclarationRector;
use Rector\Testing\PHPUnit\AbstractRectorTestCase;
use Symplify\SmartFileSystem\SmartFileInfo;
final class DowngradeTypeParamDeclarationRectorTest extends AbstractRectorTestCase
{
/**
* @dataProvider provideData()
*/
public function test(SmartFileInfo $fileInfo): void
{
$this->doTestFileInfo($fileInfo);
}
public function provideData(): Iterator
{
return $this->yieldFilesFromDirectory(__DIR__ . '/Fixture');
}
protected function getRectorClass(): string
{
return DowngradeTypeParamDeclarationRector::class;
}
protected function getPhpVersion(): int
{
return PhpVersionFeature::NULLABLE_TYPE - 1;
}
}

View File

@ -0,0 +1,12 @@
<?php
namespace Rector\DowngradePhp70\Tests\Rector\FunctionLike\DowngradeTypeParamDeclarationRector\Fixture;
class ArrayFunctionParam
{
public function run(array $value)
{
}
}
?>

View File

@ -0,0 +1,12 @@
<?php
namespace Rector\DowngradePhp70\Tests\Rector\FunctionLike\DowngradeTypeParamDeclarationRector\Fixture;
class CallableFunctionParam
{
public function run(callable $value)
{
}
}
?>

View File

@ -0,0 +1,28 @@
<?php
namespace Rector\DowngradePhp70\Tests\Rector\FunctionLike\DowngradeTypeParamDeclarationRector\Fixture;
class FunctionParam
{
public function run(string $value)
{
}
}
?>
-----
<?php
namespace Rector\DowngradePhp70\Tests\Rector\FunctionLike\DowngradeTypeParamDeclarationRector\Fixture;
class FunctionParam
{
/**
* @param string $value
*/
public function run($value)
{
}
}
?>

View File

@ -0,0 +1,37 @@
<?php
declare(strict_types=1);
namespace Rector\DowngradePhp70\Tests\Rector\FunctionLike\DowngradeTypeReturnDeclarationRector;
use Iterator;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\DowngradePhp70\Rector\FunctionLike\DowngradeTypeReturnDeclarationRector;
use Rector\Testing\PHPUnit\AbstractRectorTestCase;
use Symplify\SmartFileSystem\SmartFileInfo;
final class DowngradeTypeReturnDeclarationRectorTest extends AbstractRectorTestCase
{
/**
* @dataProvider provideData()
*/
public function test(SmartFileInfo $fileInfo): void
{
$this->doTestFileInfo($fileInfo);
}
public function provideData(): Iterator
{
return $this->yieldFilesFromDirectory(__DIR__ . '/Fixture');
}
protected function getRectorClass(): string
{
return DowngradeTypeReturnDeclarationRector::class;
}
protected function getPhpVersion(): int
{
return PhpVersionFeature::NULLABLE_TYPE - 1;
}
}

View File

@ -0,0 +1,30 @@
<?php
namespace Rector\DowngradePhp70\Tests\Rector\FunctionLike\DowngradeTypeReturnDeclarationRector\Fixture;
class ReturnArrayTypeOnClassMethod
{
public function run(): array
{
return [1, 2, 3];
}
}
?>
-----
<?php
namespace Rector\DowngradePhp70\Tests\Rector\FunctionLike\DowngradeTypeReturnDeclarationRector\Fixture;
class ReturnArrayTypeOnClassMethod
{
/**
* @return mixed[]
*/
public function run()
{
return [1, 2, 3];
}
}
?>

View File

@ -0,0 +1,30 @@
<?php
namespace Rector\DowngradePhp70\Tests\Rector\FunctionLike\DowngradeTypeReturnDeclarationRector\Fixture;
class ReturnTypeOnClassMethod
{
public function run(): string
{
return 'Hello world';
}
}
?>
-----
<?php
namespace Rector\DowngradePhp70\Tests\Rector\FunctionLike\DowngradeTypeReturnDeclarationRector\Fixture;
class ReturnTypeOnClassMethod
{
/**
* @return string
*/
public function run()
{
return 'Hello world';
}
}
?>

View File

@ -7,6 +7,7 @@ namespace Rector\DowngradePhp71\Rector\FunctionLike;
use PhpParser\Node\FunctionLike;
use PhpParser\Node\Identifier;
use PhpParser\Node\Param;
use Rector\DowngradePhp70\Rector\FunctionLike\AbstractDowngradeParamDeclarationRector;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;

View File

@ -7,6 +7,7 @@ namespace Rector\DowngradePhp71\Rector\FunctionLike;
use PhpParser\Node\FunctionLike;
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Function_;
use Rector\DowngradePhp70\Rector\FunctionLike\AbstractDowngradeReturnDeclarationRector;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;

View File

@ -7,6 +7,7 @@ namespace Rector\DowngradePhp71\Rector\FunctionLike;
use PhpParser\Node\FunctionLike;
use PhpParser\Node\NullableType;
use PhpParser\Node\Param;
use Rector\DowngradePhp70\Rector\FunctionLike\AbstractDowngradeParamDeclarationRector;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;

View File

@ -8,6 +8,7 @@ use PhpParser\Node\FunctionLike;
use PhpParser\Node\NullableType;
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Function_;
use Rector\DowngradePhp70\Rector\FunctionLike\AbstractDowngradeReturnDeclarationRector;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;

View File

@ -6,7 +6,7 @@ namespace Rector\DowngradePhp72\Rector\FunctionLike;
use PhpParser\Node\FunctionLike;
use PhpParser\Node\Param;
use Rector\DowngradePhp71\Rector\FunctionLike\AbstractDowngradeParamDeclarationRector;
use Rector\DowngradePhp70\Rector\FunctionLike\AbstractDowngradeParamDeclarationRector;
use Rector\DowngradePhp72\Contract\Rector\DowngradeTypeRectorInterface;
abstract class AbstractDowngradeParamTypeDeclarationRector extends AbstractDowngradeParamDeclarationRector implements DowngradeTypeRectorInterface

View File

@ -7,7 +7,7 @@ namespace Rector\DowngradePhp72\Rector\FunctionLike;
use PhpParser\Node\FunctionLike;
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Function_;
use Rector\DowngradePhp71\Rector\FunctionLike\AbstractDowngradeReturnDeclarationRector;
use Rector\DowngradePhp70\Rector\FunctionLike\AbstractDowngradeReturnDeclarationRector;
use Rector\DowngradePhp72\Contract\Rector\DowngradeTypeRectorInterface;
abstract class AbstractDowngradeReturnTypeDeclarationRector extends AbstractDowngradeReturnDeclarationRector implements DowngradeTypeRectorInterface

View File

@ -11,7 +11,7 @@ use PhpParser\Node\Param;
use PhpParser\Node\UnionType;
use PHPStan\Analyser\Scope;
use PHPStan\Reflection\ClassReflection;
use Rector\DowngradePhp71\Rector\FunctionLike\AbstractDowngradeParamDeclarationRector;
use Rector\DowngradePhp70\Rector\FunctionLike\AbstractDowngradeParamDeclarationRector;
use Rector\NodeTypeResolver\Node\AttributeKey;
use ReflectionMethod;
use ReflectionNamedType;

View File

@ -7,7 +7,7 @@ namespace Rector\DowngradePhp80\Rector\FunctionLike;
use PhpParser\Node\FunctionLike;
use PhpParser\Node\Param;
use PhpParser\Node\UnionType;
use Rector\DowngradePhp71\Rector\FunctionLike\AbstractDowngradeParamDeclarationRector;
use Rector\DowngradePhp70\Rector\FunctionLike\AbstractDowngradeParamDeclarationRector;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;

View File

@ -8,7 +8,7 @@ use PhpParser\Node\FunctionLike;
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Function_;
use PhpParser\Node\UnionType;
use Rector\DowngradePhp71\Rector\FunctionLike\AbstractDowngradeReturnDeclarationRector;
use Rector\DowngradePhp70\Rector\FunctionLike\AbstractDowngradeReturnDeclarationRector;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;