74f6b181e8
[DX] Remove upgrade RectorConfig set, as last 2 version use only PHP (#2852)
14 KiB
25 Rules Overview
AddArgumentDefaultValueRector
Adds default value for arguments in defined methods.
🔧 configure it!
use Rector\Config\RectorConfig;
use Rector\Laravel\Rector\ClassMethod\AddArgumentDefaultValueRector;
use Rector\Laravel\ValueObject\AddArgumentDefaultValue;
return static function (RectorConfig $rectorConfig): void {
$rectorConfig->ruleWithConfiguration(AddArgumentDefaultValueRector::class, [
AddArgumentDefaultValueRector::ADDED_ARGUMENTS => [
new AddArgumentDefaultValue('SomeClass', 'someMethod', 0, false),
],
]);
};
↓
class SomeClass
{
- public function someMethod($value)
+ public function someMethod($value = false)
{
}
}
AddGenericReturnTypeToRelationsRector
Add generic return type to relations in child of Illuminate\Database\Eloquent\Model
use App\Account;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
class User extends Model
{
+ /** @return HasMany<Account> */
public function accounts(): HasMany
{
return $this->hasMany(Account::class);
}
}
AddGuardToLoginEventRector
Add new $guard
argument to Illuminate\Auth\Events\Login
use Illuminate\Auth\Events\Login;
final class SomeClass
{
public function run(): void
{
- $loginEvent = new Login('user', false);
+ $guard = config('auth.defaults.guard');
+ $loginEvent = new Login($guard, 'user', false);
}
}
AddMockConsoleOutputFalseToConsoleTestsRector
Add "$this->mockConsoleOutput = false"; to console tests that work with output content
use Illuminate\Support\Facades\Artisan;
use Illuminate\Foundation\Testing\TestCase;
final class SomeTest extends TestCase
{
+ public function setUp(): void
+ {
+ parent::setUp();
+
+ $this->mockConsoleOutput = false;
+ }
+
public function test(): void
{
$this->assertEquals('content', \trim((new Artisan())::output()));
}
}
AddParentBootToModelClassMethodRector
Add parent::boot();
call to boot()
class method in child of Illuminate\Database\Eloquent\Model
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
public function boot()
{
+ parent::boot();
}
}
AddParentRegisterToEventServiceProviderRector
Add parent::register();
call to register()
class method in child of Illuminate\Foundation\Support\Providers\EventServiceProvider
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
public function register()
{
+ parent::register();
}
}
AnonymousMigrationsRector
Convert migrations to anonymous classes.
use Illuminate\Database\Migrations\Migration;
-class CreateUsersTable extends Migration
+return new class extends Migration
{
// ...
-}
+};
CallOnAppArrayAccessToStandaloneAssignRector
Replace magical call on $this->app["something"]
to standalone type assign variable
class SomeClass
{
/**
* @var \Illuminate\Contracts\Foundation\Application
*/
private $app;
public function run()
{
- $validator = $this->app['validator']->make('...');
+ /** @var \Illuminate\Validation\Factory $validationFactory */
+ $validationFactory = $this->app['validator'];
+ $validator = $validationFactory->make('...');
}
}
ChangeQueryWhereDateValueWithCarbonRector
Add parent::boot();
call to boot()
class method in child of Illuminate\Database\Eloquent\Model
use Illuminate\Database\Query\Builder;
final class SomeClass
{
public function run(Builder $query)
{
- $query->whereDate('created_at', '<', Carbon::now());
+ $dateTime = Carbon::now();
+ $query->whereDate('created_at', '<=', $dateTime);
+ $query->whereTime('created_at', '<=', $dateTime);
}
}
FactoryApplyingStatesRector
Call the state methods directly instead of specify the name of state.
-$factory->state('delinquent');
-$factory->states('premium', 'delinquent');
+$factory->delinquent();
+$factory->premium()->delinquent();
FactoryDefinitionRector
Upgrade legacy factories to support classes.
use Faker\Generator as Faker;
-$factory->define(App\User::class, function (Faker $faker) {
- return [
- 'name' => $faker->name,
- 'email' => $faker->unique()->safeEmail,
- ];
-});
+class UserFactory extends \Illuminate\Database\Eloquent\Factories\Factory
+{
+ protected $model = App\User::class;
+ public function definition()
+ {
+ return [
+ 'name' => $this->faker->name,
+ 'email' => $this->faker->unique()->safeEmail,
+ ];
+ }
+}
FactoryFuncCallToStaticCallRector
Use the static factory method instead of global factory function.
-factory(User::class);
+User::factory();
HelperFuncCallToFacadeClassRector
Change app()
func calls to facade calls
class SomeClass
{
public function run()
{
- return app('translator')->trans('value');
+ return \Illuminate\Support\Facades\App::get('translator')->trans('value');
}
}
LumenRoutesStringActionToUsesArrayRector
Changes action in rule definitions from string to array notation.
-$router->get('/user', 'UserController@get');
+$router->get('/user', ['uses => 'UserController@get']);
LumenRoutesStringMiddlewareToArrayRector
Changes middlewares from rule definitions from string to array notation.
-$router->get('/user', ['middleware => 'test']);
-$router->post('/user', ['middleware => 'test|authentication']);
+$router->get('/user', ['middleware => ['test']]);
+$router->post('/user', ['middleware => ['test', 'authentication']]);
MinutesToSecondsInCacheRector
Change minutes argument to seconds in Illuminate\Contracts\Cache\Store
and Illuminate\Support\Facades\Cache
class SomeClass
{
public function run()
{
- Illuminate\Support\Facades\Cache::put('key', 'value', 60);
+ Illuminate\Support\Facades\Cache::put('key', 'value', 60 * 60);
}
}
OptionalToNullsafeOperatorRector
Convert simple calls to optional helper to use the nullsafe operator
🔧 configure it!
use Rector\Config\RectorConfig;
use Rector\Laravel\Rector\PropertyFetch\OptionalToNullsafeOperatorRector;
return static function (RectorConfig $rectorConfig): void {
$rectorConfig->ruleWithConfiguration(OptionalToNullsafeOperatorRector::class, [
OptionalToNullsafeOperatorRector::EXCLUDE_METHODS => ['present'],
]);
};
↓
-optional($user)->getKey();
-optional($user)->id;
+$user?->getKey();
+$user?->id;
// macro methods
optional($user)->present()->getKey();
PropertyDeferToDeferrableProviderToRector
Change deprecated $defer
= true; to Illuminate\Contracts\Support\DeferrableProvider
interface
use Illuminate\Support\ServiceProvider;
+use Illuminate\Contracts\Support\DeferrableProvider;
-final class SomeServiceProvider extends ServiceProvider
+final class SomeServiceProvider extends ServiceProvider implements DeferrableProvider
{
- /**
- * @var bool
- */
- protected $defer = true;
}
Redirect301ToPermanentRedirectRector
Change "redirect" call with 301 to "permanentRedirect"
class SomeClass
{
public function run()
{
- Illuminate\Routing\Route::redirect('/foo', '/bar', 301);
+ Illuminate\Routing\Route::permanentRedirect('/foo', '/bar');
}
}
RedirectBackToBackHelperRector
Replace redirect()->back()
and Redirect::back()
with back()
use Illuminate\Support\Facades\Redirect;
class MyController
{
public function store()
{
- return redirect()->back()->with('error', 'Incorrect Details.')
+ return back()->with('error', 'Incorrect Details.')
}
public function update()
{
- return Redirect::back()->with('error', 'Incorrect Details.')
+ return back()->with('error', 'Incorrect Details.')
}
}
RedirectRouteToToRouteHelperRector
Replace redirect()->route("home")
and Redirect::route("home")
with to_route("home")
use Illuminate\Support\Facades\Redirect;
class MyController
{
public function store()
{
- return redirect()->route('home')->with('error', 'Incorrect Details.')
+ return to_route('home')->with('error', 'Incorrect Details.')
}
public function update()
{
- return Redirect::route('home')->with('error', 'Incorrect Details.')
+ return to_route('home')->with('error', 'Incorrect Details.')
}
}
RemoveDumpDataDeadCodeRector
It will removes the dump data just like dd or dump functions from the code.`
class MyController
{
public function store()
{
- dd('test');
return true;
}
public function update()
{
- dump('test');
return true;
}
}
RequestStaticValidateToInjectRector
Change static validate()
method to $request->validate()
use Illuminate\Http\Request;
class SomeClass
{
- public function store()
+ public function store(\Illuminate\Http\Request $request)
{
- $validatedData = Request::validate(['some_attribute' => 'required']);
+ $validatedData = $request->validate(['some_attribute' => 'required']);
}
}
RouteActionCallableRector
Use PHP callable syntax instead of string syntax for controller route declarations.
🔧 configure it!
use Rector\Config\RectorConfig;
use Rector\Laravel\Rector\StaticCall\RouteActionCallableRector;
return static function (RectorConfig $rectorConfig): void {
$rectorConfig->ruleWithConfiguration(RouteActionCallableRector::class, [
RouteActionCallableRector::NAMESPACE => 'App\Http\Controllers',
]);
};
↓
-Route::get('/users', 'UserController@index');
+Route::get('/users', [\App\Http\Controllers\UserController::class, 'index']);
UnifyModelDatesWithCastsRector
Unify Model $dates
property with $casts
use Illuminate\Database\Eloquent\Model;
class Person extends Model
{
protected $casts = [
- 'age' => 'integer',
+ 'age' => 'integer', 'birthday' => 'datetime',
];
-
- protected $dates = ['birthday'];
}