Skip to content

Commit 49c9a89

Browse files
committed
NodeScopeResolver - return some code
1 parent ca7deb3 commit 49c9a89

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

src/Analyser/NodeScopeResolver.php

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,14 @@
9090
use PHPStan\Reflection\Native\NativeMethodReflection;
9191
use PHPStan\Reflection\ParametersAcceptor;
9292
use PHPStan\Reflection\ParametersAcceptorSelector;
93+
use PHPStan\Reflection\PassedByReference;
94+
use PHPStan\Reflection\Php\DummyParameter;
9395
use PHPStan\Reflection\Php\PhpMethodReflection;
9496
use PHPStan\Reflection\ReflectionProvider;
9597
use PHPStan\TrinaryLogic;
9698
use PHPStan\Type\Accessory\NonEmptyArrayType;
9799
use PHPStan\Type\ArrayType;
100+
use PHPStan\Type\CallableType;
98101
use PHPStan\Type\ClosureType;
99102
use PHPStan\Type\Constant\ConstantArrayType;
100103
use PHPStan\Type\Constant\ConstantArrayTypeBuilder;
@@ -3153,6 +3156,47 @@ private function processArgs(
31533156
$scope = $scope->assignVariable($argValue->name, new MixedType());
31543157
}
31553158
}
3159+
3160+
if ($calleeReflection instanceof FunctionReflection) {
3161+
if (
3162+
$i === 0
3163+
&& $calleeReflection->getName() === 'array_map'
3164+
&& isset($args[1])
3165+
) {
3166+
$parameterType = new CallableType([
3167+
new DummyParameter('item', $scope->getType($args[1]->value)->getIterableValueType(), false, PassedByReference::createNo(), false, null),
3168+
], new MixedType(), false);
3169+
}
3170+
3171+
if (
3172+
$i === 1
3173+
&& $calleeReflection->getName() === 'array_filter'
3174+
&& isset($args[0])
3175+
) {
3176+
if (isset($args[2])) {
3177+
$mode = $scope->getType($args[2]->value);
3178+
if ($mode instanceof ConstantIntegerType) {
3179+
if ($mode->getValue() === ARRAY_FILTER_USE_KEY) {
3180+
$arrayFilterParameters = [
3181+
new DummyParameter('key', $scope->getType($args[0]->value)->getIterableKeyType(), false, PassedByReference::createNo(), false, null),
3182+
];
3183+
} elseif ($mode->getValue() === ARRAY_FILTER_USE_BOTH) {
3184+
$arrayFilterParameters = [
3185+
new DummyParameter('item', $scope->getType($args[0]->value)->getIterableValueType(), false, PassedByReference::createNo(), false, null),
3186+
new DummyParameter('key', $scope->getType($args[0]->value)->getIterableKeyType(), false, PassedByReference::createNo(), false, null),
3187+
];
3188+
}
3189+
}
3190+
}
3191+
$parameterType = new CallableType(
3192+
$arrayFilterParameters ?? [
3193+
new DummyParameter('item', $scope->getType($args[0]->value)->getIterableValueType(), false, PassedByReference::createNo(), false, null),
3194+
],
3195+
new MixedType(),
3196+
false
3197+
);
3198+
}
3199+
}
31563200
}
31573201

31583202
$originalScope = $scope;

0 commit comments

Comments
 (0)