diff --git a/rules-tests/Php81/Rector/Array_/ArrayToFirstClassCallableRector/Fixture/skip_on_param.php.inc b/rules-tests/Php81/Rector/Array_/ArrayToFirstClassCallableRector/Fixture/skip_on_param.php.inc new file mode 100644 index 00000000000..4cdfe7e2d4c --- /dev/null +++ b/rules-tests/Php81/Rector/Array_/ArrayToFirstClassCallableRector/Fixture/skip_on_param.php.inc @@ -0,0 +1,14 @@ +getAttribute(AttributeKey::IS_PARAM_DEFAULT)) { + return null; + } + $args = [new VariadicPlaceholder()]; if ($callerExpr instanceof ClassConstFetch) { $type = $this->getType($callerExpr->class); diff --git a/src/DependencyInjection/LazyContainerFactory.php b/src/DependencyInjection/LazyContainerFactory.php index b86956123f3..9379d8cb6b2 100644 --- a/src/DependencyInjection/LazyContainerFactory.php +++ b/src/DependencyInjection/LazyContainerFactory.php @@ -125,6 +125,7 @@ use Rector\PhpParser\NodeVisitor\ContextNodeVisitor; use Rector\PhpParser\NodeVisitor\GlobalVariableNodeVisitor; use Rector\PhpParser\NodeVisitor\NameNodeVisitor; +use Rector\PhpParser\NodeVisitor\ParamDefaultNodeVisitor; use Rector\PhpParser\NodeVisitor\PhpVersionConditionNodeVisitor; use Rector\PhpParser\NodeVisitor\PropertyOrClassConstDefaultNodeVisitor; use Rector\PhpParser\NodeVisitor\StaticVariableNodeVisitor; @@ -253,6 +254,7 @@ final class LazyContainerFactory NameNodeVisitor::class, StaticVariableNodeVisitor::class, PropertyOrClassConstDefaultNodeVisitor::class, + ParamDefaultNodeVisitor::class, ClassConstFetchNodeVisitor::class, ]; diff --git a/src/NodeTypeResolver/Node/AttributeKey.php b/src/NodeTypeResolver/Node/AttributeKey.php index d3c93956907..fc29bc182fa 100644 --- a/src/NodeTypeResolver/Node/AttributeKey.php +++ b/src/NodeTypeResolver/Node/AttributeKey.php @@ -217,6 +217,11 @@ final class AttributeKey */ public const IS_PARAM_VAR = 'is_param_var'; + /** + * @var string + */ + public const IS_PARAM_DEFAULT = 'is_param_default'; + /** * @var string */ diff --git a/src/PhpParser/NodeVisitor/ParamDefaultNodeVisitor.php b/src/PhpParser/NodeVisitor/ParamDefaultNodeVisitor.php new file mode 100644 index 00000000000..9f48c62aac0 --- /dev/null +++ b/src/PhpParser/NodeVisitor/ParamDefaultNodeVisitor.php @@ -0,0 +1,35 @@ +default instanceof Expr) { + return null; + } + + SimpleNodeTraverser::decorateWithAttributeValue( + $node->default, + AttributeKey::IS_PARAM_DEFAULT, + true + ); + + return null; + } +}