diff --git a/config/set/php81.php b/config/set/php81.php index a2f856a1c9c..2a082ba9922 100644 --- a/config/set/php81.php +++ b/config/set/php81.php @@ -2,6 +2,7 @@ declare(strict_types=1); +use Rector\CodingStyle\Rector\FunctionLike\FunctionLikeToFirstClassCallableRector; use Rector\Config\RectorConfig; use Rector\Php81\Rector\Array_\FirstClassCallableRector; use Rector\Php81\Rector\Class_\MyCLabsClassToEnumRector; @@ -26,7 +27,10 @@ SpatieEnumMethodCallToEnumConstRector::class, NullToStrictStringFuncCallArgRector::class, NullToStrictIntPregSlitFuncCallLimitArgRector::class, + // array of local method call FirstClassCallableRector::class, + // closure/arrow function + FunctionLikeToFirstClassCallableRector::class, RemoveReflectionSetAccessibleCallsRector::class, ]); }; diff --git a/rules-tests/CodingStyle/Rector/FunctionLike/FunctionLikeToFirstClassCallableRector/Fixture/array_map.php.inc b/rules-tests/CodingStyle/Rector/FunctionLike/FunctionLikeToFirstClassCallableRector/Fixture/array_map.php.inc new file mode 100644 index 00000000000..199f05c1b53 --- /dev/null +++ b/rules-tests/CodingStyle/Rector/FunctionLike/FunctionLikeToFirstClassCallableRector/Fixture/array_map.php.inc @@ -0,0 +1,27 @@ + strlen($x), $items); + } +} + +?> +----- + diff --git a/rules-tests/CodingStyle/Rector/FunctionLike/FunctionLikeToFirstClassCallableRector/Fixture/multiple_params.php.inc b/rules-tests/CodingStyle/Rector/FunctionLike/FunctionLikeToFirstClassCallableRector/Fixture/multiple_params.php.inc new file mode 100644 index 00000000000..7a1c1c897d7 --- /dev/null +++ b/rules-tests/CodingStyle/Rector/FunctionLike/FunctionLikeToFirstClassCallableRector/Fixture/multiple_params.php.inc @@ -0,0 +1,27 @@ + strcmp($a, $b)); + } +} + +?> +----- + diff --git a/rules/CodingStyle/Rector/FunctionLike/FunctionLikeToFirstClassCallableRector.php b/rules/CodingStyle/Rector/FunctionLike/FunctionLikeToFirstClassCallableRector.php index f08c840a2c0..c2c3925614d 100644 --- a/rules/CodingStyle/Rector/FunctionLike/FunctionLikeToFirstClassCallableRector.php +++ b/rules/CodingStyle/Rector/FunctionLike/FunctionLikeToFirstClassCallableRector.php @@ -31,10 +31,12 @@ final class FunctionLikeToFirstClassCallableRector extends AbstractRector public function getRuleDefinition(): RuleDefinition { return new RuleDefinition( - 'converts function like to first class callable', + 'Converts arrow function and closures to first class callable', [new CodeSample( <<<'CODE_SAMPLE' -function ($parameter) { return Call::to($parameter); } +function ($parameter) { + return Call::to($parameter); +} CODE_SAMPLE , <<<'CODE_SAMPLE' diff --git a/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php b/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php index 281485e2260..ab7757d8607 100644 --- a/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php +++ b/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php @@ -139,7 +139,7 @@ private function hasCallLikeInAssignExpr(Expr $expr): bool { return (bool) $this->betterNodeFinder->findFirst( $expr, - fn (Node $subNode): bool => $this->sideEffectNodeDetector->detectCallExpr($subNode) + $this->sideEffectNodeDetector->detectCallExpr(...) ); } diff --git a/rules/DeadCode/SideEffect/SideEffectNodeDetector.php b/rules/DeadCode/SideEffect/SideEffectNodeDetector.php index 79929f7343f..463c2464a70 100644 --- a/rules/DeadCode/SideEffect/SideEffectNodeDetector.php +++ b/rules/DeadCode/SideEffect/SideEffectNodeDetector.php @@ -50,7 +50,7 @@ public function detect(Expr $expr): bool return (bool) $this->betterNodeFinder->findFirst( $expr, - fn (Node $subNode): bool => $this->detectCallExpr($subNode) + $this->detectCallExpr(...) ); } diff --git a/rules/Php81/NodeFactory/EnumFactory.php b/rules/Php81/NodeFactory/EnumFactory.php index 6bf78fecfce..85f104b0952 100644 --- a/rules/Php81/NodeFactory/EnumFactory.php +++ b/rules/Php81/NodeFactory/EnumFactory.php @@ -221,7 +221,7 @@ private function collectMappings(array $items, array $mapping): array */ private function getIdentifierTypeFromMappings(array $mapping): string { - $callableGetType = static fn ($value): string => gettype($value); + $callableGetType = gettype(...); $valueTypes = array_map($callableGetType, $mapping); $uniqueValueTypes = array_unique($valueTypes); if (count($uniqueValueTypes) === 1) { diff --git a/src/Configuration/RectorConfigBuilder.php b/src/Configuration/RectorConfigBuilder.php index 13e5e3b2512..8dba62ceb95 100644 --- a/src/Configuration/RectorConfigBuilder.php +++ b/src/Configuration/RectorConfigBuilder.php @@ -191,8 +191,7 @@ public function __invoke(RectorConfig $rectorConfig): void { if ($this->setGroups !== [] || $this->setProviders !== []) { $setProviderCollector = new SetProviderCollector(array_map( - static fn (string $setProvider): SetProviderInterface => - $rectorConfig->make($setProvider), + $rectorConfig->make(...), \array_keys($this->setProviders) )); diff --git a/src/FileSystem/FileAndDirectoryFilter.php b/src/FileSystem/FileAndDirectoryFilter.php index a9adb1d47b8..641eea46b76 100644 --- a/src/FileSystem/FileAndDirectoryFilter.php +++ b/src/FileSystem/FileAndDirectoryFilter.php @@ -15,7 +15,7 @@ final class FileAndDirectoryFilter */ public function filterDirectories(array $filesAndDirectories): array { - $directories = array_filter($filesAndDirectories, static fn (string $path): bool => is_dir($path)); + $directories = array_filter($filesAndDirectories, is_dir(...)); return array_values($directories); } @@ -26,7 +26,7 @@ public function filterDirectories(array $filesAndDirectories): array */ public function filterFiles(array $filesAndDirectories): array { - $files = array_filter($filesAndDirectories, static fn (string $path): bool => is_file($path)); + $files = array_filter($filesAndDirectories, is_file(...)); return array_values($files); } diff --git a/src/FileSystem/FilesystemTweaker.php b/src/FileSystem/FilesystemTweaker.php index b181f7972a9..07804e2efa3 100644 --- a/src/FileSystem/FilesystemTweaker.php +++ b/src/FileSystem/FilesystemTweaker.php @@ -56,6 +56,6 @@ private function foundInGlob(string $path): array /** @var string[] $paths */ $paths = (array) glob($path); - return array_filter($paths, static fn (string $path): bool => file_exists($path)); + return array_filter($paths, file_exists(...)); } } diff --git a/src/Util/ArrayParametersMerger.php b/src/Util/ArrayParametersMerger.php index 09a28052d90..1abab11d1a1 100644 --- a/src/Util/ArrayParametersMerger.php +++ b/src/Util/ArrayParametersMerger.php @@ -18,7 +18,7 @@ public function merge(mixed $left, mixed $right): mixed return $this->mergeLeftToRightWithCallable( $left, $right, - fn ($leftValue, $rightValue): mixed => $this->merge($leftValue, $rightValue) + $this->merge(...) ); }