Skip to content

Commit

Permalink
[Downgrade PHP 8.1] Add DowngradeNewInInitializerRector (#1275)
Browse files Browse the repository at this point in the history
  • Loading branch information
villfa committed Nov 19, 2021
1 parent 511d649 commit fa20738
Show file tree
Hide file tree
Showing 17 changed files with 543 additions and 0 deletions.
2 changes: 2 additions & 0 deletions config/set/downgrade-php81.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use Rector\DowngradePhp81\Rector\ClassConst\DowngradeFinalizePublicClassConstantRector;
use Rector\DowngradePhp81\Rector\FuncCall\DowngradeFirstClassCallableSyntaxRector;
use Rector\DowngradePhp81\Rector\FunctionLike\DowngradeNeverTypeDeclarationRector;
use Rector\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector;
use Rector\DowngradePhp81\Rector\Instanceof_\DowngradePhp81ResourceReturnToObjectRector;
use Rector\DowngradePhp81\Rector\Property\DowngradeReadonlyPropertyRector;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
Expand All @@ -19,6 +20,7 @@
$services->set(DowngradeFinalizePublicClassConstantRector::class);
$services->set(DowngradeFirstClassCallableSyntaxRector::class);
$services->set(DowngradeNeverTypeDeclarationRector::class);
$services->set(DowngradeNewInInitializerRector::class);
$services->set(DowngradePhp81ResourceReturnToObjectRector::class);
$services->set(DowngradeReadonlyPropertyRector::class);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php

declare(strict_types=1);

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector;

use Iterator;
use Rector\Testing\PHPUnit\AbstractRectorTestCase;
use Symplify\SmartFileSystem\SmartFileInfo;

final class DowngradeNewInInitializerRectorTest extends AbstractRectorTestCase
{
/**
* @dataProvider provideData()
*/
public function test(SmartFileInfo $fileInfo): void
{
$this->doTestFileInfo($fileInfo);
}

/**
* @return Iterator<SmartFileInfo>
*/
public function provideData(): Iterator
{
return $this->yieldFilesFromDirectory(__DIR__ . '/Fixture');
}

public function provideConfigFilePath(): string
{
return __DIR__ . '/config/configured_rule.php';
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

$func = fn (stdClass $obj = new stdClass) => $obj;

?>
-----
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

$func = function (stdClass $obj = null) {
$obj ??= new stdClass;
return $obj;
};

?>
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

$func = function(stdClass $obj = new stdClass, $arg = null) {
var_dump($arg);
};

?>
-----
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

$func = function(stdClass $obj = null, $arg = null) {
$obj ??= new stdClass;
var_dump($arg);
};

?>
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

function someFunc($arg, stdClass $obj = new stdClass)
{
var_dump($arg);
}

?>
-----
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

function someFunc($arg, stdClass $obj = null)
{
$obj ??= new stdClass;
var_dump($arg);
}

?>
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

class SomeClass
{
public function foo(stdClass $obj = new stdClass)
{
}
}

?>
-----
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

class SomeClass
{
public function foo(stdClass $obj = null)
{
$obj ??= new stdClass;
}
}

?>
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

class SomeClass
{
public function __construct(public stdClass $obj = new stdClass)
{
}
}

?>
-----
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

class SomeClass
{
public function __construct(public ?stdClass $obj = null)
{
$this->obj = $obj ?? new stdClass;
}
}

?>
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

class SomeClass
{
public function __construct(public stdClass $o1 = new stdClass, public stdClass $o2 = new stdClass)
{
}
}

?>
-----
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

class SomeClass
{
public function __construct(public ?stdClass $o1 = null, public ?stdClass $o2 = null)
{
$this->o1 = $o1 ?? new stdClass;
$this->o2 = $o2 ?? new stdClass;
}
}

?>
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

class SomeClass
{
public function __construct(public ?stdClass $obj = new stdClass)
{
}
}

?>
-----
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

class SomeClass
{
public function __construct(public ?stdClass $obj = null)
{
$this->obj = $obj ?? new stdClass;
}
}

?>
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

class SomeClass
{
public function __construct(public Foo|stdClass|null $obj = new stdClass)
{
}
}

?>
-----
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

class SomeClass
{
public function __construct(public Foo|stdClass|null $obj = null)
{
$this->obj = $obj ?? new stdClass;
}
}

?>
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

class SomeClass
{
public function __construct(public Foo|stdClass $obj = new stdClass)
{
}
}

?>
-----
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

class SomeClass
{
public function __construct(public Foo|stdClass|null $obj = null)
{
$this->obj = $obj ?? new stdClass;
}
}

?>
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

class SomeClass
{
public function __construct(public stdClass $obj = new stdClass)
{
$obj->foo = 'bar';
}
}

?>
-----
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

class SomeClass
{
public function __construct(public ?stdClass $obj = null)
{
$this->obj = $obj ?? new stdClass;
$obj->foo = 'bar';
}
}

?>
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

class SomeClass
{
public stdClass $obj;

public function __construct(stdClass $obj = new stdClass)
{
$this->obj = $obj;
}
}

?>
-----
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

class SomeClass
{
public stdClass $obj;

public function __construct(stdClass $obj = null)
{
$obj ??= new stdClass;
$this->obj = $obj;
}
}

?>
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

class SomeClass
{
public static function foo(stdClass $obj = new stdClass)
{
}
}

?>
-----
<?php

namespace Rector\Tests\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector\Fixture;

class SomeClass
{
public static function foo(stdClass $obj = null)
{
$obj ??= new stdClass;
}
}

?>
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php

declare(strict_types=1);

use Rector\DowngradePhp81\Rector\FunctionLike\DowngradeNewInInitializerRector;

use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;

return static function (ContainerConfigurator $containerConfigurator): void {
$services = $containerConfigurator->services();
$services->set(DowngradeNewInInitializerRector::class);
};
Loading

0 comments on commit fa20738

Please sign in to comment.