diff --git a/src/Psalm/Internal/Provider/FunctionReturnTypeProvider.php b/src/Psalm/Internal/Provider/FunctionReturnTypeProvider.php index bdd59a0abc4..99a37b7307b 100644 --- a/src/Psalm/Internal/Provider/FunctionReturnTypeProvider.php +++ b/src/Psalm/Internal/Provider/FunctionReturnTypeProvider.php @@ -81,7 +81,7 @@ public function __construct() $this->registerClass(ArraySliceReturnTypeProvider::class); $this->registerClass(ArraySpliceReturnTypeProvider::class); $this->registerClass(ArrayReverseReturnTypeProvider::class); - $this->registerClass(ArrayUniqueReturnTypeProvider::class); + //$this->registerClass(ArrayUniqueReturnTypeProvider::class); $this->registerClass(ArrayFillReturnTypeProvider::class); $this->registerClass(ArrayFillKeysReturnTypeProvider::class); $this->registerClass(FilterVarReturnTypeProvider::class); diff --git a/stubs/CoreGenericFunctions.phpstub b/stubs/CoreGenericFunctions.phpstub index f9640b06596..f16b384a927 100644 --- a/stubs/CoreGenericFunctions.phpstub +++ b/stubs/CoreGenericFunctions.phpstub @@ -129,6 +129,18 @@ function array_flip(array $array) { } +/** + * @psalm-template TArray as array + * + * @param TArray $array + * + * @return TArray + * @psalm-pure + */ +function array_unique(array $array, int $flags = 0) +{ +} + /** * @psalm-template TKey as array-key * @psalm-template TArray as array diff --git a/tests/ArrayFunctionCallTest.php b/tests/ArrayFunctionCallTest.php index af57d042028..457ae0df8f4 100644 --- a/tests/ArrayFunctionCallTest.php +++ b/tests/ArrayFunctionCallTest.php @@ -2536,6 +2536,14 @@ function consumeArray(array $_input): void {} consumeArray([makeKey() => null]); ', ], + 'arrayUniquePreservesNonEmptyInput' => [ + 'code' => ' $input */ + function takes_non_empty(array $input): void {} + + takes_non_empty(array_unique(["test" => (object)[]])); + ', + ], ]; } @@ -2809,6 +2817,15 @@ function merger(array $a, array $b) : array { ', 'error_message' => 'NamedArgumentNotAllowed', ], + 'arrayUniquePreservesEmptyInput' => [ + 'code' => ' $input */ + function takes_non_empty(array $input): void {} + + takes_non_empty(array_unique([])); + ', + 'error_message' => 'InvalidArgument', + ], ]; } }