From 6e67d67107ec38cdf0ef85d0a64b6030f960bff5 Mon Sep 17 00:00:00 2001 From: Marco Perone Date: Fri, 2 Oct 2020 17:57:11 +0200 Subject: [PATCH 1/5] add some more stubs for array functions --- .../Stubs/CoreGenericFunctions.phpstub | 148 ++++++++++++++++++ 1 file changed, 148 insertions(+) diff --git a/src/Psalm/Internal/Stubs/CoreGenericFunctions.phpstub b/src/Psalm/Internal/Stubs/CoreGenericFunctions.phpstub index b970253d187..448c3c8310c 100644 --- a/src/Psalm/Internal/Stubs/CoreGenericFunctions.phpstub +++ b/src/Psalm/Internal/Stubs/CoreGenericFunctions.phpstub @@ -49,6 +49,24 @@ function array_intersect_key(array $arr, array $arr2, array ...$arr3) * @psalm-template TValue * * @param array $arr + * @param array $arr2 + * @param array ...$arr3 + * @param callable(TKey): int $keyCompareFunc + * + * @return array + * @psalm-pure + */ +function array_intersect_ukey(array $arr, array $arr2, array ...$arr3, callable $keyCompareFunc): array +{ +} + +/** + * @psalm-template TKey as array-key + * @psalm-template TValue + * + * @param array $arr + * @param array $arr2 + * @param array ...$arr3 * * @return array * @psalm-pure @@ -57,6 +75,22 @@ function array_intersect_assoc(array $arr, array $arr2, array ...$arr3) { } +/** + * @psalm-template TKey as array-key + * @psalm-template TValue + * + * @param array $arr + * @param array $arr2 + * @param array ...$arr3 + * @param callable(TKey): int $keyCompareFunc + * + * @return array + * @psalm-pure + */ +function array_intersect_assoc(array $arr, array $arr2, array ...$arr3, callable $keyCompareFunc): array +{ +} + /** * @psalm-template TKey as array-key * @psalm-template TValue @@ -102,6 +136,22 @@ function array_diff_key(array $arr, array $arr2, array ...$arr3) { } +/** + * @psalm-template TKey as array-key + * @psalm-template TValue + * + * @param array $arr + * @param array $arr2 + * @param array ...$arr3 + * @param callable(TKey, TKey): int + * + * @return array + * @psalm-pure + */ +function array_diff_ukey(array $arr, array $arr2, array ...$arr3, callable $key_compare_func): array +{ +} + /** * @psalm-template TKey as array-key * @psalm-template TValue @@ -117,6 +167,20 @@ function array_diff_assoc(array $arr, array $arr2, array ...$arr3) { } +/** + * @psalm-template TKey as array-key + * @psalm-template TValue + * + * @param array $arr + * @param array $arr2 + * @param array ...$arr3 + * @param callable(TKey, TKey): int + * + * @return array + * @psalm-pure + */ +function array_diff_uassoc(array $arr, array $arr2, array ... $arr3, callable $key_compare_func): array + /** * @psalm-template TKey as array-key * @psalm-template TValue @@ -292,6 +356,34 @@ function array_merge_recursive(array $arr, array ...$arr2) { } +/** + * @psalm-pure + * + * @psalm-template TKey as array-key + * @psalm-template TValue + * + * @param array $arr + * @param array ...$arr2 + * + * @return array + */ +function array_merge(array $arr, array ...$arr2) +{ +} + +/** + * @template TValue + * + * @param int $startIndex + * @param int $num + * @param TValue $value + * + * @return array + * + * @psalm-pure + */ +function array_fill(int $startIndex, int $num, $value): array + /** * @psalm-pure * @@ -550,6 +642,20 @@ function explode(string $delimiter, string $string, int $limit = -1) : array {} */ function array_sum(array $input) {} +/** + * @param array $input + * + * @return ( + * $input is array + * ? int + * : ($input is array + * ? float + * : float|int + * ) + * ) + */ +function array_product(array $input) {} + /** * @psalm-pure * @@ -736,3 +842,45 @@ function str_getcsv(string $input, string $delimiter = ',', string $enclosure = * @return ($min is positive-int ? positive-int : int) */ function random_int(int $min, int $max): int {} + +/** + * @template TKey as array-key + * + * @param array + * @return array + * @psalm-pure + */ +function array_count_values(array $array): array + +/** + * @template TValue + * + * @param array $array + * + * @return ($array is non-empty-array ? TValue : null) + */ +function array_pop(array &$array) + +/** + * @template TKey as array-key + * + * @param array $array + * @param int $num + * + * @return ($num is 1 ? TKey : list|null) + */ +function array_rand(array $array, int $num = 1) + +/** + * @template TValue + * @template T + * + * @param array + * @param callable(T, TValue): T + * @param T $initial + * + * @return T + * + * @psalm-pure + */ +function array_reduce(array $array, callable $callback, $initial = null) From 02ee5b552813d004f8f73e6770a9b4efd32486a1 Mon Sep 17 00:00:00 2001 From: Marco Perone Date: Fri, 2 Oct 2020 18:28:31 +0200 Subject: [PATCH 2/5] add function brackets to stubs --- .../Stubs/CoreGenericFunctions.phpstub | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Psalm/Internal/Stubs/CoreGenericFunctions.phpstub b/src/Psalm/Internal/Stubs/CoreGenericFunctions.phpstub index 448c3c8310c..9bc199e5e4d 100644 --- a/src/Psalm/Internal/Stubs/CoreGenericFunctions.phpstub +++ b/src/Psalm/Internal/Stubs/CoreGenericFunctions.phpstub @@ -56,7 +56,7 @@ function array_intersect_key(array $arr, array $arr2, array ...$arr3) * @return array * @psalm-pure */ -function array_intersect_ukey(array $arr, array $arr2, array ...$arr3, callable $keyCompareFunc): array +function array_intersect_ukey(array $arr, array $arr2, array ...$arr3, callable $keyCompareFunc): array {} { } @@ -87,7 +87,7 @@ function array_intersect_assoc(array $arr, array $arr2, array ...$arr3) * @return array * @psalm-pure */ -function array_intersect_assoc(array $arr, array $arr2, array ...$arr3, callable $keyCompareFunc): array +function array_intersect_uassoc(array $arr, array $arr2, array ...$arr3, callable $keyCompareFunc): array {} { } @@ -148,7 +148,7 @@ function array_diff_key(array $arr, array $arr2, array ...$arr3) * @return array * @psalm-pure */ -function array_diff_ukey(array $arr, array $arr2, array ...$arr3, callable $key_compare_func): array +function array_diff_ukey(array $arr, array $arr2, array ...$arr3, callable $key_compare_func): array {} { } @@ -179,7 +179,7 @@ function array_diff_assoc(array $arr, array $arr2, array ...$arr3) * @return array * @psalm-pure */ -function array_diff_uassoc(array $arr, array $arr2, array ... $arr3, callable $key_compare_func): array +function array_diff_uassoc(array $arr, array $arr2, array ... $arr3, callable $key_compare_func): array {} /** * @psalm-template TKey as array-key @@ -382,7 +382,7 @@ function array_merge(array $arr, array ...$arr2) * * @psalm-pure */ -function array_fill(int $startIndex, int $num, $value): array +function array_fill(int $startIndex, int $num, $value): array {} /** * @psalm-pure @@ -850,7 +850,7 @@ function random_int(int $min, int $max): int {} * @return array * @psalm-pure */ -function array_count_values(array $array): array +function array_count_values(array $array): array {} /** * @template TValue @@ -859,7 +859,7 @@ function array_count_values(array $array): array * * @return ($array is non-empty-array ? TValue : null) */ -function array_pop(array &$array) +function array_pop(array &$array) {} /** * @template TKey as array-key @@ -869,7 +869,7 @@ function array_pop(array &$array) * * @return ($num is 1 ? TKey : list|null) */ -function array_rand(array $array, int $num = 1) +function array_rand(array $array, int $num = 1) {} /** * @template TValue @@ -883,4 +883,4 @@ function array_rand(array $array, int $num = 1) * * @psalm-pure */ -function array_reduce(array $array, callable $callback, $initial = null) +function array_reduce(array $array, callable $callback, $initial = null) {} From 7dcc3c7200bec551530b109af9e4b0ba6f3f91ac Mon Sep 17 00:00:00 2001 From: Marco Perone Date: Fri, 2 Oct 2020 18:33:33 +0200 Subject: [PATCH 3/5] add parameter names --- .../Stubs/CoreGenericFunctions.phpstub | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Psalm/Internal/Stubs/CoreGenericFunctions.phpstub b/src/Psalm/Internal/Stubs/CoreGenericFunctions.phpstub index 9bc199e5e4d..8999562e33a 100644 --- a/src/Psalm/Internal/Stubs/CoreGenericFunctions.phpstub +++ b/src/Psalm/Internal/Stubs/CoreGenericFunctions.phpstub @@ -54,6 +54,7 @@ function array_intersect_key(array $arr, array $arr2, array ...$arr3) * @param callable(TKey): int $keyCompareFunc * * @return array + * * @psalm-pure */ function array_intersect_ukey(array $arr, array $arr2, array ...$arr3, callable $keyCompareFunc): array {} @@ -85,6 +86,7 @@ function array_intersect_assoc(array $arr, array $arr2, array ...$arr3) * @param callable(TKey): int $keyCompareFunc * * @return array + * * @psalm-pure */ function array_intersect_uassoc(array $arr, array $arr2, array ...$arr3, callable $keyCompareFunc): array {} @@ -143,12 +145,12 @@ function array_diff_key(array $arr, array $arr2, array ...$arr3) * @param array $arr * @param array $arr2 * @param array ...$arr3 - * @param callable(TKey, TKey): int + * @param callable(TKey, TKey): int $keyCompareFunc * * @return array * @psalm-pure */ -function array_diff_ukey(array $arr, array $arr2, array ...$arr3, callable $key_compare_func): array {} +function array_diff_ukey(array $arr, array $arr2, array ...$arr3, callable $keyCompareFunc): array {} { } @@ -174,12 +176,12 @@ function array_diff_assoc(array $arr, array $arr2, array ...$arr3) * @param array $arr * @param array $arr2 * @param array ...$arr3 - * @param callable(TKey, TKey): int + * @param callable(TKey, TKey): int $keyCompareFunc * * @return array * @psalm-pure */ -function array_diff_uassoc(array $arr, array $arr2, array ... $arr3, callable $key_compare_func): array {} +function array_diff_uassoc(array $arr, array $arr2, array ... $arr3, callable $keyCompareFunc): array {} /** * @psalm-template TKey as array-key @@ -846,8 +848,10 @@ function random_int(int $min, int $max): int {} /** * @template TKey as array-key * - * @param array + * @param array $array + * * @return array + * * @psalm-pure */ function array_count_values(array $array): array {} @@ -875,8 +879,8 @@ function array_rand(array $array, int $num = 1) {} * @template TValue * @template T * - * @param array - * @param callable(T, TValue): T + * @param array $array + * @param callable(T, TValue): T $callback * @param T $initial * * @return T From f7cecee7aa6d26abfa34dde11b6fc48bd8482e37 Mon Sep 17 00:00:00 2001 From: Marco Perone Date: Fri, 2 Oct 2020 19:25:07 +0200 Subject: [PATCH 4/5] remove redundant brackets --- src/Psalm/Internal/Stubs/CoreGenericFunctions.phpstub | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Psalm/Internal/Stubs/CoreGenericFunctions.phpstub b/src/Psalm/Internal/Stubs/CoreGenericFunctions.phpstub index 8999562e33a..71c3c20b651 100644 --- a/src/Psalm/Internal/Stubs/CoreGenericFunctions.phpstub +++ b/src/Psalm/Internal/Stubs/CoreGenericFunctions.phpstub @@ -57,7 +57,7 @@ function array_intersect_key(array $arr, array $arr2, array ...$arr3) * * @psalm-pure */ -function array_intersect_ukey(array $arr, array $arr2, array ...$arr3, callable $keyCompareFunc): array {} +function array_intersect_ukey(array $arr, array $arr2, array ...$arr3, callable $keyCompareFunc): array { } From d050b8df2cb38b51b00ec6e5078115797edeb6d1 Mon Sep 17 00:00:00 2001 From: Marco Perone Date: Mon, 5 Oct 2020 08:39:48 +0200 Subject: [PATCH 5/5] remove stubs already defined in return type providers --- .../Stubs/CoreGenericFunctions.phpstub | 61 ------------------- 1 file changed, 61 deletions(-) diff --git a/src/Psalm/Internal/Stubs/CoreGenericFunctions.phpstub b/src/Psalm/Internal/Stubs/CoreGenericFunctions.phpstub index 71c3c20b651..07198ae7285 100644 --- a/src/Psalm/Internal/Stubs/CoreGenericFunctions.phpstub +++ b/src/Psalm/Internal/Stubs/CoreGenericFunctions.phpstub @@ -358,34 +358,6 @@ function array_merge_recursive(array $arr, array ...$arr2) { } -/** - * @psalm-pure - * - * @psalm-template TKey as array-key - * @psalm-template TValue - * - * @param array $arr - * @param array ...$arr2 - * - * @return array - */ -function array_merge(array $arr, array ...$arr2) -{ -} - -/** - * @template TValue - * - * @param int $startIndex - * @param int $num - * @param TValue $value - * - * @return array - * - * @psalm-pure - */ -function array_fill(int $startIndex, int $num, $value): array {} - /** * @psalm-pure * @@ -855,36 +827,3 @@ function random_int(int $min, int $max): int {} * @psalm-pure */ function array_count_values(array $array): array {} - -/** - * @template TValue - * - * @param array $array - * - * @return ($array is non-empty-array ? TValue : null) - */ -function array_pop(array &$array) {} - -/** - * @template TKey as array-key - * - * @param array $array - * @param int $num - * - * @return ($num is 1 ? TKey : list|null) - */ -function array_rand(array $array, int $num = 1) {} - -/** - * @template TValue - * @template T - * - * @param array $array - * @param callable(T, TValue): T $callback - * @param T $initial - * - * @return T - * - * @psalm-pure - */ -function array_reduce(array $array, callable $callback, $initial = null) {}