Rector für WordPress

MyOOS hat einen Fehler, oder tut nicht das, was Ihr erwartet? Derartige "Unanehmlichkeiten" bitte hier.
Antworten
r23
Beiträge: 2696
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Rector für WordPress

Beitrag von r23 »

Hallo,

Rector hat Einzug in unsere MyOOS Entwicklung gezogen.

Rector ist ein Open-Source-Tool, das sofortige Upgrades und Refactoring von PHP-Code durchführt. Es basiert auf einer Reihe von Regeln, die Deinen Code ändern, wie z.B. das Hinzufügen oder Entfernen von Funktionen, das Ersetzen von veralteten oder veralteten Konstrukten, das Ändern von Parametern oder Rückgabewerten usw. Du kannst mehr über Rector in seiner offiziellen Website erfahren.

Um Rector-Regeln für WordPress zu erstellen, musst du zuerst eine PHP-Klasse erstellen, die von der abstrakten Klasse Rector\Core\Rector\AbstractRector erbt. Diese Klasse muss drei Methoden implementieren:

getRuleDefinition: Diese Methode gibt ein RuleDefinition-Objekt zurück, das die Beschreibung, die Codebeispiele und die Dokumentation für Ihre Regel enthält. Du kannst diese Methode verwenden, um Deine Regel zu dokumentieren und zu erklären, was sie tut und warum sie nützlich ist.

getNodeTypes: Diese Methode gibt ein Array von Strings zurück, die die Typen der Knoten angeben, auf die deine Regel angewendet werden soll. Du kannst diese Methode verwenden, um zu filtern, welche Knoten von Deiner Regel verarbeitet werden sollen. Zum Beispiel kannst Du nur Expr\FuncCall auswählen, wenn Du nur Funktionsaufrufe ändern möchtest.

refactor: Diese Methode nimmt einen Knoten als Parameter und gibt einen neuen Knoten oder null zurück. Dies ist die Hauptlogik Deiner Regel, in der Du den gegebenen Knoten analysieren und modifizieren können. Du kannst diese Methode verwenden, um den Code nach Deinen eigenen Kriterien zu transformieren.

Um Ihnen einen Eindruck zu geben, wie eine Rector-Regel für WordPress aussehen könnte, habe ich versucht, eine einfache Regel zu erstellen, die die veraltete Funktion wp_get_sites durch die neue Funktion get_sites ersetzt. Hier ist der Code:

Code: Alles auswählen

<?php

namespace Rector\WordPress\Rector\FuncCall;

use PhpParser\Node;
use PhpParser\Node\Expr\FuncCall;
use Rector\Core\Rector\AbstractRector;
use Rector\Core\RectorDefinition\CodeSample;
use Rector\Core\RectorDefinition\RectorDefinition;

class WpGetSitesToGetSitesRector extends AbstractRector
{
    public function getRuleDefinition(): RectorDefinition
    {
        return new RectorDefinition('Replaces wp_get_sites() function with get_sites()', [
            new CodeSample(
                <<<'CODE_SAMPLE'
// before
$sites = wp_get_sites();

// after
$sites = get_sites();
CODE_SAMPLE
                ,
                <<<'CODE_SAMPLE'
// before
$sites = wp_get_sites();

// after
$sites = get_sites();
CODE_SAMPLE
            ),
        ]);
    }

    public function getNodeTypes(): array
    {
        return [FuncCall::class];
    }

    public function refactor(Node $node): ?Node
    {
        if (! $this->isName($node->name, 'wp_get_sites')) {
            return null;
        }

        $node->name = new Node\Name('get_sites');

        return $node;
    }
}

Ich hoffe, Du hast Spaß beim Programmieren mit PHP.

Beste Grüße


Ralf
Antworten