Skip to content

Commit 89838a3

Browse files
Refactor MutatingScope
1 parent ca00199 commit 89838a3

1 file changed

Lines changed: 23 additions & 25 deletions

File tree

src/Analyser/MutatingScope.php

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2021,18 +2021,7 @@ public function enterAnonymousFunctionWithoutReflection(
20212021
$isNullable = $this->isParameterValueNullable($parameter);
20222022
$parameterType = $this->getFunctionType($parameter->type, $isNullable, $parameter->variadic);
20232023
if ($callableParameters !== null) {
2024-
if (isset($callableParameters[$i])) {
2025-
$parameterType = self::intersectButNotNever($parameterType, $callableParameters[$i]->getType());
2026-
} elseif (count($callableParameters) > 0) {
2027-
$lastParameter = array_last($callableParameters);
2028-
if ($lastParameter->isVariadic()) {
2029-
$parameterType = self::intersectButNotNever($parameterType, $lastParameter->getType());
2030-
} else {
2031-
$parameterType = self::intersectButNotNever($parameterType, new MixedType());
2032-
}
2033-
} else {
2034-
$parameterType = self::intersectButNotNever($parameterType, new MixedType());
2035-
}
2024+
$parameterType = self::intersectButNotNever($parameterType, $this->getCallableParameterType($callableParameters, $i));
20362025
}
20372026
$holder = ExpressionTypeHolder::createYes($parameter->var, $parameterType);
20382027
$expressionTypes[$paramExprString] = $holder;
@@ -2231,20 +2220,8 @@ public function enterArrowFunctionWithoutReflection(Expr\ArrowFunction $arrowFun
22312220
foreach ($arrowFunction->params as $i => $parameter) {
22322221
$isNullable = $this->isParameterValueNullable($parameter);
22332222
$parameterType = $this->getFunctionType($parameter->type, $isNullable, $parameter->variadic);
2234-
22352223
if ($callableParameters !== null) {
2236-
if (isset($callableParameters[$i])) {
2237-
$parameterType = self::intersectButNotNever($parameterType, $callableParameters[$i]->getType());
2238-
} elseif (count($callableParameters) > 0) {
2239-
$lastParameter = array_last($callableParameters);
2240-
if ($lastParameter->isVariadic()) {
2241-
$parameterType = self::intersectButNotNever($parameterType, $lastParameter->getType());
2242-
} else {
2243-
$parameterType = self::intersectButNotNever($parameterType, new MixedType());
2244-
}
2245-
} else {
2246-
$parameterType = self::intersectButNotNever($parameterType, new MixedType());
2247-
}
2224+
$parameterType = self::intersectButNotNever($parameterType, $this->getCallableParameterType($callableParameters, $i));
22482225
}
22492226

22502227
if (!$parameter->var instanceof Variable || !is_string($parameter->var->name)) {
@@ -2310,6 +2287,27 @@ public function getFunctionType($type, bool $isNullable, bool $isVariadic): Type
23102287
return $this->initializerExprTypeResolver->getFunctionType($type, $isNullable, false, InitializerExprContext::fromScope($this));
23112288
}
23122289

2290+
/**
2291+
* @param ParameterReflection[] $callableParameters
2292+
*/
2293+
private function getCallableParameterType(array $callableParameters, int $index): Type
2294+
{
2295+
if (isset($callableParameters[$index])) {
2296+
return $callableParameters[$index]->getType();
2297+
}
2298+
2299+
if (count($callableParameters) === 0) {
2300+
return new MixedType();
2301+
}
2302+
2303+
$lastParameter = array_last($callableParameters);
2304+
if ($lastParameter->isVariadic()) {
2305+
return $lastParameter->getType();
2306+
}
2307+
2308+
return new MixedType();
2309+
}
2310+
23132311
public static function intersectButNotNever(Type $nativeType, Type $inferredType): Type
23142312
{
23152313
if ($nativeType->isSuperTypeOf($inferredType)->no()) {

0 commit comments

Comments
 (0)