diff --git a/src/Parser/VariadicMethodsVisitor.php b/src/Parser/VariadicMethodsVisitor.php index 91411a623c..9a63e364fd 100644 --- a/src/Parser/VariadicMethodsVisitor.php +++ b/src/Parser/VariadicMethodsVisitor.php @@ -6,10 +6,11 @@ use PhpParser\Node\Name; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\NodeVisitorAbstract; -use PHPStan\Node\AnonymousClassNode; use PHPStan\Reflection\ParametersAcceptor; use PHPStan\TrinaryLogic; use function array_key_exists; +use function array_pop; +use function implode; use function in_array; final class VariadicMethodsVisitor extends NodeVisitorAbstract @@ -21,9 +22,7 @@ final class VariadicMethodsVisitor extends NodeVisitorAbstract private ?string $inClassLike = null; - /** - * @var array - */ + /** @var array */ private array $classStack = []; private ?string $inMethod = null; diff --git a/tests/PHPStan/Parser/ParserTest.php b/tests/PHPStan/Parser/ParserTest.php index d4bf247522..8b73d045b8 100644 --- a/tests/PHPStan/Parser/ParserTest.php +++ b/tests/PHPStan/Parser/ParserTest.php @@ -21,6 +21,7 @@ public function dataVariadicCallLikes(): iterable 'VariadicFunctions\variadic_fn1' => TrinaryLogic::createYes(), 'VariadicFunctions\nonvariadic' => TrinaryLogic::createNo(), 'VariadicFunctions\maybe_variadic_fn1' => TrinaryLogic::createNo(), + 'VariadicFunctions\implicit_variadic_fn1' => TrinaryLogic::createYes(), ], ]; @@ -60,7 +61,7 @@ public function dataVariadicCallLikes(): iterable 'variadic_fn1' => TrinaryLogic::createNo(), // variadicness later on detected via reflection 'implicit_variadic_fn1' => TrinaryLogic::createYes(), ], - ] + ], ]; } diff --git a/tests/PHPStan/Parser/data/variadic-functions.php b/tests/PHPStan/Parser/data/variadic-functions.php index c07a3a34b7..d1a572e1e0 100644 --- a/tests/PHPStan/Parser/data/variadic-functions.php +++ b/tests/PHPStan/Parser/data/variadic-functions.php @@ -25,3 +25,7 @@ function maybe_variadic_fn1(...$v) $fn2 = function ($x) use ($y) { return $x + $y; }; + +function implicit_variadic_fn1() { + $args = func_get_args(); +}