İçeriğe geç

NextPDF Backport Builder yapılandırması

Bunlar derleme araçlarıdır — çalışma zamanı bağımlılığı DEĞİLDİR. Bu sayfadaki her öğe, kaynak dönüşümünü derleme sırasında yapılandırır. Bunların hiçbiri alt akıştaki çalışma zamanına dahil edilmez.

Dönüşüm, rector/config/ altındaki üç Rector yapılandırma dosyası ve rector/rules/ altındaki üç özel kural tarafından yürütülür. Seçilen yapılandırma hedefe bağlıdır. PHP 8.1 hedefi tek bir Rector geçişi kullanır. PHP 7.4 hedefi, geçişler arasında bir düzeltme aşaması bulunan iki geçişli bir işlem hattı kullanır. İkinci geçiş gereklidir, çünkü Rector enum durumlarının varsayılan değerlerini tek bir geçişte çözümleyemez.

DosyaAmaçKullanan
rector/config/rector-php81.phpPHP 8.1’e tek geçişli düşürmePHP 8.1 hedefi
rector/config/rector-php74-enums.phpGeçiş 1 — enum’ları sabit listesi sınıflarına dönüştürürPHP 7.4 hedefi
rector/config/rector-php74.phpGeçiş 2 — PHP 7.4’e tam düşürmePHP 7.4 hedefi

Her yapılandırma, Rector’ın yerel olarak işlediği özellikler için düşürme kümesi zincirini (withDowngradeSets(php81: true) veya withDowngradeSets(php74: true)) çağırır. Ardından, kalan özellikler için özel kuralları kaydeder. Bu davranış, rector/config/ içindeki üç dosyaya karşı doğrulanmıştır.

rector-php81.php ve rector-php74.php dosyalarının ikisi de */tests/Benchmark/* yolunu atlar. Karşılaştırma betikleri, Rector’ın çözümleyemediği harici Portable Document Format (PDF) kitaplıklarına başvurur ve bu durum, Rector’ın varsayılan parametre çözümleyicisini çökertir. rector-php74.php ayrıca DowngradeHashAlgorithmXxHashRector kuralını da atlar. Bu yerleşik kural, modern PHP’de kullanımdan kaldırılan MHASH_XXH* sabitleriyle karşılaştığında çöker ve kaynak xxHash kullanmaz. Bu, her iki dosyadaki withSkip() çağrılarına karşı doğrulanmıştır.

Depoda tam olarak üç özel Rector kuralı bulunur. Üçü de rector-php81.php içinde kaydedilir; asimetrik görünürlük, clone-with ve trait sabitleri kuralları ayrıca rector-php74.php içinde de kaydedilir. tests/Rector/RectorRulesMetadataTest.php, her kuralı oluşturup tanımını ve düğüm türlerini denetleyerek bunu doğrudan doğrular.

Asimetrik görünürlükteki set değiştiricisini kaldırır. public private(set) olarak bildirilen bir özellik veya tanıtılan parametre, düz public olur. Okuma erişimi korunur; derleme zamanındaki ayarlayıcı kısıtlaması kaldırılır. Okuma görünürlüğü kalmadığında kural, varsayılan olarak public değerini kullanır. tests/Rector/Fixtures/DowngradeAsymmetricVisibility/public_private_set.php.inc dosyasından kaynak destekli dönüşüm:

before
<?php
class Config {
public private(set) float $x = 0.0;
public private(set) string $name = '';
public private(set) int $count = 0;
}
after
<?php
class Config {
public float $x = 0.0;
public string $name = '';
public int $count = 0;
}

Geçersiz kılma dizisi içeren clone() işlev biçimini, bir klon oluşturmaya, açık özellik atamalarına ve geçici bir değişkenin döndürülmesine dönüştürerek yeniden yazar. Geçici değişken sayacı her dosyada sıfırlanır. Bu kural, salt okunur özellik kaldırma kuralından sonra çalışmalıdır, çünkü genişletilmiş atama aksi takdirde salt okunur bir özellikte başarısız olur. tests/Rector/Fixtures/DowngradeCloneWith/return_clone_with.php.inc dosyasından kaynak destekli dönüşüm:

before
<?php
class PageSize {
public float $width = 0.0;
public float $height = 0.0;
public function withDimensions(float $width, float $height): self {
return clone($this, ['width' => $width, 'height' => $height]);
}
}
after
<?php
class PageSize {
public float $width = 0.0;
public float $height = 0.0;
public function withDimensions(float $width, float $height): self
{
$__cloneResult1 = clone $this;
$__cloneResult1->width = $width;
$__cloneResult1->height = $height;
return $__cloneResult1;
}
}

Kuralın belgelenmiş sınırlamaları vardır. Bağımsız değişken eşleştirme, özyinelemeli olmayan bir desen kullanır; bu nedenle iç içe parantezler içeren geçersiz kılma değerleri ele alınmaz. Yalnızca dize türündeki dizi anahtarları özellik adlarına çözümlenir. rector/rules/DowngradeCloneWithRector.php dosyasına ve test düzeneği paketine karşı doğrulanmıştır.

Trait sabitlerini statik özelliklere dönüştürür. Daha eski çalışma zamanları, trait sabitlerini “Traits cannot have constants” diyerek reddeder. Kural ayrıca self::CONST ve static::CONST başvurularını statik özellik biçimine yeniden yazar. Görünürlük korunur; final değiştiricisi kaldırılır, çünkü daha eski hedefte özellikler final olamaz. Türlenmiş bir sınıf sabiti, türlenmiş bir özelliğe dönüşür. tests/Rector/Fixtures/DowngradeTraitConstants/private_constant.php.inc dosyasından kaynak destekli dönüşüm:

before
<?php
trait HasLimit
{
private const MAX_SIZE = 1024;
public function getLimit(): int
{
return self::MAX_SIZE;
}
}
after
<?php
trait HasLimit
{
private static $MAX_SIZE = 1024;
public function getLimit(): int
{
return self::$MAX_SIZE;
}
}

PHP 7.4 hedefi tek bir geçişte çalışamaz. Rector’ın varsayılan parametre değeri çözümleyicisi, oluşturucu tanıtımındaki enum durumlarının varsayılan değerlerinde çöker. Bu nedenle derleme betiği şunları çalıştırır:

  1. Geçiş 1 — enum ön işleme. rector-php74-enums.php yalnızca yerleşik enum-sabit-listesi-sınıfı kuralını çalıştırır. Bu geçişten sonra enum durumları düz sınıf sabitleridir.
  2. Önbellek temizleme. İkinci geçişin eski bir ağaçla çalışmaması için Rector önbelleği temizlenir.
  3. İşlem sonrası düzeltmeler. scripts/build.php, enum-sınıf kuralının kapsamadığı desenleri yeniden yazar. Eski enum örnek yöntemleri statik hale getirilir. EnumClass::Case->value ve ->name erişimleri çözümlenir. Rector’ın bağlayamadığı adlandırılmış bağımsız değişkenler, konumsal bağımsız değişkenlere çevrilir. Bu söz dizimi desenleri aksi takdirde PHP 7.4’te ayrıştırma hatalarına neden olur.
  4. Geçiş 2 — tam düşürme. rector-php74.php, tam PHP 7.4 düşürme zincirini ve özel kuralları çalıştırır.

Doğrulama kaynağı: scripts/build.php (runRector(), postProcessFixups()).

scripts/build.php derleme sürecini düzenler. Seçenekler, getopt() çağrısına ve Build oluşturucusuna karşı doğrulanmıştır:

BayrakVarsayılanEtki
--version=<x.y.z>2.0.0Oluşturulan dosyalara yazılan sürüm: composer.json ve CHANGELOG.md
--source-dir=<path>c:/Users/admin/DocumentsEşdüzey kaynak depolarını içeren kök
--output-dir=<path><repo>/outputOluşturulan dağıtımın yazıldığı yer
--target=php74 | --target=php81php81Düşürme hedefi. php74 yalnızca çekirdeği kullanmaya zorlar ve Pro’yu devre dışı bırakır
--dry-runkapalıHer aşamayı yalnızca rapor modunda çalıştırır; kopyalama ve Rector atlanır
--no-prokapalıPro paketini hariç tutar (yalnızca PHP 8.1 hedefi; PHP 7.4 zaten hariç tutar)

Geçersiz bir --target değeri, herhangi bir işlem başlamadan önce InvalidArgumentException oluşturur. Bu, Build::__construct() içinde doğrulanmıştır (VALID_TARGETS koruması).

BetikKomutAmaç
composer testphpunitKural test düzeneği paketlerini çalıştırır
composer analysephpstan analyse rector/rules scripts --level=10Derleme kodunu statik olarak analiz eder
composer buildphp scripts/build.phpTam derleme
composer build:dryphp scripts/build.php --dry-runDeneme amaçlı derleme

Doğrulama kaynağı: composer.jsonscripts.

  • /integrations/backport/quickstart/ — deneme amaçlı çalıştırmayı ve tam derlemeyi yürütün.
  • /integrations/backport/troubleshooting/ — her bir başarısızlık aşamasının ne anlama geldiği.