diff --git a/rules-tests/Php74/Rector/Closure/ClosureToArrowFunctionRector/Fixture/skip_inside_attribute.php.inc b/rules-tests/Php74/Rector/Closure/ClosureToArrowFunctionRector/Fixture/skip_inside_attribute.php.inc new file mode 100644 index 00000000000..72e9b75296c --- /dev/null +++ b/rules-tests/Php74/Rector/Closure/ClosureToArrowFunctionRector/Fixture/skip_inside_attribute.php.inc @@ -0,0 +1,14 @@ +getAttribute(AttributeKey::IS_CLOSURE_IN_ATTRIBUTE) === true) { + return null; + } + $attributes = $node->getAttributes(); unset($attributes[AttributeKey::ORIGINAL_NODE]); diff --git a/src/NodeTypeResolver/Node/AttributeKey.php b/src/NodeTypeResolver/Node/AttributeKey.php index 46a6d5a0037..6febed2c55f 100644 --- a/src/NodeTypeResolver/Node/AttributeKey.php +++ b/src/NodeTypeResolver/Node/AttributeKey.php @@ -187,6 +187,11 @@ final class AttributeKey */ public const IS_ARRAY_IN_ATTRIBUTE = 'is_array_in_attribute'; + /** + * @var string + */ + public const IS_CLOSURE_IN_ATTRIBUTE = 'is_closure_in_attribute'; + /** * @var string */ diff --git a/src/PhpParser/NodeVisitor/ContextNodeVisitor.php b/src/PhpParser/NodeVisitor/ContextNodeVisitor.php index 37d187aeb2c..4d147b6a9cb 100644 --- a/src/PhpParser/NodeVisitor/ContextNodeVisitor.php +++ b/src/PhpParser/NodeVisitor/ContextNodeVisitor.php @@ -145,6 +145,10 @@ static function (Node $subNode): null { $subNode->setAttribute(AttributeKey::IS_ARRAY_IN_ATTRIBUTE, true); } + if ($subNode instanceof Closure) { + $subNode->setAttribute(AttributeKey::IS_CLOSURE_IN_ATTRIBUTE, true); + } + return null; } );