paths([__DIR__ . '/app', __DIR__ . '/modules', __DIR__ . '/tests', __DIR__ . '/public']); // do you need to include constants, class aliases or custom autoloader? files listed will be executed $rectorConfig->bootstrapFiles([__DIR__ . '/vendor/codeigniter4/framework/system/Test/bootstrap.php']); // Define what rule sets will be applied $rectorConfig->sets([ SetList::PHP_81, SetList::TYPE_DECLARATION, SetList::CODE_QUALITY, SetList::CODING_STYLE, SetList::EARLY_RETURN, SetList::DEAD_CODE, ]); // auto import fully qualified class names $rectorConfig->importNames(); $rectorConfig->phpVersion(PhpVersion::PHP_81); $rectorConfig->skip([ // .mp3 files were somehow processed by rector, so skip all media files __DIR__ . '/public/media/*', __DIR__ . '/app/Views/errors/*', // skip specific generated files __DIR__ . '/modules/Admin/Language/*/PersonsTaxonomy.php', // skip rules from used sets ChangeOrIfReturnToEarlyReturnRector::class, ChangeOrIfContinueToMultiContinueRector::class, EncapsedStringsToSprintfRector::class, UnSpreadOperatorRector::class, ExplicitMethodCallOverMagicGetSetRector::class, RemoveExtraParametersRector::class, UnwrapFutureCompatibleIfPhpVersionRector::class, // skip rule in specific directory StringClassNameToClassConstantRector::class => [ __DIR__ . '/app/Language/*', __DIR__ . '/modules/*/Language/*', ], SymplifyQuoteEscapeRector::class => [__DIR__ . '/app/Language/*', __DIR__ . '/modules/*/Language/*'], NewlineAfterStatementRector::class => [__DIR__ . '/app/Views'], RemoveUnreachableStatementRector::class => [ __DIR__ . '/modules/Install/Controllers/InstallController.php', ], ChangeAndIfToEarlyReturnRector::class => [__DIR__ . '/modules/Install/Controllers/InstallController.php'], ]); // Path to phpstan with extensions, that PHPStan in Rector uses to determine types $rectorConfig->phpstanConfig(__DIR__ . '/phpstan.neon'); $rectorConfig->ruleWithConfiguration(ConsistentPregDelimiterRector::class, [ ConsistentPregDelimiterRector::DELIMITER => '~', ]); };