diff --git a/rules-tests/TypeDeclaration/Rector/ClassMethod/AddParamStringTypeFromSprintfUseRector/Fixture/add_arrow_function.php.inc b/rules-tests/TypeDeclaration/Rector/ClassMethod/AddParamStringTypeFromSprintfUseRector/Fixture/add_arrow_function.php.inc new file mode 100644 index 00000000000..702d3b9509a --- /dev/null +++ b/rules-tests/TypeDeclaration/Rector/ClassMethod/AddParamStringTypeFromSprintfUseRector/Fixture/add_arrow_function.php.inc @@ -0,0 +1,27 @@ + sprintf('Hello %s', $name); + } +} + +?> +----- + sprintf('Hello %s', $name); + } +} + +?> diff --git a/rules-tests/TypeDeclaration/Rector/ClassMethod/AddParamStringTypeFromSprintfUseRector/Fixture/cover_closure.php.inc b/rules-tests/TypeDeclaration/Rector/ClassMethod/AddParamStringTypeFromSprintfUseRector/Fixture/cover_closure.php.inc new file mode 100644 index 00000000000..0ef5f6bd900 --- /dev/null +++ b/rules-tests/TypeDeclaration/Rector/ClassMethod/AddParamStringTypeFromSprintfUseRector/Fixture/cover_closure.php.inc @@ -0,0 +1,33 @@ + +----- + diff --git a/rules/TypeDeclaration/NodeAnalyzer/VariableInSprintfMaskMatcher.php b/rules/TypeDeclaration/NodeAnalyzer/VariableInSprintfMaskMatcher.php index 5c6a54cdbf8..91f2f697a38 100644 --- a/rules/TypeDeclaration/NodeAnalyzer/VariableInSprintfMaskMatcher.php +++ b/rules/TypeDeclaration/NodeAnalyzer/VariableInSprintfMaskMatcher.php @@ -6,6 +6,8 @@ use Nette\Utils\Strings; use PhpParser\Node\Arg; +use PhpParser\Node\Expr\ArrowFunction; +use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt\ClassMethod; @@ -28,9 +30,18 @@ public function __construct( } - public function matchMask(ClassMethod|Function_ $functionLike, string $variableName, string $mask): bool - { - $funcCalls = $this->betterNodeFinder->findInstancesOfScoped((array) $functionLike->stmts, FuncCall::class); + public function matchMask( + ClassMethod|Function_|Closure|ArrowFunction $functionLike, + string $variableName, + string $mask + ): bool { + if ($functionLike instanceof ArrowFunction) { + $stmts = [$functionLike->expr]; + } else { + $stmts = (array) $functionLike->stmts; + } + + $funcCalls = $this->betterNodeFinder->findInstancesOfScoped($stmts, FuncCall::class); $funcCalls = array_values( array_filter($funcCalls, fn (FuncCall $funcCall): bool => $this->nodeNameResolver->isName( $funcCall->name, diff --git a/rules/TypeDeclaration/Rector/ClassMethod/AddParamStringTypeFromSprintfUseRector.php b/rules/TypeDeclaration/Rector/ClassMethod/AddParamStringTypeFromSprintfUseRector.php index 4b6bdc6a10d..4260b60f0ab 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/AddParamStringTypeFromSprintfUseRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/AddParamStringTypeFromSprintfUseRector.php @@ -6,6 +6,8 @@ use PhpParser\Node; use PhpParser\Node\Expr; +use PhpParser\Node\Expr\ArrowFunction; +use PhpParser\Node\Expr\Closure; use PhpParser\Node\Identifier; use PhpParser\Node\Scalar\String_; use PhpParser\Node\Stmt\ClassMethod; @@ -61,15 +63,15 @@ public function formatMessage(string $name) */ public function getNodeTypes(): array { - return [ClassMethod::class, Function_::class]; + return [ClassMethod::class, Function_::class, Closure::class, ArrowFunction::class]; } /** - * @param ClassMethod|Function_ $node + * @param ClassMethod|Function_|Closure|ArrowFunction $node */ - public function refactor(Node $node): ClassMethod|Function_|null + public function refactor(Node $node): ClassMethod|Function_|Closure|ArrowFunction|null { - if ($node->stmts === null) { + if ($node instanceof ClassMethod && $node->stmts === null) { return null; } diff --git a/src/ChangesReporting/Output/GitHubOutputFormatter.php b/src/ChangesReporting/Output/GitHubOutputFormatter.php index 56633532276..6ba0e99aa7e 100644 --- a/src/ChangesReporting/Output/GitHubOutputFormatter.php +++ b/src/ChangesReporting/Output/GitHubOutputFormatter.php @@ -131,7 +131,11 @@ private function sanitizeAnnotationProperties(array $annotationProperties): stri ); $sanitizedProperties = array_map( - fn (string $key, string|int|null $value): string => sprintf('%s=%s', $key, $this->sanitizeAnnotationProperty($value)), + fn (string $key, string|int|null $value): string => sprintf( + '%s=%s', + $key, + $this->sanitizeAnnotationProperty($value) + ), array_keys($nonNullProperties), $nonNullProperties );