Skip to content

Commit

Permalink
Fix array_unique callmap
Browse files Browse the repository at this point in the history
  • Loading branch information
othercorey committed Feb 17, 2023
1 parent 0a8d686 commit 787b77f
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 6 deletions.
4 changes: 1 addition & 3 deletions dictionaries/CallMap.php
Expand Up @@ -418,9 +418,7 @@
'array_uintersect_assoc\'1' => ['associative-array', 'array'=>'array', 'rest'=>'array', 'arr3'=>'array', 'arg4'=>'array|callable', '...rest='=>'array|callable(mixed,mixed):int'],
'array_uintersect_uassoc' => ['associative-array', 'array'=>'array', 'rest'=>'array', 'data_compare_func'=>'callable(mixed,mixed):int', 'key_compare_func'=>'callable(mixed,mixed):int'],
'array_uintersect_uassoc\'1' => ['associative-array', 'array'=>'array', 'rest'=>'array', 'arr3'=>'array', 'arg4'=>'array|callable(mixed,mixed):int', 'arg5'=>'array|callable(mixed,mixed):int', '...rest='=>'array|callable(mixed,mixed):int'],
'array_unique' => ['array', 'array'=>'array', 'flags='=>'0'],
'array_unique\'1' => ['array<int|float|string|null>', 'array'=>'array<int|float|string|null>', 'flags='=>'1'],
'array_unique\'2' => ['array<int|float|string|bool|\Stringable|null>', 'array'=>'array<int|float|string|bool|\Stringable|null>', 'flags='=>'2|5'],
'array_unique' => ['array', 'array'=>'array', 'flags='=>'int'],
'array_unshift' => ['int', '&rw_array'=>'array', '...values='=>'mixed'],
'array_values' => ['list<mixed>', 'array'=>'array'],
'array_walk' => ['bool', '&rw_array'=>'array', 'callback'=>'callable', 'arg='=>'mixed'],
Expand Down
4 changes: 1 addition & 3 deletions dictionaries/CallMap_historical.php
Expand Up @@ -9408,9 +9408,7 @@
'array_uintersect_assoc\'1' => ['associative-array', 'array'=>'array', 'rest'=>'array', 'arr3'=>'array', 'arg4'=>'array|callable', '...rest='=>'array|callable(mixed,mixed):int'],
'array_uintersect_uassoc' => ['associative-array', 'array'=>'array', 'rest'=>'array', 'data_compare_func'=>'callable(mixed,mixed):int', 'key_compare_func'=>'callable(mixed,mixed):int'],
'array_uintersect_uassoc\'1' => ['associative-array', 'array'=>'array', 'rest'=>'array', 'arr3'=>'array', 'arg4'=>'array|callable(mixed,mixed):int', 'arg5'=>'array|callable(mixed,mixed):int', '...rest='=>'array|callable(mixed,mixed):int'],
'array_unique' => ['array', 'array'=>'array', 'flags='=>'0'],
'array_unique\'1' => ['array<int|float|string|null>', 'array'=>'array<int|float|string|null>', 'flags='=>'1'],
'array_unique\'2' => ['array<int|float|string|bool|\Stringable|null>', 'array'=>'array<int|float|string|bool|\Stringable|null>', 'flags='=>'2|5'],
'array_unique' => ['array', 'array'=>'array', 'flags='=>'int'],
'array_unshift' => ['int', '&rw_array'=>'array', '...values'=>'mixed'],
'array_values' => ['list<mixed>', 'array'=>'array'],
'array_walk' => ['bool', '&rw_array'=>'array', 'callback'=>'callable', 'arg='=>'mixed'],
Expand Down
15 changes: 15 additions & 0 deletions stubs/CoreGenericFunctions.phpstub
@@ -1,4 +1,5 @@
<?php

/**
* @psalm-template TArray as array
*
Expand Down Expand Up @@ -380,6 +381,20 @@ function array_fill_keys(array $keys, $value): array
{
}

/**
* @psalm-pure
*
* @psalm-template TValue
*
* @param array<TValue> $array
* @param (TValue is (\Stringable|string|int|float|bool|null) ? (0|1|2|5) : 0) $flags
*
* @return array<TValue>
*/
function array_unique(array $array, int $flags = 2): array
{
}

/**
* @psalm-pure
*
Expand Down
22 changes: 22 additions & 0 deletions tests/ArrayFunctionCallTest.php
Expand Up @@ -2536,6 +2536,21 @@ function consumeArray(array $_input): void {}
consumeArray([makeKey() => null]);
',
],
'arrayUniqueComparableElements' => [
'code' => '<?php
class IsStringable implements Stringable {
public function __toString(): string {
return "test";
}
}
array_unique([new IsStringable(), 1]);
array_unique([new IsStringable(), 1], SORT_REGULAR);
array_unique([(object)[], 1], SORT_REGULAR);
array_unique([]);
array_unique([], SORT_REGULAR);
',
],
];
}

Expand Down Expand Up @@ -2809,6 +2824,13 @@ function merger(array $a, array $b) : array {
',
'error_message' => 'NamedArgumentNotAllowed',
],
'arrayUniqueUncomparableElements' => [
'code' => '<?php
array_unique([(object)[], 1]);
array_unique([(object)[], (object)[]]);
',
'error_message' => 'ArgumentTypeCoercion',
],
];
}
}

0 comments on commit 787b77f

Please sign in to comment.