Rector, avis mitigé

J’ai commencé à l’appliquer sur Clearbricks, le plus facile puisque la bibliothèque a une structure très simple, en utilisant le jeu de règles pour PHP 7.4 — on pourra le refaire dans le futur pour PHP 8.0 et PHP 8.1 — et celui qui intègre des règles concernant la qualité du code.

Résultat plutôt encourageant où quelques vieilles syntaxes ont été remplacées par des modernes, toujours ça de pris. Juste un point qui coince avec ce code :

    public function __call(string $name, $args)
    {
        array_unshift($args, $name);

        return call_user_func_array([$this, 'field'], $args);
    }

Transformé en :

    public function __call(string $name, $args)
    {
        array_unshift($args, $name);

        return call_user_func_array(fn (string $name, string $type, ?int $len, bool $null, $default, bool $to_null) => $this->field($name, $type, $len, $null, $default, $to_null), $args);
    }

Alors qu’en fait il serait tout aussi bien de faire1 :

    public function __call(string $name, $args)
    {
        array_unshift($args, $name);

        return $this->field(...$args);
    }

Bref, rien de gênant, finalement.

Côté Dotclear, par contre, c’est un peu plus compliqué puisqu’il a du mal avec certaines parties du code et je suis obligé de le faire répertoire par répertoire, ou quasi, pour profiter du cache qu’il construit au fur et à mesure.

Cela dit, pour une première passe, c’est pas si mal…


Par contre comme Clearbricks manque encore de tests unitaires, je pense que je vais mettre de côté toutes les modifications proposées par Rector et reprendre ça plus tard ; y’a pas le feu au lac et il y a trop d’erreurs pour que je conserve ça en l’état…


Pour mémoire, le fichier de configuration utilisé pour Clearbricks, rector.php à la racine du dépôt :

<?php

declare(strict_types=1);

use Rector\Core\Configuration\Option;
use Rector\Php74\Rector\Property\TypedPropertyRector;
use Rector\Set\ValueObject\SetList;
use Rector\Set\ValueObject\LevelSetList;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;

return static function (ContainerConfigurator $containerConfigurator): void {
    // get parameters
    $parameters = $containerConfigurator->parameters();
    $parameters->set(Option::PATHS, [
        __DIR__ . '/',
    ]);
    $parameters->set(Option::SKIP, [
        // Paths
        __DIR__ . '/bin',
        __DIR__ . '/coverage',
        __DIR__ . '/doxygen',
        __DIR__ . '/tests',
        __DIR__ . '/vendor',
        __DIR__ . '/.atoum.coverage.php',
        __DIR__ . '/.atoum.php',
        __DIR__ . '/.php-cs-fixer.dist.php',
        __DIR__ . '/rector.php',
        // Rules
        JsonThrowOnErrorRector::class,
    ]);

    // Define what rule sets will be applied
    $containerConfigurator->import(LevelSetList::UP_TO_PHP_74);
    $containerConfigurator->import(SetList::CODE_QUALITY);

    // get services (needed for register a single rule)
    // $services = $containerConfigurator->services();

    // register a single rule
    // $services->set(TypedPropertyRector::class);
};

L’installation se faisant avec un composer require rector/rector --dev (cf. le dépôt)


  1. Ce que je vais pousser ce matin ↩︎

Ajouter un commentaire

Les commentaires peuvent être formatés en utilisant la syntaxe Markdown Extra.

Ajouter un rétrolien

URL de rétrolien : https://open-time.net/trackback/15232

Haut de page