File tree Expand file tree Collapse file tree 11 files changed +171
-0
lines changed
Expand file tree Collapse file tree 11 files changed +171
-0
lines changed Original file line number Diff line number Diff line change 1+ <?php
2+
3+ declare (strict_types=1 );
4+
5+ use Rector \Config \RectorConfig ;
6+ use Tempest \Upgrade \Set \TempestSetList ;
7+
8+ return static function (RectorConfig $ config ): void {
9+ $ config ->sets ([
10+ TempestSetList::TEMPEST_20 ,
11+ TempestSetList::TEMPEST_28 ,
12+ TempestSetList::TEMPEST_30 ,
13+ ]);
14+ };
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ use Rector \Config \RectorConfig ;
4+ use Tempest \Upgrade \Tempest3 \UpdateMapperFunctionImportsRector ;
5+
6+ return static function (RectorConfig $ config ): void {
7+ $ config ->importNames ();
8+ $ config ->importShortClasses ();
9+
10+ $ config ->rule (UpdateMapperFunctionImportsRector::class);
11+ };
Original file line number Diff line number Diff line change @@ -8,4 +8,5 @@ final class TempestLevelSetList
88{
99 public const string UP_TO_TEMPEST_20 = __DIR__ . '/../../config/sets/level/up-to-tempest-20.php ' ;
1010 public const string UP_TO_TEMPEST_28 = __DIR__ . '/../../config/sets/level/up-to-tempest-28.php ' ;
11+ public const string UP_TO_TEMPEST_30 = __DIR__ . '/../../config/sets/level/up-to-tempest-30.php ' ;
1112}
Original file line number Diff line number Diff line change @@ -8,4 +8,5 @@ final class TempestSetList
88{
99 public const string TEMPEST_20 = __DIR__ . '/../../config/sets/tempest20.php ' ;
1010 public const string TEMPEST_28 = __DIR__ . '/../../config/sets/tempest28.php ' ;
11+ public const string TEMPEST_30 = __DIR__ . '/../../config/sets/tempest30.php ' ;
1112}
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace Tempest \Upgrade \Tempest3 ;
4+
5+ use PhpParser \Node ;
6+ use Rector \Rector \AbstractRector ;
7+
8+ final class UpdateMapperFunctionImportsRector extends AbstractRector
9+ {
10+ public function getNodeTypes (): array
11+ {
12+ return [
13+ Node \UseItem::class,
14+ Node \Expr \FuncCall::class,
15+ ];
16+ }
17+
18+ public function refactor (Node $ node ): ?int
19+ {
20+ if ($ node instanceof Node \UseItem) {
21+ if ($ node ->name ->toString () === 'Tempest\map ' ) {
22+ $ node ->name = new Node \Name ('Tempest\Mapper\map ' );
23+ }
24+
25+ if ($ node ->name ->toString () === 'Tempest\make ' ) {
26+ $ node ->name = new Node \Name ('Tempest\Mapper\make ' );
27+ }
28+
29+ return null ;
30+ }
31+
32+ if ($ node instanceof Node \Expr \FuncCall && $ node ->name instanceof Node \Name) {
33+ $ functionName = $ node ->name ->toString ();
34+
35+ if ($ functionName === 'Tempest\map ' ) {
36+ $ node ->name = new Node \Name \FullyQualified ('Tempest\Mapper\map ' );
37+
38+ return null ;
39+ }
40+
41+ if ($ functionName === 'Tempest\make ' ) {
42+ $ node ->name = new Node \Name \FullyQualified ('Tempest\Mapper\make ' );
43+
44+ return null ;
45+ }
46+ }
47+
48+ return null ;
49+ }
50+ }
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ final class FullyQualifiedMakeCall
4+ {
5+ public function __invoke ()
6+ {
7+ return \Tempest \make (Author::class)->from (['name ' => 'Jon Doe ' ]);
8+ }
9+ }
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ final class FullyQualifiedMapCall
4+ {
5+ public function __invoke (array $ data )
6+ {
7+ return \Tempest \map ($ data )->to (Author::class);
8+ }
9+ }
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ use function Tempest \make ;
4+
5+ final class MakeNamespaceChange
6+ {
7+ public function __invoke ()
8+ {
9+ return make (Author::class)->from (['name ' => 'Jon Doe ' ]);
10+ }
11+ }
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ use function Tempest \map ;
4+
5+ final class MapNamespaceChange
6+ {
7+ public function __invoke (array $ data )
8+ {
9+ return map ($ data )->to (Author::class);
10+ }
11+ }
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace Tempest \Upgrade \Tests \Tempest3 ;
4+
5+ use PHPUnit \Framework \TestCase ;
6+ use Tempest \Upgrade \Tests \RectorTester ;
7+
8+ final class Tempest3RectorTest extends TestCase
9+ {
10+ private RectorTester $ rector {
11+ get => new RectorTester (__DIR__ . '/tempest30_rector.php ' );
12+ }
13+
14+ public function test_map_namespace_change (): void
15+ {
16+ $ this ->rector
17+ ->runFixture (__DIR__ . '/Fixtures/MapNamespaceChange.input.php ' )
18+ ->assertContains ('use function Tempest\Mapper\map; ' )
19+ ->assertNotContains ('use function Tempest\map; ' );
20+ }
21+
22+ public function test_make_namespace_change (): void
23+ {
24+ $ this ->rector
25+ ->runFixture (__DIR__ . '/Fixtures/MakeNamespaceChange.input.php ' )
26+ ->assertContains ('use function Tempest\Mapper\make; ' )
27+ ->assertNotContains ('use function Tempest\make; ' );
28+ }
29+
30+ public function test_fully_qualified_map_call (): void
31+ {
32+ $ this ->rector
33+ ->runFixture (__DIR__ . '/Fixtures/FullyQualifiedMapCall.input.php ' )
34+ ->assertContains ('use Tempest\Mapper\map; ' )
35+ ->assertContains ('return map($data)->to(Author::class); ' );
36+ }
37+
38+ public function test_fully_qualified_make_call (): void
39+ {
40+ $ this ->rector
41+ ->runFixture (__DIR__ . '/Fixtures/FullyQualifiedMakeCall.input.php ' )
42+ ->assertContains ('use Tempest\Mapper\make; ' )
43+ ->assertContains ('return make(Author::class) ' );
44+ }
45+ }
You can’t perform that action at this time.
0 commit comments