Skip to content

Commit dea1359

Browse files
authored
Adds a set to refactor service names to interfaces/classes (#192)
1 parent 68db7e9 commit dea1359

File tree

4 files changed

+180
-0
lines changed

4 files changed

+180
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use PhpParser\Node\Expr\ClassConstFetch;
6+
use PhpParser\Node\Name\FullyQualified;
7+
use Rector\Config\RectorConfig;
8+
use RectorLaravel\Rector\MethodCall\ReplaceServiceContainerCallArgRector;
9+
use RectorLaravel\ValueObject\ReplaceServiceContainerCallArg;
10+
11+
return static function (RectorConfig $rectorConfig): void {
12+
$rectorConfig->import(__DIR__ . '/../config.php');
13+
14+
$servicesMap = [
15+
'events' => 'Illuminate\Contracts\Events\Dispatcher',
16+
'log' => 'Psr\Log\LoggerInterface',
17+
'router' => 'Illuminate\Routing\Router',
18+
'url' => 'Illuminate\Contracts\Routing\UrlGenerator',
19+
'redirect' => 'Illuminate\Routing\Redirector',
20+
'auth' => 'Illuminate\Contracts\Auth\Factory',
21+
'auth.driver' => 'Illuminate\Auth\SessionGuard',
22+
'cookie' => 'Illuminate\Cookie\CookieJar',
23+
'db.factory' => 'Illuminate\Database\Connectors\ConnectionFactory',
24+
'db' => 'Illuminate\Database\ConnectionResolverInterface',
25+
'db.connection' => 'Illuminate\Database\ConnectionInterface',
26+
'db.schema' => 'Illuminate\Database\Schema\SQLiteBuilder',
27+
'db.transactions' => 'Illuminate\Database\DatabaseTransactionsManager',
28+
'encrypter' => 'Illuminate\Encryption\Encrypter',
29+
'files' => 'Illuminate\Filesystem\Filesystem',
30+
'filesystem' => 'Illuminate\Contracts\Filesystem\Factory',
31+
'session' => 'Illuminate\Session\SessionManager',
32+
'session.store' => 'Illuminate\Contracts\Session\Session',
33+
'view' => 'Illuminate\Contracts\View\Factory',
34+
'view.finder' => 'Illuminate\View\ViewFinderInterface',
35+
'blade.compiler' => 'Illuminate\View\Compilers\CompilerInterface',
36+
'view.engine.resolver' => 'Illuminate\View\Engines\EngineResolver',
37+
'flare.logger' => 'Monolog\Logger',
38+
'cache' => 'Illuminate\Contracts\Cache\Factory',
39+
'cache.store' => 'Illuminate\Cache\Repository',
40+
'memcached.connector' => 'Illuminate\Cache\MemcachedConnector',
41+
'queue' => 'Illuminate\Queue\QueueManager',
42+
'queue.connection' => 'Illuminate\Contracts\Queue\Queue',
43+
'queue.worker' => 'Illuminate\Queue\Worker',
44+
'queue.listener' => 'Illuminate\Queue\Listener',
45+
'queue.failer' => 'Illuminate\Queue\Failed\DatabaseUuidFailedJobProvider',
46+
'migration.repository' => 'Illuminate\Database\Migrations\MigrationRepositoryInterface',
47+
'migrator' => 'Illuminate\Database\Migrations\Migrator',
48+
'migration.creator' => 'Illuminate\Database\Migrations\MigrationCreator',
49+
'composer' => 'Illuminate\Support\Composer',
50+
'hash' => 'Illuminate\Contracts\Hashing\Hasher',
51+
'hash.driver' => 'Illuminate\Contracts\Hashing\Hasher',
52+
'mail.manager' => 'Illuminate\Contracts\Mail\Factory',
53+
'mailer' => 'Illuminate\Mail\Mailer',
54+
'auth.password' => 'Illuminate\Contracts\Auth\PasswordBrokerFactory',
55+
'auth.password.broker' => 'Illuminate\Contracts\Auth\PasswordBroker',
56+
'pipeline' => 'Illuminate\Contracts\Pipeline\Pipeline',
57+
'redis' => 'Illuminate\Contracts\Redis\Factory',
58+
'translation.loader' => 'Illuminate\Contracts\Translation\Loader',
59+
'translator' => 'Illuminate\Contracts\Translation\Translator',
60+
'validation.presence' => 'Illuminate\Validation\DatabasePresenceVerifier',
61+
'validator' => 'Illuminate\Contracts\Validation\Factory',
62+
'command.tinker' => 'Laravel\Tinker\Console\TinkerCommand',
63+
];
64+
65+
$ruleConfig = array_map(
66+
fn (string $service, string $interface) => new ReplaceServiceContainerCallArg(
67+
$service,
68+
new ClassConstFetch(
69+
new FullyQualified($interface),
70+
'class'
71+
)
72+
),
73+
array_keys($servicesMap),
74+
$servicesMap,
75+
);
76+
77+
$rectorConfig->ruleWithConfiguration(
78+
ReplaceServiceContainerCallArgRector::class,
79+
$ruleConfig
80+
);
81+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace RectorLaravel\Tests\Sets\ContainerStringToFullyQualifiedName;
6+
7+
use Iterator;
8+
use PHPUnit\Framework\Attributes\DataProvider;
9+
use Rector\Testing\PHPUnit\AbstractRectorTestCase;
10+
11+
final class ContainerStringToFullyQualifiedNameTest extends AbstractRectorTestCase
12+
{
13+
public static function provideData(): Iterator
14+
{
15+
return self::yieldFilesFromDirectory(__DIR__ . '/Fixture');
16+
}
17+
18+
/**
19+
* @test
20+
*/
21+
#[DataProvider('provideData')]
22+
public function test(string $filePath): void
23+
{
24+
$this->doTestFile($filePath);
25+
}
26+
27+
public function provideConfigFilePath(): string
28+
{
29+
return __DIR__ . '/config/configured_rule.php';
30+
}
31+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
3+
namespace RectorLaravel\Tests\Sets\ContainerStringToFullyQualifiedName;
4+
5+
app('events');
6+
app('log');
7+
app('router');
8+
app('url');
9+
app('view');
10+
app('validator');
11+
app('session');
12+
app('db');
13+
app('auth');
14+
app('auth.driver');
15+
app('cookie');
16+
app('queue');
17+
app('queue.connection');
18+
app('queue.failer');
19+
app('queue.listener');
20+
app('queue.worker');
21+
app('cache');
22+
app('cache.store');
23+
app('filesystem');
24+
app('encrypter');
25+
app('files');
26+
app('hash');
27+
app('mailer');
28+
29+
?>
30+
-----
31+
<?php
32+
33+
namespace RectorLaravel\Tests\Sets\ContainerStringToFullyQualifiedName;
34+
35+
app(\Illuminate\Contracts\Events\Dispatcher::class);
36+
app(\Psr\Log\LoggerInterface::class);
37+
app(\Illuminate\Routing\Router::class);
38+
app(\Illuminate\Contracts\Routing\UrlGenerator::class);
39+
app(\Illuminate\Contracts\View\Factory::class);
40+
app(\Illuminate\Contracts\Validation\Factory::class);
41+
app(\Illuminate\Session\SessionManager::class);
42+
app(\Illuminate\Database\ConnectionResolverInterface::class);
43+
app(\Illuminate\Contracts\Auth\Factory::class);
44+
app(\Illuminate\Auth\SessionGuard::class);
45+
app(\Illuminate\Cookie\CookieJar::class);
46+
app(\Illuminate\Queue\QueueManager::class);
47+
app(\Illuminate\Contracts\Queue\Queue::class);
48+
app(\Illuminate\Queue\Failed\DatabaseUuidFailedJobProvider::class);
49+
app(\Illuminate\Queue\Listener::class);
50+
app(\Illuminate\Queue\Worker::class);
51+
app(\Illuminate\Contracts\Cache\Factory::class);
52+
app(\Illuminate\Cache\Repository::class);
53+
app(\Illuminate\Contracts\Filesystem\Factory::class);
54+
app(\Illuminate\Encryption\Encrypter::class);
55+
app(\Illuminate\Filesystem\Filesystem::class);
56+
app(\Illuminate\Contracts\Hashing\Hasher::class);
57+
app(\Illuminate\Mail\Mailer::class);
58+
59+
?>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use Rector\Config\RectorConfig;
6+
7+
return static function (RectorConfig $rectorConfig): void {
8+
$rectorConfig->import(__DIR__ . '/../../../../config/sets/laravel-container-string-to-fully-qualified-name.php');
9+
};

0 commit comments

Comments
 (0)