diff --git a/.gitattributes b/.gitattributes index f262cbb..0f05078 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,7 +1,6 @@ /.Build/ export-ignore /.editorconfig export-ignore /.eslintignore export-ignore -/eslint.config.json export-ignore /.gitattributes export-ignore /.github/ export-ignore /.gitignore export-ignore @@ -13,10 +12,12 @@ /Configuration/FunctionalTests.xml export-ignore /Configuration/UnitTests.xml export-ignore /Tests/ export-ignore +/eslint.config.json export-ignore /package.json export-ignore /phive.xml export-ignore /phpcs.xml export-ignore /phpstan-baseline.neon export-ignore /phpstan.neon export-ignore +/rector.php export-ignore /stylelint.config.js export-ignore /tools/ export-ignore binary diff --git a/composer.json b/composer.json index 09cfb95..22b4119 100644 --- a/composer.json +++ b/composer.json @@ -60,6 +60,8 @@ "seld/jsonlint": "^1.10.2", "spaze/phpstan-disallowed-calls": "^3.3", "squizlabs/php_codesniffer": "^3.9.2", + "ssch/typo3-rector": "^2.5.0", + "ssch/typo3-rector-testing-framework": "^2.0.1", "symfony/console": "^5.4 || ^6.4 || ^7.0", "symfony/translation": "^5.4 || ^6.4 || ^7.0", "symfony/yaml": "^5.4 || ^6.4 || ^7.0", @@ -195,6 +197,7 @@ "rm phpcs.xml", "rm phpstan-baseline.neon", "rm phpstan.neon", + "rm rector.php", "rm stylelint.config.js" ] }, diff --git a/rector.php b/rector.php new file mode 100644 index 0000000..ea32371 --- /dev/null +++ b/rector.php @@ -0,0 +1,103 @@ +withPaths([ + __DIR__ . '/Classes/', + __DIR__ . '/Configuration/', + __DIR__ . '/Tests/', + __DIR__ . '/ext_emconf.php', + __DIR__ . '/ext_localconf.php', + ]) + ->withPhpVersion(PhpVersion::PHP_74) + ->withPhpSets( + true + ) + // Note: We're only enabling a single set by default to improve performance. (Rector needs at least a single set to + // run.) + // + // You can temporarily enable more sets as needed. + ->withSets([ + // Rector sets + + // LevelSetList::UP_TO_PHP_53, + // LevelSetList::UP_TO_PHP_54, + // LevelSetList::UP_TO_PHP_55, + // LevelSetList::UP_TO_PHP_56, + // LevelSetList::UP_TO_PHP_70, + // LevelSetList::UP_TO_PHP_71, + // LevelSetList::UP_TO_PHP_72, + // LevelSetList::UP_TO_PHP_73, + // LevelSetList::UP_TO_PHP_74, + // LevelSetList::UP_TO_PHP_80, + // LevelSetList::UP_TO_PHP_81, + // LevelSetList::UP_TO_PHP_82, + // LevelSetList::UP_TO_PHP_83, + + // SetList::CODE_QUALITY, + // SetList::CODING_STYLE, + // SetList::DEAD_CODE, + // SetList::EARLY_RETURN, + // SetList::INSTANCEOF, + // SetList::NAMING, + // SetList::PRIVATIZATION, + // SetList::STRICT_BOOLEANS, + // SetList::TYPE_DECLARATION, + + // PHPUnit sets + + // PHPUnitSetList::PHPUNIT80_DMS, + // PHPUnitSetList::PHPUNIT_40, + // PHPUnitSetList::PHPUNIT_50, + // PHPUnitSetList::PHPUNIT_60, + // PHPUnitSetList::PHPUNIT_70, + // PHPUnitSetList::PHPUNIT_80, + // PHPUnitSetList::PHPUNIT_90, + // PHPUnitSetList::PHPUNIT_100, + // PHPUnitSetList::PHPUNIT_CODE_QUALITY, + + // TYPO3 Sets + // https://github.com/sabbelasichon/typo3-rector/blob/main/src/Set/Typo3LevelSetList.php + // https://github.com/sabbelasichon/typo3-rector/blob/main/src/Set/Typo3SetList.php + + Typo3SetList::CODE_QUALITY, + Typo3SetList::GENERAL, + + Typo3LevelSetList::UP_TO_TYPO3_11, + // Typo3LevelSetList::UP_TO_TYPO3_12, + + // TYPO3TestingFrameworkSetList::TYPO3_TESTING_FRAMEWORK_7, + ]) + // To have a better analysis from PHPStan, we teach it here some more things + ->withPHPStanConfigs([ + Typo3Option::PHPSTAN_FOR_RECTOR_PATH, + ]) + ->withRules([ + AddVoidReturnTypeWhereNoReturnRector::class, + ConvertImplicitVariablesToExplicitGlobalsRector::class, + ]) + ->withImportNames(true, true, false) + ->withConfiguredRule(ExtEmConfRector::class, [ + ExtEmConfRector::PHP_VERSION_CONSTRAINT => '7.4.0-8.3.99', + ExtEmConfRector::TYPO3_VERSION_CONSTRAINT => '11.5.4-12.4.99', + ExtEmConfRector::ADDITIONAL_VALUES_TO_BE_REMOVED => [], + ]) + ->withSkip([ + ]);