Rector 2.8 ist ein Release, das ihr nicht seht, aber sofort spürt. Die Core Engine läuft deutlich schneller, auf PHP 8.3 sogar rund dreimal so schnell. Regeln liefern jetzt in einem einzigen Durchgang ein stabiles Ergebnis. Und das Regelwerk wird schlanker: Viele selten genutzte Regeln sind deprecated. Wir nutzen Rector täglich in Symfony und Sulu Projekten. Hier lest ihr, was die neue Version bringt und wie ihr sauber updatet. Den Gesamtüberblick findet ihr in unserem Glossar zu Rector PHP.
PHP Update mit Rector geplant?
Wir heben euer Projekt mit eurem Team auf aktuelle PHP und Symfony Versionen. Zuerst bauen wir das Netz aus PHPStan, PHPUnit und Cypress E2E Tests, dann lassen wir Rector Schritt für Schritt laufen.
Rector 2.8 neue Features im Überblick
| Neuerung | Was sich ändert | Was ihr davon habt |
|---|---|---|
| Schnellere Core Engine | rund 26 Prozent schneller, etwa 8 Prozent weniger Speicher | kürzere Läufe lokal und in der CI |
| PHPStan Turbo | native Parsing Extension in den Workern ab PHP 8.3 | rund dreimal so schnell ohne Setup |
| Regeln in einem Durchgang | Regeln laufen idempotent bis zum Fixpunkt | ein zweiter Lauf bringt kein neues Diff |
| CPU Quota von cgroups | Worker Anzahl passt sich dem Container an | keine überlasteten CI Runner |
| list-rules –all | listet jede Regel aus Kern und allen rector Paketen | schneller Überblick über verfügbare Regeln |
| ExplicitNullableObjectInstanceRector | ersetzt vier ältere instanceof Regeln | eine Regel statt vier |
| Schlankeres Regelwerk | viele Nischenregeln deprecated, Naming Set inklusive | weniger Überraschungen im Diff |
Wie schnell ist Rector 2.8
Die Maintainer haben Rector auf der eigenen Codebasis gemessen, die Zahlen stehen in den Release Notes zu Rector 2.8. Version 2.7.0 brauchte für die Core Engine 32 Sekunden bei 351 MB Speicher. Version 2.8.0 schafft es in 23,6 Sekunden bei 324 MB. Mit PHPStan Turbo auf PHP 8.3 und neuer sind es etwa 10 Sekunden.
| Version | Laufzeit Core Engine | Speicher Spitze |
|---|---|---|
| Rector 2.7.0 | 32,0 Sekunden | 351 MB |
| Rector 2.8.0 | 23,6 Sekunden | 324 MB |
| Rector 2.8.0 mit PHPStan Turbo ab PHP 8.3 | etwa 10 Sekunden | etwa 317 MB |
Woher kommt das Tempo? Hunderte Regeln prüfen jetzt zuerst günstige Bedingungen wie Namen und Struktur, bevor sie teure Reflection und Typabfragen starten. Konfigurierbare Regeln suchen per Schlüssel statt jede Konfiguration für jeden Knoten durchzugehen. Kurze Namen und ungenutzte Imports löst Rector in einem einzigen Durchlauf durch den Syntaxbaum. Wie dieser Baum funktioniert, erklärt unser Glossar zum Abstract Syntax Tree.
PHPStan Turbo kennt ihr vielleicht schon aus unserem Artikel zum PHPStan 2.3 Update. Rector 2.8 setzt PHPStan 2.3 voraus und nutzt Turbo direkt in den parallelen Workern. Ihr müsst dafür nichts installieren. Der Gewinn wächst mit der Zahl der Kerne. Auf einem CI Runner mit vielen Kernen ist der Unterschied also größer als auf einem kleinen Laptop. Hintergründe zu Turbo stehen im Release Artikel zu PHPStan 2.3.
Rector Regeln laufen jetzt idempotent
Bisher kannte Rector einen Schutz gegen Regeln, die Knoten immer wieder umbauen. In 2.8 fällt dieser Schutz weg. Die Engine lässt die Regeln laufen, bis sich nichts mehr ändert. Tests stellen sicher, dass jede Regel idempotent ist. Ändert eine Regel eine Datei, kommt dasselbe heraus, egal ob sie einmal oder zehnmal läuft.
Das klingt nach Detail, ist aber für die Pipeline wichtig. Ein Dry Run als Gate ist nur dann fair, wenn er auf sauberem Code wirklich nichts meldet. Genau das garantiert Rector jetzt. Wie wir solche Gates aufbauen, zeigt Quality Gates in der Pipeline.
vendor/bin/rector process --dry-run
Rector in Docker und CI mit CPU Quota
Im Parallelbetrieb hat Rector die Zahl der Worker bisher an den Kernen des Hosts ausgerichtet. In einem Container mit begrenzter CPU Quota startete Rector dann mehr Worker, als wirklich Rechenzeit da war. Rector 2.8 liest die cgroup Quota aus und passt die Worker an. Gerade auf geteilten GitLab oder GitHub Runnern läuft der Job dadurch ruhiger.
Schon in 2.7 kam eine Verbesserung für die CI dazu: Der Datei Cache arbeitet mit projektrelativen Pfaden. Ein Cache übersteht damit einen frischen Checkout in einem anderen Verzeichnis. Speichert den Cache Ordner zwischen den Läufen, dann prüft Rector nur geänderte Dateien. Den kompletten Aufbau mit Docker, Staging und Preview URLs beschreibt unsere CI CD Pipeline.
Alle Rector Regeln auflisten mit list-rules
Der Befehl list-rules war schon auf dem Weg nach draußen. In 2.8 ist er zurück und nicht mehr deprecated. Neu ist die Option --all. Sie zeigt jede Regel aus dem Kern und aus allen rector Paketen, also auch für Symfony, Doctrine, PHPUnit und Downgrades.
vendor/bin/rector list-rules --all
Das hilft, wenn ihr eine einzelne Regel mit --only laufen lassen wollt. So teilt ihr große Umbauten in kleine Commits, die sich gut reviewen lassen.
Diese Rector Regeln sind deprecated
Das Ziel der Maintainer ist ein kleineres Set an Regeln, auf die man sich im Alltag verlassen kann. Viele Regeln, die in keinem Set stecken und kaum genutzt werden, sind deshalb deprecated. Sie laufen weiter, geben aber eine Warnung aus. Mit dem nächsten Major Release fliegen sie raus. Die wichtigsten Gruppen:
- Naming: das komplette Naming Set und Regeln wie RenameVariableToMatchNewTypeRector oder RenamePropertyToMatchTypeRector
- Transform: konfigurierbare Regeln wie FuncCallToStaticCallRector, MethodCallToStaticCallRector oder StringToClassConstantRector
- TypeDeclaration: DeclareStrictTypesRector zugunsten von SafeDeclareStrictTypesRector, dazu AddPropertyTypeDeclarationRector
- CodeQuality und DeadCode: unter anderem SwitchTrueToMatchRector, CompleteDynamicPropertiesRector und RemoveDeadReturnRector
Komplett entfernt sind die Befehle custom-rule und setup-ci sowie die alten Methoden withPhp53Sets() bis withPhp74Sets(). Wer sie noch in der rector.php nutzt, stellt auf withPhpSets() mit Zielversion um:
return RectorConfig::configure()
->withPaths([__DIR__ . '/src', __DIR__ . '/tests'])
->withPhpSets(php84: true)
->withRules([
// statt DeclareStrictTypesRector
SafeDeclareStrictTypesRector::class,
]);
Was Rector 2.7 schon mitgebracht hat
Wer von 2.6 kommt, bekommt auch die Neuerungen aus 2.7 mit. Dazu gehören neue Regeln wie TernaryToNullsafeCoalesceRector und ConstructorReadonlyAssignToDefaultRector. Beim Import von Namen spart Rector auf großen Projekten bis zu rund 24 Prozent CPU Instruktionen. Hängende Worker werden beendet, und Dateien gehen nicht mehr verloren, wenn ein Worker neu startet. rector-doctrine bekommt Regeln für die Sortierrichtung im QueryBuilder und im OrderBy Attribut. Alle Details stehen in den Release Notes zu Rector 2.7.
Rector auf 2.8 updaten in fünf Schritten
composer update rector/rector --with-all-dependencies
- PHP Version prüfen: Turbo greift erst ab PHP 8.3. Prüft lokal, im Docker Image und im CI Runner.
- Dry Run starten: Lest die Warnungen zu deprecated Regeln, bevor ihr irgendwas schreibt.
- Konfiguration aufräumen: withPhp53Sets() bis withPhp74Sets() ersetzen, deprecated Regeln tauschen oder entfernen.
- Cache in der Pipeline halten: Den Cache Ordner zwischen den Läufen speichern.
- Testen: PHPStan, PHPUnit und ein E2E Durchlauf nach jedem Rector Lauf.
Viele Teams nutzen Rector vor allem für Framework Updates. Wie das für Symfony aussieht, zeigt unser Symfony Upgrade mit Rector auf 7.4 und 8. rector-symfony bringt in 2.8 schon erste Regeln für Symfony 8.2 mit. Nach Rector räumt Easy Coding Standard die Formatierung auf.
Rector, KI Coding und Quality Gates
Coding Agents schreiben schnell, aber selten im Stil eures Projekts. Rector holt den Code zurück auf eure Linie. Bei uns gilt eine feste Reihenfolge: erst PHPUnit und PHPStan, dann Rector und das eigentliche Aufräumen. Jede Änderung geht durch dieselben Gates, egal ob Mensch oder Agent sie geschrieben hat. Weil Rector 2.8 idempotent arbeitet und schneller läuft, passt es noch besser als fester Schritt hinter jedem Agenten Lauf. Die Regeln dafür liefern unsere NCA PHP AI Coding Guidelines. Welche Werkzeuge außer Rector in den Werkzeugkasten gehören, zeigt PHP Refactoring Tools, die 10 besten Werkzeuge.
Fazit
Rector 2.8 bringt kaum neue Regeln, aber es macht das Werkzeug erwachsener. Schneller, sparsamer, verlässlicher im Ergebnis und mit einem Regelwerk, das sich auf den Alltag konzentriert. Für Teams mit Rector in der Pipeline ist das Update ein klarer Gewinn. Plant etwas Zeit ein, um deprecated Regeln aus der Konfiguration zu holen. Dann läuft das nächste Major Release ohne Überraschung.
Häufige Fragen zu Rector 2.8
Was ist 2026 neu in Rector 2.8?
Rector 2.8 macht die Core Engine rund 26 Prozent schneller und nutzt ab PHP 8.3 PHPStan Turbo. Regeln laufen idempotent in einem Durchgang, die Worker beachten die CPU Quota im Container und list-rules zeigt mit –all jede Regel. Viele Nischenregeln sind deprecated.
Wie schnell ist Rector 2.8 im Jahr 2026?
Auf der eigenen Codebasis braucht die Core Engine 23,6 statt 32 Sekunden. Mit PHPStan Turbo auf PHP 8.3 und neuer sind es etwa 10 Sekunden, also rund dreimal so schnell wie Rector 2.7. Der Gewinn wächst mit der Zahl der Kerne.
Muss ich PHPStan Turbo 2026 für Rector installieren?
Nein. Rector 2.8 setzt PHPStan 2.3 voraus, die Turbo Extension liegt im Paket phpstan/phpstan. Die parallelen Worker nutzen sie automatisch, sobald PHP 8.3 oder neuer läuft.
Welche Rector Regeln sind 2026 deprecated?
Unter anderem das Naming Set, SwitchTrueToMatchRector, DeclareStrictTypesRector zugunsten von SafeDeclareStrictTypesRector und viele Transform Regeln. Sie laufen weiter, geben aber eine Warnung aus und werden im nächsten Major Release entfernt.
Ist das Update auf Rector 2.8 im Jahr 2026 riskant?
Kaum, wenn ihr mit einem Dry Run startet. Entfernt wurden vor allem alte Konfigurationsmethoden wie withPhp74Sets() und die Befehle custom-rule und setup-ci. Deprecated Regeln laufen weiter. Sichert das Update wie jeden Rector Lauf mit PHPStan und Tests ab.
Rector in eurem Projekt mit Never Code Alone
Wir heben Rector, PHPStan und PHPUnit in eurem Projekt, räumen die Konfiguration auf und bauen Rector als Gate in eure Pipeline. Kostenloses Kennenlernen, ehrliche Aufwandsschätzung, minutengenaue Abrechnung.
