From 7db3faedb4d9dfd9317ae2768ec5cc7faa9e1cc2 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Mon, 14 Sep 2026 02:30:48 +0700 Subject: [PATCH 1/2] Bump PHPStan to ^2.2.14, PHP-Parser to ^5.9 and regenerate preload --- build/target-repository/composer.json | 2 +- composer.json | 4 ++-- preload-split-package.php | 1 + preload.php | 1 + 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/build/target-repository/composer.json b/build/target-repository/composer.json index 8fd229e9bac..253fc01cdc8 100644 --- a/build/target-repository/composer.json +++ b/build/target-repository/composer.json @@ -9,7 +9,7 @@ ], "require": { "php": "^7.4|^8.0", - "phpstan/phpstan": "^2.2.12" + "phpstan/phpstan": "^2.2.14" }, "autoload": { "files": [ diff --git a/composer.json b/composer.json index c5e741a53e3..3f664d8e243 100644 --- a/composer.json +++ b/composer.json @@ -21,10 +21,10 @@ "entropy/entropy": "^0.4.12", "fidry/cpu-core-counter": "^1.1", "nette/utils": "^4.1.4", - "nikic/php-parser": "^5.8", + "nikic/php-parser": "^5.9", "ondram/ci-detector": "^4.2", "phpstan/phpdoc-parser": "^2.3.3", - "phpstan/phpstan": "^2.2.12", + "phpstan/phpstan": "^2.2.14", "react/child-process": "^0.6.5", "react/event-loop": "^1.6", "react/socket": "^1.17", diff --git a/preload-split-package.php b/preload-split-package.php index f97fcaf15b3..55adf2ab3ca 100644 --- a/preload-split-package.php +++ b/preload-split-package.php @@ -99,6 +99,7 @@ function isPHPStanTestPreloaded(): bool require_once __DIR__ . '/../../../vendor/nikic/php-parser/lib/PhpParser/Modifiers.php'; require_once __DIR__ . '/../../../vendor/nikic/php-parser/lib/PhpParser/NameContext.php'; require_once __DIR__ . '/../../../vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php'; +require_once __DIR__ . '/../../../vendor/nikic/php-parser/lib/PhpParser/Node/ArgPlaceholder.php'; require_once __DIR__ . '/../../../vendor/nikic/php-parser/lib/PhpParser/Node/ArrayItem.php'; require_once __DIR__ . '/../../../vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php'; require_once __DIR__ . '/../../../vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php'; diff --git a/preload.php b/preload.php index af71c9533a0..b0e5eeaa067 100644 --- a/preload.php +++ b/preload.php @@ -99,6 +99,7 @@ function isPHPStanTestPreloaded(): bool require_once __DIR__ . '/vendor/nikic/php-parser/lib/PhpParser/Modifiers.php'; require_once __DIR__ . '/vendor/nikic/php-parser/lib/PhpParser/NameContext.php'; require_once __DIR__ . '/vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php'; +require_once __DIR__ . '/vendor/nikic/php-parser/lib/PhpParser/Node/ArgPlaceholder.php'; require_once __DIR__ . '/vendor/nikic/php-parser/lib/PhpParser/Node/ArrayItem.php'; require_once __DIR__ . '/vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php'; require_once __DIR__ . '/vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php'; From 26ef6f2a3d14aa45a66449475eb5fa05f84110b0 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Mon, 14 Sep 2026 02:34:55 +0700 Subject: [PATCH 2/2] fix compatible code --- .../Removing/Rector/ClassMethod/ArgumentRemoverRector.php | 3 ++- rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php | 5 +++-- src/NodeAnalyzer/CompactFuncCallAnalyzer.php | 7 ++++--- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/rules/Removing/Rector/ClassMethod/ArgumentRemoverRector.php b/rules/Removing/Rector/ClassMethod/ArgumentRemoverRector.php index 138e0abbfde..753ffb7f479 100644 --- a/rules/Removing/Rector/ClassMethod/ArgumentRemoverRector.php +++ b/rules/Removing/Rector/ClassMethod/ArgumentRemoverRector.php @@ -6,6 +6,7 @@ use PhpParser\Node; use PhpParser\Node\Arg; +use PhpParser\Node\ArgPlaceholder; use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\StaticCall; use PhpParser\Node\Stmt\ClassMethod; @@ -158,7 +159,7 @@ private function removeByName(ClassMethod|StaticCall|MethodCall $node, int $posi /** * @param mixed[] $values */ - private function isArgumentValueMatch(Arg|VariadicPlaceholder $arg, array $values): bool + private function isArgumentValueMatch(Arg|ArgPlaceholder|VariadicPlaceholder $arg, array $values): bool { if (! $arg instanceof Arg) { return false; diff --git a/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php b/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php index f315ff24203..8bdf0a3cd6b 100644 --- a/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php +++ b/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php @@ -5,6 +5,7 @@ namespace Rector\TypeDeclaration\NodeAnalyzer; use PhpParser\Node\Arg; +use PhpParser\Node\ArgPlaceholder; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Array_; use PhpParser\Node\Expr\MethodCall; @@ -207,9 +208,9 @@ private function normalizeType(Type $argValueType): MixedType|ObjectType|Type * There is first class callable usage, or argument unpack, or named expr * simply returns array marks as unknown as can be anything and in any position */ - private function shouldSkipArg(Arg|VariadicPlaceholder $arg): bool + private function shouldSkipArg(Arg|ArgPlaceholder|VariadicPlaceholder $arg): bool { - if ($arg instanceof VariadicPlaceholder) { + if (! $arg instanceof Arg) { return true; } diff --git a/src/NodeAnalyzer/CompactFuncCallAnalyzer.php b/src/NodeAnalyzer/CompactFuncCallAnalyzer.php index 000c8a5ac24..6acd3296da2 100644 --- a/src/NodeAnalyzer/CompactFuncCallAnalyzer.php +++ b/src/NodeAnalyzer/CompactFuncCallAnalyzer.php @@ -5,6 +5,7 @@ namespace Rector\NodeAnalyzer; use PhpParser\Node\Arg; +use PhpParser\Node\ArgPlaceholder; use PhpParser\Node\ArrayItem; use PhpParser\Node\Expr\Array_; use PhpParser\Node\Expr\FuncCall; @@ -34,7 +35,7 @@ public function isInCompact(FuncCall $funcCall, Variable $variable): bool } /** - * @param array $nodes + * @param array $nodes */ private function isInArgOrArrayItemNodes(array $nodes, string $variableName): bool { @@ -64,12 +65,12 @@ private function isInArgOrArrayItemNodes(array $nodes, string $variableName): bo return false; } - private function shouldSkip(Arg|VariadicPlaceholder|ArrayItem|null $node): bool + private function shouldSkip(Arg|ArgPlaceholder|VariadicPlaceholder|ArrayItem|null $node): bool { if ($node === null) { return true; } - return $node instanceof VariadicPlaceholder; + return ! $node instanceof Arg && ! $node instanceof ArrayItem; } }