Page MenuHomePhorge

Rector.php configuration to support PHP 8.2 on Arcanist and Phorge

Authored By
valerio.bozzolan
Mar 6 2023, 06:34
Size
3 KB
Referenced Files
None
Subscribers
None

Rector.php configuration to support PHP 8.2 on Arcanist and Phorge

<?php
/**
* Rector.php configuration
*
* Author: Valerio Bozzolan 2023 and contributors
* License: this specific configuration file is not elegible for copyright
* since it's just a configuration
* so I release it under CC0 public domain.
* Source: https://we.phorge.it/P7
*/
declare(strict_types=1);
use Rector\Config\RectorConfig;
use Rector\Set\ValueObject\LevelSetList;
use Rector\Core\ValueObject\PhpVersion;
use Rector\Set\ValueObject\DowngradeLevelSetList;
use Rector\Set\ValueObject\SetList;
use Rector\Renaming\Rector\FuncCall\RenameFunctionRector;
return static function (RectorConfig $rectorConfig): void {
// shared directories to be touched by Rector
// these paths exist in both Arcanist and Phorge
$paths = [
__DIR__ . '/bin',
__DIR__ . '/externals',
__DIR__ . '/resources',
__DIR__ . '/scripts',
__DIR__ . '/src',
__DIR__ . '/support',
];
// rare directories to be touched by Rector
// these paths are probably defined in only Arcanist, or only Phorge
$phaths_rare = [
__DIR__ . '/conf',
__DIR__ . '/webroot',
];
// ignore unexisting paths, add existing paths
foreach( $phaths_rare as $path ) {
if( file_exists( $path ) ) {
$paths[] = $path;
}
}
// process just these paths
$rectorConfig->paths( $paths );
// ignore various test cases
$rectorConfig->skip( [
__DIR__ . '/src/__tests__',
__DIR__ . '/src/*/__tests__',
] );
// trying to set the current (and minimum) PHP version to be adopted as base
// https://getrector.com/documentation/php-version-features
// https://we.phorge.it/book/phorge/article/installation_guide/
$rectorConfig->phpVersion(PhpVersion::PHP_55);
// just the refactors we want
$rectorConfig->sets( [
// trying to add support to this PHP version and below (PHP 8.2)
Rector\Set\ValueObject\LevelSetList::UP_TO_PHP_82,
// Rector\Php53\Rector\FuncCall\DirNameFileConstantToDirConstantRector::class,
// Rector\Php53\Rector\Ternary\TernaryToElvisRector::class,
// Rector\Php55\Rector\Class_\ClassConstantToSelfClassRector::class,
] );
// trying to respect obsolete Phorge's code styles previous to PHP 5.5
$rectorConfig->skip([
// for some reasons we want long "array()" instead of "[]"...
// https://we.phorge.it/book/contrib/article/php_coding_standards/
Rector\Php54\Rector\Array_\LongArrayToShortArrayRector::class,
// avoid to add the PHPDOC "* @return never" since it can be confusing
Rector\TypeDeclaration\Rector\ClassMethod\ReturnNeverTypeRector::class,
]);
// tried to drop the () function that just returns the first argument
// so I tried just renaming this function to an empty space
// so it should do
// - id( new Asd() )
// + ( new Asd() )
// but this is not supported in Rector since it throws an exception
// $rectorConfig->ruleWithConfiguration(RenameFunctionRector::class, [
// 'id' => '',
// ]);
// So it was implemented in this way:
// find . -name "*.php" ! -name rector.php -exec sed -E -i 's/([ =.+,-\)])id\(/\1(/g' {} +
// trying to don't destroy my computer that does not have 16 cores but 12
// defaults:
// time: 120
// cores: 16
// jobSize: 20
// https://getrector.com/documentation/troubleshooting-parallel
$rectorConfig->parallel( 120, 12, 20 );
};

File Metadata

Mime Type
text/plain; charset=utf-8
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
175428
Default Alt Text
Rector.php configuration to support PHP 8.2 on Arcanist and Phorge (3 KB)

Event Timeline