Composer kurulumunu yaptıktan sonra aşağıdaki kodu çalıştırıyoruz.

composer require rector/rector --dev

Composer ile vendor içinde ilgili dosyaları kuracak.

Proje kök dizini altında aşağıdaki komutu çalıştırıyoruz.

vendor/bin/rector

Bu komut bize bir tane rector.php dosyası oluşturacak. İçeriği de muhtemelen aşağıdaki gibi bir şey olacak.


declare(strict_types=1);

use Rector\CodeQuality\Rector\Class_\InlineConstructorDefaultToPropertyRector;
use Rector\Config\RectorConfig;
use Rector\Set\ValueObject\LevelSetList;

return static function (RectorConfig $rectorConfig): void {
    $rectorConfig->paths([
        __DIR__ . '/APP',
    ]);

    // register a single rule
    $rectorConfig->rule(InlineConstructorDefaultToPropertyRector::class);

    // define sets of rules
    //    $rectorConfig->sets([
    //        LevelSetList::UP_TO_PHP_82
    //    ]);
};

Bu aşamada sürüm takibi yapıyor olmanız önemli. Var olan değişikliklerinizi hangi dala isterseniz oraya yükleyip yeni bir dal oluşturup oradan ilerleyin.

Rector belgelerine ve tanımlanabilen kurallara göz atmakta yarar var.

Kurallarımızı oluşturalım. Benim kural setim aşağıdaki gibi

/**
 * Kabul edilen Kural Setleri
 *
 * ACTION_INJECTION_TO_CONSTRUCTOR_INJECTION
 * CODE_QUALITY
 * DEAD_CODE : Aşırı analiz gerektiriyor
 * GMAGICK_TO_IMAGICK
 * MONOLOG_20
 * MYSQL_TO_MYSQLI
 * NAMING: Güzel olmakla birlikte kodu tanınmaz hale getirme riski var
 * PHP_52
 * PHP_53
 * PHP_54
 * PHP_55
 * PHP_56
 * PHP_70
 * PHP_71
 * PHP_72
 * PHP_73
 * PHP_74
 * PHP_80
 * PHP_81
 * PHP_82
 * PRIVATIZATION
 * PSR_4
 * TYPE_DECLARATION : Çok bir faydasını göremedim, belki de çoğu kuralı uyguladığım içindir
 * TYPE_DECLARATION_STRICT : Çok bir faydasını göremedim, belki de çoğu kuralı uyguladığım içindir
 * EARLY_RETURN : Kimi önerileri makul
*/


declare(strict_types=1);

use Rector\CodeQuality\Rector\Class_\InlineConstructorDefaultToPropertyRector;
use Rector\Config\RectorConfig;
use Rector\Set\ValueObject\SetList;
use Rector\Core\ValueObject\PhpVersion;
use Rector\Set\ValueObject\LevelSetList;

return static function (RectorConfig $rectorConfig): void {
    //Bunlar, Rector tarafından okunsun ve incelensin istediğim dizinler
    $rectorConfig->paths([
        __DIR__ . '/APP/ACP/',
        __DIR__ . '/APP/CLASS/',
        __DIR__ . '/APP/lib/',
        __DIR__ . '/APP/Template/',
    ]);

    // Sistemde yüklü olan PHP sürümünü burada belirtmek gerekiyor. 
    // Yorumlarken kafa karışıklığı yaşamasın.
    $rectorConfig->phpVersion(PhpVersion::PHP_82);

    //kural dizilerini tanımlıyoruz
    $rectorConfig->sets([
        SetList::PHP_52,
        SetList::PHP_53,
        SetList::PHP_54,
        SetList::PHP_55,
        SetList::PHP_56,
        SetList::PHP_70,
        SetList::PHP_70,
        SetList::PHP_71,
        SetList::PHP_72,
        SetList::PHP_73,
        SetList::PHP_74,
        SetList::PHP_80,
        SetList::PHP_81,
        SetList::PHP_82,
        SetList::EARLY_RETURN,
    ]);

    // tek kural olarak uyguluyoruz
    $rectorConfig->rule(InlineConstructorDefaultToPropertyRector::class);
};

Tanımladık fakat ne işimize yarayacak. Aşağıdaki komutu çalıştırarak önerileri görebiliriz. Sonunda –dry-run olması değişiklikleri yapmayacağı anlamına geliyor. Sadece komut satırından çıktı üretiyor.

vendor/bin/rector process --dry-run

Git ile veya benzer bir sistemle sürüm takibi yaptığımızdan emin olduktan sonra aşağıdaki komutu çalıştırıyoruz.

vendor/bin/rector process

Artık git sürüm takip sistemimize değişiklikler işlendi. Analiz edip üstünde düşünmek site kalmış.

Her zaman doğru sonuç üretmeyebiliyor. Sonuçta yapay zeka değil ve programcının niyetini okumuyor. Yine de PHP 7.4 ile hazırlanmış bir kodu yeni sürüme refaktör etmekte işe yarayacaktır.

Şimdiden kolay gelsin.

Kaynakca:
– Kişisel tecrübeler
– https://getrector.com/documentation/
– https://github.com/rectorphp/rector/blob/HEAD//docs/rector_rules_overview.md

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir