From d685ed40cd227429ecbff6a74b09b324bf3bcd89 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sat, 6 Sep 2025 16:31:44 +0700 Subject: [PATCH 1/4] [CodeQuality] Skip not match position named argument on ScalarArgumentToExpectedParamTypeRector --- ..._not_match_position_named_argument.php.inc | 18 ++++++++ ...calarArgumentToExpectedParamTypeRector.php | 12 +++++ ...MethodParametersAndReturnTypesResolver.php | 46 +++++++++++++++++++ 3 files changed, 76 insertions(+) create mode 100644 rules-tests/CodeQuality/Rector/MethodCall/ScalarArgumentToExpectedParamTypeRector/Fixture/skip_not_match_position_named_argument.php.inc diff --git a/rules-tests/CodeQuality/Rector/MethodCall/ScalarArgumentToExpectedParamTypeRector/Fixture/skip_not_match_position_named_argument.php.inc b/rules-tests/CodeQuality/Rector/MethodCall/ScalarArgumentToExpectedParamTypeRector/Fixture/skip_not_match_position_named_argument.php.inc new file mode 100644 index 00000000..f4cffc22 --- /dev/null +++ b/rules-tests/CodeQuality/Rector/MethodCall/ScalarArgumentToExpectedParamTypeRector/Fixture/skip_not_match_position_named_argument.php.inc @@ -0,0 +1,18 @@ +methodParametersAndReturnTypesResolver->resolveCallParameterTypes($node); + $callParameterNames = $this->methodParametersAndReturnTypesResolver->resolveCallParameterNames($node); foreach ($node->getArgs() as $key => $arg) { if (! $arg->value instanceof Scalar) { @@ -108,6 +110,16 @@ public function refactor(Node $node): ?Node } $knownParameterType = $callParameterTypes[$key] ?? null; + if ($arg->name instanceof Identifier) { + $argName = $arg->name->toString(); + foreach ($callParameterNames as $keyParameterNames => $callParameterName) { + if ($argName === $callParameterName) { + $knownParameterType = $callParameterTypes[$keyParameterNames] ?? null; + break; + } + } + } + if (! $knownParameterType instanceof Type) { continue; } diff --git a/rules/CodeQuality/Reflection/MethodParametersAndReturnTypesResolver.php b/rules/CodeQuality/Reflection/MethodParametersAndReturnTypesResolver.php index 261b7c9e..0cda1e92 100644 --- a/rules/CodeQuality/Reflection/MethodParametersAndReturnTypesResolver.php +++ b/rules/CodeQuality/Reflection/MethodParametersAndReturnTypesResolver.php @@ -89,6 +89,52 @@ public function resolveCallParameterTypes(MethodCall|StaticCall $call): ?array return $this->resolveParameterTypes($extendedMethodReflection, $classReflection); } + /** + * @return null|Type[] + */ + public function resolveCallParameterNames(MethodCall|StaticCall $call): ?array + { + if (! $call->name instanceof Identifier) { + return null; + } + + $methodName = $call->name->toString(); + + $callerType = $this->nodeTypeResolver->getType($call instanceof MethodCall ? $call->var : $call->class); + if (! $callerType instanceof ObjectType) { + return null; + } + + $classReflection = $callerType->getClassReflection(); + if (! $classReflection instanceof ClassReflection) { + return null; + } + + if (! $classReflection->hasNativeMethod($methodName)) { + return null; + } + + $extendedMethodReflection = $classReflection->getNativeMethod($methodName); + return $this->resolveParameterNames($extendedMethodReflection); + } + + /** + * @return string[] + */ + private function resolveParameterNames(ExtendedMethodReflection $extendedMethodReflection): array + { + $extendedParametersAcceptor = ParametersAcceptorSelector::combineAcceptors( + $extendedMethodReflection->getVariants() + ); + + $parameterNames = []; + foreach ($extendedParametersAcceptor->getParameters() as $parameterReflection) { + $parameterNames[] = $parameterReflection->getName(); + } + + return $parameterNames; + } + /** * @return Type[] */ From 5492785dd10450ea1291bc7da66ad5efb0cd9e77 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sat, 6 Sep 2025 16:32:22 +0700 Subject: [PATCH 2/4] Rectify --- ...MethodParametersAndReturnTypesResolver.php | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/rules/CodeQuality/Reflection/MethodParametersAndReturnTypesResolver.php b/rules/CodeQuality/Reflection/MethodParametersAndReturnTypesResolver.php index 0cda1e92..940111a5 100644 --- a/rules/CodeQuality/Reflection/MethodParametersAndReturnTypesResolver.php +++ b/rules/CodeQuality/Reflection/MethodParametersAndReturnTypesResolver.php @@ -89,7 +89,7 @@ public function resolveCallParameterTypes(MethodCall|StaticCall $call): ?array return $this->resolveParameterTypes($extendedMethodReflection, $classReflection); } - /** + /** * @return null|Type[] */ public function resolveCallParameterNames(MethodCall|StaticCall $call): ?array @@ -118,23 +118,6 @@ public function resolveCallParameterNames(MethodCall|StaticCall $call): ?array return $this->resolveParameterNames($extendedMethodReflection); } - /** - * @return string[] - */ - private function resolveParameterNames(ExtendedMethodReflection $extendedMethodReflection): array - { - $extendedParametersAcceptor = ParametersAcceptorSelector::combineAcceptors( - $extendedMethodReflection->getVariants() - ); - - $parameterNames = []; - foreach ($extendedParametersAcceptor->getParameters() as $parameterReflection) { - $parameterNames[] = $parameterReflection->getName(); - } - - return $parameterNames; - } - /** * @return Type[] */ @@ -161,6 +144,23 @@ public function resolveParameterTypes( return $parameterTypes; } + /** + * @return string[] + */ + private function resolveParameterNames(ExtendedMethodReflection $extendedMethodReflection): array + { + $extendedParametersAcceptor = ParametersAcceptorSelector::combineAcceptors( + $extendedMethodReflection->getVariants() + ); + + $parameterNames = []; + foreach ($extendedParametersAcceptor->getParameters() as $parameterReflection) { + $parameterNames[] = $parameterReflection->getName(); + } + + return $parameterNames; + } + private function resolveObjectType(Type $type): ObjectType|Type { if ($type instanceof ObjectType) { From b02065859cd039ef1be409465ade1b2858a6c3d2 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sat, 6 Sep 2025 16:34:04 +0700 Subject: [PATCH 3/4] Rectify --- .../MethodParametersAndReturnTypesResolver.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/rules/CodeQuality/Reflection/MethodParametersAndReturnTypesResolver.php b/rules/CodeQuality/Reflection/MethodParametersAndReturnTypesResolver.php index 940111a5..bde98a0f 100644 --- a/rules/CodeQuality/Reflection/MethodParametersAndReturnTypesResolver.php +++ b/rules/CodeQuality/Reflection/MethodParametersAndReturnTypesResolver.php @@ -90,28 +90,28 @@ public function resolveCallParameterTypes(MethodCall|StaticCall $call): ?array } /** - * @return null|Type[] + * @return string[] */ public function resolveCallParameterNames(MethodCall|StaticCall $call): ?array { if (! $call->name instanceof Identifier) { - return null; + return []; } $methodName = $call->name->toString(); $callerType = $this->nodeTypeResolver->getType($call instanceof MethodCall ? $call->var : $call->class); if (! $callerType instanceof ObjectType) { - return null; + return []; } $classReflection = $callerType->getClassReflection(); if (! $classReflection instanceof ClassReflection) { - return null; + return []; } if (! $classReflection->hasNativeMethod($methodName)) { - return null; + return []; } $extendedMethodReflection = $classReflection->getNativeMethod($methodName); From 8c6592529012f250532baeb7d5598bbf6f63c465 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sat, 6 Sep 2025 09:34:47 +0000 Subject: [PATCH 4/4] [ci-review] Rector Rectify --- .../Reflection/MethodParametersAndReturnTypesResolver.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules/CodeQuality/Reflection/MethodParametersAndReturnTypesResolver.php b/rules/CodeQuality/Reflection/MethodParametersAndReturnTypesResolver.php index bde98a0f..00afac20 100644 --- a/rules/CodeQuality/Reflection/MethodParametersAndReturnTypesResolver.php +++ b/rules/CodeQuality/Reflection/MethodParametersAndReturnTypesResolver.php @@ -92,7 +92,7 @@ public function resolveCallParameterTypes(MethodCall|StaticCall $call): ?array /** * @return string[] */ - public function resolveCallParameterNames(MethodCall|StaticCall $call): ?array + public function resolveCallParameterNames(MethodCall|StaticCall $call): array { if (! $call->name instanceof Identifier) { return [];