Skip to content

Commit f36d7f5

Browse files
committed
wip
1 parent 3d94ce2 commit f36d7f5

File tree

8 files changed

+114
-0
lines changed

8 files changed

+114
-0
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
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_30,
12+
]);
13+
};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
use Rector\Config\RectorConfig;
4+
use Tempest\Upgrade\Tempest3\WriteableRouteRector;
5+
6+
return static function (RectorConfig $config): void {
7+
$config->importNames();
8+
$config->importShortClasses();
9+
10+
$config->rule(WriteableRouteRector::class);
11+
};

packages/upgrade/src/Set/TempestLevelSetList.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@
77
final class TempestLevelSetList
88
{
99
public const string UP_TO_TEMPEST_20 = __DIR__ . '/../../config/sets/level/up-to-tempest-20.php';
10+
public const string UP_TO_TEMPEST_30 = __DIR__ . '/../../config/sets/level/up-to-tempest-30.php';
1011
}

packages/upgrade/src/Set/TempestSetList.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@
77
final class TempestSetList
88
{
99
public const string TEMPEST_20 = __DIR__ . '/../../config/sets/tempest20.php';
10+
public const string TEMPEST_30 = __DIR__ . '/../../config/sets/tempest30.php';
1011
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
namespace Tempest\Upgrade\Tempest3;
4+
5+
use PhpParser\Modifiers;
6+
use PhpParser\Node;
7+
use Rector\Rector\AbstractRector;
8+
use Tempest\Router\Route;
9+
10+
final class WriteableRouteRector extends AbstractRector
11+
{
12+
public function getNodeTypes(): array
13+
{
14+
return [
15+
Node\Stmt\Class_::class,
16+
];
17+
}
18+
19+
public function refactor(Node $node): void
20+
{
21+
if (! $node instanceof Node\Stmt\Class_) {
22+
return;
23+
}
24+
25+
// Check whether this class implements Tempest\Router\Route
26+
$implements = $node->implements;
27+
28+
$implementsRoute = array_find_key(
29+
$implements,
30+
static fn (Node\Name $name) => $name->toString() === Route::class,
31+
);
32+
33+
if ($implementsRoute === null) {
34+
return;
35+
}
36+
37+
if (! $node->isReadonly()) {
38+
return;
39+
}
40+
41+
$node->flags = $node->flags & ~Modifiers::READONLY;
42+
}
43+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
namespace Tempest\Upgrade\Tests\Tempest30\Fixtures;
4+
5+
use Tempest\Http\Method;
6+
use Tempest\Router\Route;
7+
8+
final readonly class CustomRoute implements Route
9+
{
10+
public function __construct(
11+
public Method $method,
12+
public string $uri,
13+
public array $middleware = [],
14+
public array $without = [],
15+
) {}
16+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace Tempest\Upgrade\Tests\Tempest30;
4+
5+
use PHPUnit\Framework\TestCase;
6+
use Tempest\Upgrade\Tests\RectorTester;
7+
8+
final class Tempest30RectorTest extends TestCase
9+
{
10+
private RectorTester $rector {
11+
get => new RectorTester(__DIR__ . '/tempest30_rector.php');
12+
}
13+
14+
public function test_writeable_routes(): void
15+
{
16+
$this->rector
17+
->runFixture(__DIR__ . '/Fixtures/CustomRoute.input.php')
18+
->assertContains('final class CustomRoute implements Route');
19+
}
20+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?php
2+
3+
use Rector\Config\RectorConfig;
4+
use Tempest\Upgrade\Set\TempestSetList;
5+
6+
return RectorConfig::configure()
7+
->withSets([
8+
TempestSetList::TEMPEST_30,
9+
]);

0 commit comments

Comments
 (0)