rector/config/set/laravel-static-to-injection.php
2020-11-27 17:54:14 +01:00

227 lines
12 KiB
PHP

<?php
declare(strict_types=1);
use Rector\Generic\Rector\FuncCall\FuncCallToNewRector;
use Rector\Laravel\Rector\FuncCall\HelperFuncCallToFacadeClassRector;
use Rector\Laravel\Rector\StaticCall\RequestStaticValidateToInjectRector;
use Rector\Renaming\Rector\Name\RenameClassRector;
use Rector\Transform\Rector\FuncCall\ArgumentFuncCallToMethodCallRector;
use Rector\Transform\Rector\StaticCall\StaticCallToMethodCallRector;
use Rector\Transform\ValueObject\ArgumentFuncCallToMethodCall;
use Rector\Transform\ValueObject\ArrayFuncCallToMethodCall;
use Rector\Transform\ValueObject\StaticCallToMethodCall;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symplify\SymfonyPhpConfig\ValueObjectInliner;
/**
* @see https://www.freecodecamp.org/news/moving-away-from-magic-or-why-i-dont-want-to-use-laravel-anymore-2ce098c979bd/
* @see https://tomasvotruba.com/blog/2019/03/04/how-to-turn-laravel-from-static-to-dependency-injection-in-one-day/
* @see https://laravel.com/docs/5.7/facades#facades-vs-dependency-injection
*/
return static function (ContainerConfigurator $containerConfigurator): void {
$containerConfigurator->import(__DIR__ . '/laravel-array-str-functions-to-static-call.php');
$services = $containerConfigurator->services();
$services->set(StaticCallToMethodCallRector::class)->call('configure', [[
StaticCallToMethodCallRector::STATIC_CALLS_TO_METHOD_CALLS => ValueObjectInliner::inline([
new StaticCallToMethodCall('Illuminate\Support\Facades\App', '*', 'Illuminate\Foundation\Application', '*'),
new StaticCallToMethodCall(
'Illuminate\Support\Facades\Artisan',
'*',
'Illuminate\Contracts\Console\Kernel',
'*'
),
new StaticCallToMethodCall('Illuminate\Support\Facades\Auth', '*', 'Illuminate\Auth\AuthManager', '*'),
new StaticCallToMethodCall(
'Illuminate\Support\Facades\Blade',
'*',
'Illuminate\View\Compilers\BladeCompiler',
'*'
),
new StaticCallToMethodCall(
'Illuminate\Support\Facades\Broadcast',
'*',
'Illuminate\Contracts\Broadcasting\Factory',
'*'
),
new StaticCallToMethodCall(
'Illuminate\Support\Facades\Bus',
'*',
'Illuminate\Contracts\Bus\Dispatcher',
'*'
),
new StaticCallToMethodCall('Illuminate\Support\Facades\Cache', '*', 'Illuminate\Cache\CacheManager', '*'),
new StaticCallToMethodCall('Illuminate\Support\Facades\Config', '*', 'Illuminate\Config\Repository', '*'),
new StaticCallToMethodCall('Illuminate\Support\Facades\Cookie', '*', 'Illuminate\Cookie\CookieJar', '*'),
new StaticCallToMethodCall('Illuminate\Support\Facades\Crypt', '*', 'Illuminate\Encryption\Encrypter', '*'),
new StaticCallToMethodCall(
'Illuminate\Support\Facades\DB',
'*',
'Illuminate\Database\DatabaseManager',
'*'
),
new StaticCallToMethodCall('Illuminate\Support\Facades\Event', '*', 'Illuminate\Events\Dispatcher', '*'),
new StaticCallToMethodCall('Illuminate\Support\Facades\File', '*', 'Illuminate\Filesystem\Filesystem', '*'),
new StaticCallToMethodCall(
'Illuminate\Support\Facades\Gate',
'*',
'Illuminate\Contracts\Auth\Access\Gate',
'*'
),
new StaticCallToMethodCall(
'Illuminate\Support\Facades\Hash',
'*',
'Illuminate\Contracts\Hashing\Hasher',
'*'
),
new StaticCallToMethodCall(
'Illuminate\Support\Facades\Lang',
'*',
'Illuminate\Translation\Translator',
'*'
),
new StaticCallToMethodCall('Illuminate\Support\Facades\Log', '*', 'Illuminate\Log\LogManager', '*'),
new StaticCallToMethodCall('Illuminate\Support\Facades\Mail', '*', 'Illuminate\Mail\Mailer', '*'),
new StaticCallToMethodCall(
'Illuminate\Support\Facades\Notification',
'*',
'Illuminate\Notifications\ChannelManager',
'*'
),
new StaticCallToMethodCall(
'Illuminate\Support\Facades\Password',
'*',
'Illuminate\Auth\Passwords\PasswordBrokerManager',
'*'
),
new StaticCallToMethodCall('Illuminate\Support\Facades\Queue', '*', 'Illuminate\Queue\QueueManager', '*'),
new StaticCallToMethodCall(
'Illuminate\Support\Facades\Redirect',
'*',
'Illuminate\Routing\Redirector',
'*'
),
new StaticCallToMethodCall('Illuminate\Support\Facades\Redis', '*', 'Illuminate\Redis\RedisManager', '*'),
new StaticCallToMethodCall('Illuminate\Support\Facades\Request', '*', 'Illuminate\Http\Request', '*'),
new StaticCallToMethodCall(
'Illuminate\Support\Facades\Response',
'*',
'Illuminate\Contracts\Routing\ResponseFactory',
'*'
),
new StaticCallToMethodCall('Illuminate\Support\Facades\Route', '*', 'Illuminate\Routing\Router', '*'),
new StaticCallToMethodCall(
'Illuminate\Support\Facades\Schema',
'*',
'Illuminate\Database\Schema\Builder',
'*'
),
new StaticCallToMethodCall(
'Illuminate\Support\Facades\Session',
'*',
'Illuminate\Session\SessionManager',
'*'
),
new StaticCallToMethodCall(
'Illuminate\Support\Facades\Storage',
'*',
'Illuminate\Filesystem\FilesystemManager',
'*'
),
new StaticCallToMethodCall('Illuminate\Support\Facades\URL', '*', 'Illuminate\Routing\UrlGenerator', '*'),
new StaticCallToMethodCall(
'Illuminate\Support\Facades\Validator',
'*',
'Illuminate\Validation\Factory',
'*'
),
new StaticCallToMethodCall('Illuminate\Support\Facades\View', '*', 'Illuminate\View\Factory', '*'),
]),
]]);
$services->set(RequestStaticValidateToInjectRector::class);
// @see https://github.com/laravel/framework/blob/78828bc779e410e03cc6465f002b834eadf160d2/src/Illuminate/Foundation/helpers.php#L959
// @see https://gist.github.com/barryvdh/bb6ffc5d11e0a75dba67
$services->set(ArgumentFuncCallToMethodCallRector::class)->call('configure', [[
ArgumentFuncCallToMethodCallRector::FUNCTIONS_TO_METHOD_CALLS => ValueObjectInliner::inline([
new ArgumentFuncCallToMethodCall('auth', 'Illuminate\Contracts\Auth\Guard'),
new ArgumentFuncCallToMethodCall('policy', 'Illuminate\Contracts\Auth\Access\Gate', 'getPolicyFor'),
new ArgumentFuncCallToMethodCall('cookie', 'Illuminate\Contracts\Cookie\Factory', 'make'),
// router
new ArgumentFuncCallToMethodCall('put', 'Illuminate\Routing\Router', 'put'),
new ArgumentFuncCallToMethodCall('get', 'Illuminate\Routing\Router', 'get'),
new ArgumentFuncCallToMethodCall('post', 'Illuminate\Routing\Router', 'post'),
new ArgumentFuncCallToMethodCall('patch', 'Illuminate\Routing\Router', 'patch'),
new ArgumentFuncCallToMethodCall('delete', 'Illuminate\Routing\Router', 'delete'),
new ArgumentFuncCallToMethodCall('resource', 'Illuminate\Routing\Router', 'resource'),
new ArgumentFuncCallToMethodCall('response', 'Illuminate\Contracts\Routing\ResponseFactory', 'make'),
new ArgumentFuncCallToMethodCall('info', 'Illuminate\Log\Writer', 'info'),
new ArgumentFuncCallToMethodCall('view', 'Illuminate\Contracts\View\Factory', 'make'),
new ArgumentFuncCallToMethodCall('bcrypt', 'Illuminate\Hashing\BcryptHasher', 'make'),
new ArgumentFuncCallToMethodCall('redirect', 'Illuminate\Routing\Redirector', 'back'),
new ArgumentFuncCallToMethodCall('broadcast', 'Illuminate\Contracts\Broadcasting\Factory', 'event'),
new ArgumentFuncCallToMethodCall('event', 'Illuminate\Events\Dispatcher', 'dispatch'),
new ArgumentFuncCallToMethodCall('dispatch', 'Illuminate\Events\Dispatcher', 'dispatch'),
new ArgumentFuncCallToMethodCall('route', 'Illuminate\Routing\UrlGenerator', 'route'),
new ArgumentFuncCallToMethodCall('asset', 'Illuminate\Routing\UrlGenerator', 'asset'),
new ArgumentFuncCallToMethodCall('url', 'Illuminate\Contracts\Routing\UrlGenerator', 'to'),
new ArgumentFuncCallToMethodCall('action', 'Illuminate\Routing\UrlGenerator', 'action'),
new ArgumentFuncCallToMethodCall('trans', 'Illuminate\Translation\Translator', 'trans'),
new ArgumentFuncCallToMethodCall('trans_choice', 'Illuminate\Translation\Translator', 'transChoice'),
new ArgumentFuncCallToMethodCall('logger', 'Illuminate\Log\Writer', 'debug'),
new ArgumentFuncCallToMethodCall('back', 'Illuminate\Routing\Redirector', 'back', 'back'),
]),
ArgumentFuncCallToMethodCallRector::ARRAY_FUNCTIONS_TO_METHOD_CALLS => ValueObjectInliner::inline([
new ArrayFuncCallToMethodCall('config', 'Illuminate\Contracts\Config\Repository', 'set', 'get'),
new ArrayFuncCallToMethodCall('session', 'Illuminate\Session\SessionManager', 'put', 'get'),
]),
]]);
$services->set(FuncCallToNewRector::class)->call('configure', [[
FuncCallToNewRector::FUNCTION_TO_NEW => [
'collect' => 'Illuminate\Support\Collection',
],
]]);
$services->set(HelperFuncCallToFacadeClassRector::class);
$services->set(RenameClassRector::class)
->call('configure', [[
RenameClassRector::OLD_TO_NEW_CLASSES => [
'App' => 'Illuminate\Support\Facades\App',
'Artisan' => 'Illuminate\Support\Facades\Artisan',
'Auth' => 'Illuminate\Support\Facades\Auth',
'Blade' => 'Illuminate\Support\Facades\Blade',
'Broadcast' => 'Illuminate\Support\Facades\Broadcast',
'Bus' => 'Illuminate\Support\Facades\Bus',
'Cache' => 'Illuminate\Support\Facades\Cache',
'Config' => 'Illuminate\Support\Facades\Config',
'Cookie' => 'Illuminate\Support\Facades\Cookie',
'Crypt' => 'Illuminate\Support\Facades\Crypt',
'DB' => 'Illuminate\Support\Facades\DB',
'Date' => 'Illuminate\Support\Facades\Date',
'Event' => 'Illuminate\Support\Facades\Event',
'Facade' => 'Illuminate\Support\Facades\Facade',
'File' => 'Illuminate\Support\Facades\File',
'Gate' => 'Illuminate\Support\Facades\Gate',
'Hash' => 'Illuminate\Support\Facades\Hash',
'Http' => 'Illuminate\Support\Facades\Http',
'Lang' => 'Illuminate\Support\Facades\Lang',
'Log' => 'Illuminate\Support\Facades\Log',
'Mail' => 'Illuminate\Support\Facades\Mail',
'Notification' => 'Illuminate\Support\Facades\Notification',
'Password' => 'Illuminate\Support\Facades\Password',
'Queue' => 'Illuminate\Support\Facades\Queue',
'RateLimiter' => 'Illuminate\Support\Facades\RateLimiter',
'Redirect' => 'Illuminate\Support\Facades\Redirect',
'Redis' => 'Illuminate\Support\Facades\Redis',
'Request' => 'Illuminate\Http\Request',
'Response' => 'Illuminate\Support\Facades\Response',
'Route' => 'Illuminate\Support\Facades\Route',
'Schema' => 'Illuminate\Support\Facades\Schema',
'Session' => 'Illuminate\Support\Facades\Session',
'Storage' => 'Illuminate\Support\Facades\Storage',
'URL' => 'Illuminate\Support\Facades\URL',
'Validator' => 'Illuminate\Support\Facades\Validator',
'View' => 'Illuminate\Support\Facades\View',
],
]]);
};