From e45619809406ec7374a496ad8c205e1e2ec141aa Mon Sep 17 00:00:00 2001 From: Martin Herndl Date: Fri, 18 Mar 2022 22:00:14 +0100 Subject: [PATCH] Fix array_filter narrowing with explicit null callback --- .../Php/ArrayFilterFunctionReturnTypeReturnTypeExtension.php | 3 +-- tests/PHPStan/Analyser/data/array-filter.php | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Type/Php/ArrayFilterFunctionReturnTypeReturnTypeExtension.php b/src/Type/Php/ArrayFilterFunctionReturnTypeReturnTypeExtension.php index bf0eb42757..69fa0303cc 100644 --- a/src/Type/Php/ArrayFilterFunctionReturnTypeReturnTypeExtension.php +++ b/src/Type/Php/ArrayFilterFunctionReturnTypeReturnTypeExtension.php @@ -32,7 +32,6 @@ use function array_map; use function count; use function is_string; -use function strtolower; class ArrayFilterFunctionReturnTypeReturnTypeExtension implements DynamicFunctionReturnTypeExtension { @@ -63,7 +62,7 @@ public function getTypeFromFunctionCall(FunctionReflection $functionReflection, ]); } - if ($callbackArg === null || ($callbackArg instanceof ConstFetch && strtolower($callbackArg->name->parts[0]) === 'null')) { + if ($callbackArg === null) { return TypeCombinator::union( ...array_map([$this, 'removeFalsey'], TypeUtils::getArrays($arrayArgType)), ); diff --git a/tests/PHPStan/Analyser/data/array-filter.php b/tests/PHPStan/Analyser/data/array-filter.php index f5d1e181fe..3d9b48ec08 100644 --- a/tests/PHPStan/Analyser/data/array-filter.php +++ b/tests/PHPStan/Analyser/data/array-filter.php @@ -30,8 +30,8 @@ function withoutCallback(array $map1, array $map2, array $map3): void assertType('array|int<1, max>|non-empty-string|true>', $filtered1); $filtered2 = array_filter($map2, null, ARRAY_FILTER_USE_KEY); - assertType('array|int<1, max>|non-empty-string|true>', $filtered2); + assertType('array', $filtered2); $filtered3 = array_filter($map3, null, ARRAY_FILTER_USE_BOTH); - assertType('array|int<1, max>|non-empty-string|true>', $filtered3); + assertType('array', $filtered3); }