diff --git a/rector.php b/rector.php index a0b3fb7..7533a20 100644 --- a/rector.php +++ b/rector.php @@ -3,23 +3,7 @@ declare(strict_types=1); use Rector\Caching\ValueObject\Storage\FileCacheStorage; -use Rector\CodeQuality\Rector\BooleanAnd\SimplifyEmptyArrayCheckRector; -use Rector\CodeQuality\Rector\Class_\CompleteDynamicPropertiesRector; -use Rector\CodeQuality\Rector\Empty_\SimplifyEmptyCheckOnEmptyArrayRector; -use Rector\CodeQuality\Rector\Expression\InlineIfToExplicitIfRector; -use Rector\CodeQuality\Rector\Foreach_\UnusedForeachValueToArrayKeysRector; -use Rector\CodeQuality\Rector\FuncCall\ChangeArrayPushToArrayAssignRector; -use Rector\CodeQuality\Rector\FuncCall\SimplifyRegexPatternRector; -use Rector\CodeQuality\Rector\FuncCall\SimplifyStrposLowerRector; -use Rector\CodeQuality\Rector\FuncCall\SingleInArrayToCompareRector; use Rector\CodeQuality\Rector\FunctionLike\SimplifyUselessVariableRector; -use Rector\CodeQuality\Rector\If_\CombineIfRector; -use Rector\CodeQuality\Rector\If_\ExplicitBoolCompareRector; -use Rector\CodeQuality\Rector\If_\ShortenElseIfRector; -use Rector\CodeQuality\Rector\If_\SimplifyIfElseToTernaryRector; -use Rector\CodeQuality\Rector\If_\SimplifyIfReturnBoolRector; -use Rector\CodeQuality\Rector\Ternary\TernaryEmptyArrayArrayDimFetchToCoalesceRector; -use Rector\CodeQuality\Rector\Ternary\UnnecessaryTernaryExpressionRector; use Rector\CodingStyle\Rector\ClassMethod\FuncGetArgsToVariadicParamRector; use Rector\CodingStyle\Rector\ClassMethod\MakeInheritedMethodVisibilitySameAsParentRector; use Rector\CodingStyle\Rector\FuncCall\CountArrayToEmptyArrayComparisonRector; @@ -32,113 +16,53 @@ use Rector\EarlyReturn\Rector\Return_\PreparedValueToEarlyReturnRector; use Rector\Php55\Rector\String_\StringClassNameToClassConstantRector; use Rector\Php73\Rector\FuncCall\StringifyStrNeedlesRector; -use Rector\PHPUnit\AnnotationsToAttributes\Rector\Class_\AnnotationWithValueToAttributeRector; -use Rector\PHPUnit\CodeQuality\Rector\Class_\YieldDataProviderRector; -use Rector\PHPUnit\Set\PHPUnitSetList; use Rector\Privatization\Rector\Property\PrivatizeFinalClassPropertyRector; -use Rector\Set\ValueObject\LevelSetList; -use Rector\Set\ValueObject\SetList; use Rector\Strict\Rector\Empty_\DisallowedEmptyRuleFixerRector; use Rector\TypeDeclaration\Rector\Empty_\EmptyOnNullableObjectToInstanceOfRector; use Rector\TypeDeclaration\Rector\Property\TypedPropertyFromAssignsRector; -use Rector\ValueObject\PhpVersion; -return static function (RectorConfig $rectorConfig): void { - $rectorConfig->sets([ - SetList::DEAD_CODE, - LevelSetList::UP_TO_PHP_74, - PHPUnitSetList::PHPUNIT_CODE_QUALITY, - PHPUnitSetList::PHPUNIT_100, - ]); - - $rectorConfig->parallel(); - - // Github action cache - $rectorConfig->cacheClass(FileCacheStorage::class); - if (is_dir('/tmp')) { - $rectorConfig->cacheDirectory('/tmp/rector'); - } - - // The paths to refactor (can also be supplied with CLI arguments) - $rectorConfig->paths([ - __DIR__ . '/src/', - ]); - - // Include Composer's autoload - required for global execution, remove if running locally - $rectorConfig->autoloadPaths([ +return RectorConfig::configure() + ->withPhpSets(php81: true) + ->withPreparedSets(deadCode: true, codeQuality: true) + ->withComposerBased(phpunit: true) + ->withParallel(120, 8, 10) + ->withCache( + is_dir('/tmp') ? '/tmp/rector' : null, + FileCacheStorage::class, + ) + ->withPaths([ + __DIR__ . '/src', + ]) + ->withAutoloadPaths([ __DIR__ . '/vendor/autoload.php', - ]); - - // Do you need to include constants, class aliases, or a custom autoloader? - $rectorConfig->bootstrapFiles([ - realpath(getcwd()) . '/vendor/codeigniter4/framework/system/Test/bootstrap.php', - ]); - - if (is_file(__DIR__ . '/phpstan.neon.dist')) { - $rectorConfig->phpstanConfig(__DIR__ . '/phpstan.neon.dist'); - } - - // Set the target version for refactoring - $rectorConfig->phpVersion(PhpVersion::PHP_74); - - // Auto-import fully qualified class names - $rectorConfig->importNames(); - - // Are there files or rules you need to skip? - $rectorConfig->skip([ - __DIR__ . '/src/Views', - + ]) + ->withBootstrapFiles([ + __DIR__ . '/vendor/codeigniter4/framework/system/Test/bootstrap.php', + ]) + ->withPHPStanConfigs([ + __DIR__ . '/phpstan.neon.dist', + ]) + ->withImportNames(removeUnusedImports: true) + ->withSkip([ StringifyStrNeedlesRector::class, - YieldDataProviderRector::class, - - // Note: requires php 8 - RemoveUnusedPromotedPropertyRector::class, - AnnotationWithValueToAttributeRector::class, - - // May load view files directly when detecting classes + RemoveUnusedPromotedPropertyRector::class, // Note: requires php 8 + ]) + ->withRules([ + ChangeIfElseValueAssignToEarlyReturnRector::class, + ChangeNestedForeachIfsToEarlyContinueRector::class, + CountArrayToEmptyArrayComparisonRector::class, + DisallowedEmptyRuleFixerRector::class, + EmptyOnNullableObjectToInstanceOfRector::class, + FuncGetArgsToVariadicParamRector::class, + MakeInheritedMethodVisibilitySameAsParentRector::class, + PreparedValueToEarlyReturnRector::class, + PrivatizeFinalClassPropertyRector::class, + RemoveAlwaysElseRector::class, + SimplifyUselessVariableRector::class, StringClassNameToClassConstantRector::class, + VersionCompareFuncCallToConstantRector::class, + ]) + ->withConfiguredRule(TypedPropertyFromAssignsRector::class, [ + // Allow public property inlining when BC breaks are acceptable. + TypedPropertyFromAssignsRector::INLINE_PUBLIC => true, ]); - - // auto import fully qualified class names - $rectorConfig->importNames(); - - $rectorConfig->rule(SimplifyUselessVariableRector::class); - $rectorConfig->rule(RemoveAlwaysElseRector::class); - $rectorConfig->rule(CountArrayToEmptyArrayComparisonRector::class); - $rectorConfig->rule(ChangeNestedForeachIfsToEarlyContinueRector::class); - $rectorConfig->rule(ChangeIfElseValueAssignToEarlyReturnRector::class); - $rectorConfig->rule(SimplifyStrposLowerRector::class); - $rectorConfig->rule(CombineIfRector::class); - $rectorConfig->rule(SimplifyIfReturnBoolRector::class); - $rectorConfig->rule(InlineIfToExplicitIfRector::class); - $rectorConfig->rule(PreparedValueToEarlyReturnRector::class); - $rectorConfig->rule(ShortenElseIfRector::class); - $rectorConfig->rule(SimplifyIfElseToTernaryRector::class); - $rectorConfig->rule(UnusedForeachValueToArrayKeysRector::class); - $rectorConfig->rule(ChangeArrayPushToArrayAssignRector::class); - $rectorConfig->rule(UnnecessaryTernaryExpressionRector::class); - $rectorConfig->rule(SimplifyRegexPatternRector::class); - $rectorConfig->rule(FuncGetArgsToVariadicParamRector::class); - $rectorConfig->rule(MakeInheritedMethodVisibilitySameAsParentRector::class); - $rectorConfig->rule(SimplifyEmptyArrayCheckRector::class); - $rectorConfig->rule(SimplifyEmptyCheckOnEmptyArrayRector::class); - $rectorConfig->rule(TernaryEmptyArrayArrayDimFetchToCoalesceRector::class); - $rectorConfig->rule(EmptyOnNullableObjectToInstanceOfRector::class); - $rectorConfig->rule(DisallowedEmptyRuleFixerRector::class); - $rectorConfig - ->ruleWithConfiguration(TypedPropertyFromAssignsRector::class, [ - /** - * The INLINE_PUBLIC value is default to false to avoid BC break, - * if you use for libraries and want to preserve BC break, you don't - * need to configure it, as it included in LevelSetList::UP_TO_PHP_74 - * Set to true for projects that allow BC break - */ - TypedPropertyFromAssignsRector::INLINE_PUBLIC => true, - ]); - $rectorConfig->rule(StringClassNameToClassConstantRector::class); - $rectorConfig->rule(PrivatizeFinalClassPropertyRector::class); - $rectorConfig->rule(CompleteDynamicPropertiesRector::class); - $rectorConfig->rule(SingleInArrayToCompareRector::class); - $rectorConfig->rule(VersionCompareFuncCallToConstantRector::class); - $rectorConfig->rule(ExplicitBoolCompareRector::class); -}; diff --git a/src/Template/composer-unused.php b/src/Template/composer-unused.php index 6ba235a..3f9b7ef 100644 --- a/src/Template/composer-unused.php +++ b/src/Template/composer-unused.php @@ -3,13 +3,9 @@ declare(strict_types=1); use ComposerUnused\ComposerUnused\Configuration\Configuration; -use ComposerUnused\ComposerUnused\Configuration\NamedFilter; -use ComposerUnused\ComposerUnused\Configuration\PatternFilter; use Webmozart\Glob\Glob; return static fn (Configuration $config): Configuration => $config - // ->addNamedFilter(NamedFilter::fromString('symfony/config')) - // ->addPatternFilter(PatternFilter::fromString('/symfony-.*/')) ->setAdditionalFilesFor('codeigniter4/framework', [ ...Glob::glob(__DIR__ . '/vendor/codeigniter4/framework/system/Helpers/*.php'), ]); diff --git a/src/Template/rector.php b/src/Template/rector.php index 8d44318..48cd27d 100644 --- a/src/Template/rector.php +++ b/src/Template/rector.php @@ -3,23 +3,7 @@ declare(strict_types=1); use Rector\Caching\ValueObject\Storage\FileCacheStorage; -use Rector\CodeQuality\Rector\BooleanAnd\SimplifyEmptyArrayCheckRector; -use Rector\CodeQuality\Rector\Class_\CompleteDynamicPropertiesRector; -use Rector\CodeQuality\Rector\Empty_\SimplifyEmptyCheckOnEmptyArrayRector; -use Rector\CodeQuality\Rector\Expression\InlineIfToExplicitIfRector; -use Rector\CodeQuality\Rector\Foreach_\UnusedForeachValueToArrayKeysRector; -use Rector\CodeQuality\Rector\FuncCall\ChangeArrayPushToArrayAssignRector; -use Rector\CodeQuality\Rector\FuncCall\SimplifyRegexPatternRector; -use Rector\CodeQuality\Rector\FuncCall\SimplifyStrposLowerRector; -use Rector\CodeQuality\Rector\FuncCall\SingleInArrayToCompareRector; use Rector\CodeQuality\Rector\FunctionLike\SimplifyUselessVariableRector; -use Rector\CodeQuality\Rector\If_\CombineIfRector; -use Rector\CodeQuality\Rector\If_\ExplicitBoolCompareRector; -use Rector\CodeQuality\Rector\If_\ShortenElseIfRector; -use Rector\CodeQuality\Rector\If_\SimplifyIfElseToTernaryRector; -use Rector\CodeQuality\Rector\If_\SimplifyIfReturnBoolRector; -use Rector\CodeQuality\Rector\Ternary\TernaryEmptyArrayArrayDimFetchToCoalesceRector; -use Rector\CodeQuality\Rector\Ternary\UnnecessaryTernaryExpressionRector; use Rector\CodingStyle\Rector\ClassMethod\FuncGetArgsToVariadicParamRector; use Rector\CodingStyle\Rector\ClassMethod\MakeInheritedMethodVisibilitySameAsParentRector; use Rector\CodingStyle\Rector\FuncCall\CountArrayToEmptyArrayComparisonRector; @@ -32,114 +16,55 @@ use Rector\EarlyReturn\Rector\Return_\PreparedValueToEarlyReturnRector; use Rector\Php55\Rector\String_\StringClassNameToClassConstantRector; use Rector\Php73\Rector\FuncCall\StringifyStrNeedlesRector; -use Rector\PHPUnit\AnnotationsToAttributes\Rector\Class_\AnnotationWithValueToAttributeRector; -use Rector\PHPUnit\CodeQuality\Rector\Class_\YieldDataProviderRector; -use Rector\PHPUnit\Set\PHPUnitSetList; use Rector\Privatization\Rector\Property\PrivatizeFinalClassPropertyRector; -use Rector\Set\ValueObject\LevelSetList; -use Rector\Set\ValueObject\SetList; use Rector\Strict\Rector\Empty_\DisallowedEmptyRuleFixerRector; use Rector\TypeDeclaration\Rector\Empty_\EmptyOnNullableObjectToInstanceOfRector; use Rector\TypeDeclaration\Rector\Property\TypedPropertyFromAssignsRector; -use Rector\ValueObject\PhpVersion; -return static function (RectorConfig $rectorConfig): void { - $rectorConfig->sets([ - SetList::DEAD_CODE, - LevelSetList::UP_TO_PHP_81, - PHPUnitSetList::PHPUNIT_CODE_QUALITY, - PHPUnitSetList::PHPUNIT_100, - ]); - - $rectorConfig->parallel(); - - // Github action cache - $rectorConfig->cacheClass(FileCacheStorage::class); - if (is_dir('/tmp')) { - $rectorConfig->cacheDirectory('/tmp/rector'); - } - - // The paths to refactor (can also be supplied with CLI arguments) - $rectorConfig->paths([ - __DIR__ . '/app/', - __DIR__ . '/tests/', - ]); - - // Include Composer's autoload - required for global execution, remove if running locally - $rectorConfig->autoloadPaths([ +return RectorConfig::configure() + ->withPhpSets(php81: true) + ->withPreparedSets(deadCode: true, codeQuality: true) + ->withComposerBased(phpunit: true) + ->withParallel(120, 8, 10) + ->withCache( + is_dir('/tmp') ? '/tmp/rector' : null, + FileCacheStorage::class, + ) + ->withPaths([ + __DIR__ . '/app', + __DIR__ . '/tests', + ]) + ->withAutoloadPaths([ __DIR__ . '/vendor/autoload.php', - ]); - - // Do you need to include constants, class aliases, or a custom autoloader? - $rectorConfig->bootstrapFiles([ - realpath(getcwd()) . '/vendor/codeigniter4/framework/system/Test/bootstrap.php', - ]); - - if (is_file(__DIR__ . '/phpstan.neon.dist')) { - $rectorConfig->phpstanConfig(__DIR__ . '/phpstan.neon.dist'); - } - - // Set the target version for refactoring - $rectorConfig->phpVersion(PhpVersion::PHP_81); - - // Auto-import fully qualified class names - $rectorConfig->importNames(); - - // Are there files or rules you need to skip? - $rectorConfig->skip([ + ]) + ->withBootstrapFiles([ + __DIR__ . '/vendor/codeigniter4/framework/system/Test/bootstrap.php', + ]) + ->withPHPStanConfigs([ + __DIR__ . '/phpstan.neon.dist', + ]) + ->withImportNames(removeUnusedImports: true) + ->withSkip([ __DIR__ . '/app/Views', - StringifyStrNeedlesRector::class, - YieldDataProviderRector::class, - - // Note: requires php 8 - RemoveUnusedPromotedPropertyRector::class, - AnnotationWithValueToAttributeRector::class, - - // May load view files directly when detecting classes + RemoveUnusedPromotedPropertyRector::class, // Note: requires php 8 + ]) + ->withRules([ + ChangeIfElseValueAssignToEarlyReturnRector::class, + ChangeNestedForeachIfsToEarlyContinueRector::class, + CountArrayToEmptyArrayComparisonRector::class, + DisallowedEmptyRuleFixerRector::class, + EmptyOnNullableObjectToInstanceOfRector::class, + FuncGetArgsToVariadicParamRector::class, + MakeInheritedMethodVisibilitySameAsParentRector::class, + PreparedValueToEarlyReturnRector::class, + PrivatizeFinalClassPropertyRector::class, + RemoveAlwaysElseRector::class, + SimplifyUselessVariableRector::class, StringClassNameToClassConstantRector::class, + VersionCompareFuncCallToConstantRector::class, + ]) + ->withConfiguredRule(TypedPropertyFromAssignsRector::class, [ + // Allow public property inlining when BC breaks are acceptable. + TypedPropertyFromAssignsRector::INLINE_PUBLIC => true, ]); - - // auto import fully qualified class names - $rectorConfig->importNames(); - - $rectorConfig->rule(SimplifyUselessVariableRector::class); - $rectorConfig->rule(RemoveAlwaysElseRector::class); - $rectorConfig->rule(CountArrayToEmptyArrayComparisonRector::class); - $rectorConfig->rule(ChangeNestedForeachIfsToEarlyContinueRector::class); - $rectorConfig->rule(ChangeIfElseValueAssignToEarlyReturnRector::class); - $rectorConfig->rule(SimplifyStrposLowerRector::class); - $rectorConfig->rule(CombineIfRector::class); - $rectorConfig->rule(SimplifyIfReturnBoolRector::class); - $rectorConfig->rule(InlineIfToExplicitIfRector::class); - $rectorConfig->rule(PreparedValueToEarlyReturnRector::class); - $rectorConfig->rule(ShortenElseIfRector::class); - $rectorConfig->rule(SimplifyIfElseToTernaryRector::class); - $rectorConfig->rule(UnusedForeachValueToArrayKeysRector::class); - $rectorConfig->rule(ChangeArrayPushToArrayAssignRector::class); - $rectorConfig->rule(UnnecessaryTernaryExpressionRector::class); - $rectorConfig->rule(SimplifyRegexPatternRector::class); - $rectorConfig->rule(FuncGetArgsToVariadicParamRector::class); - $rectorConfig->rule(MakeInheritedMethodVisibilitySameAsParentRector::class); - $rectorConfig->rule(SimplifyEmptyArrayCheckRector::class); - $rectorConfig->rule(SimplifyEmptyCheckOnEmptyArrayRector::class); - $rectorConfig->rule(TernaryEmptyArrayArrayDimFetchToCoalesceRector::class); - $rectorConfig->rule(EmptyOnNullableObjectToInstanceOfRector::class); - $rectorConfig->rule(DisallowedEmptyRuleFixerRector::class); - $rectorConfig - ->ruleWithConfiguration(TypedPropertyFromAssignsRector::class, [ - /** - * The INLINE_PUBLIC value is default to false to avoid BC break, - * if you use for libraries and want to preserve BC break, you don't - * need to configure it, as it included in LevelSetList::UP_TO_PHP_74 - * Set to true for projects that allow BC break - */ - TypedPropertyFromAssignsRector::INLINE_PUBLIC => true, - ]); - $rectorConfig->rule(StringClassNameToClassConstantRector::class); - $rectorConfig->rule(PrivatizeFinalClassPropertyRector::class); - $rectorConfig->rule(CompleteDynamicPropertiesRector::class); - $rectorConfig->rule(SingleInArrayToCompareRector::class); - $rectorConfig->rule(VersionCompareFuncCallToConstantRector::class); - $rectorConfig->rule(ExplicitBoolCompareRector::class); -};