1
0
mirror of https://github.com/danog/psalm.git synced 2025-01-22 13:51:54 +01:00

Merge pull request #10804 from weirdan/10533-no-named-arguments-for-array-access

This commit is contained in:
Bruce Weirdan 2024-03-10 01:02:18 +01:00 committed by GitHub
commit c511185fbe
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 37 additions and 0 deletions

View File

@ -82,6 +82,7 @@ interface ArrayAccess {
* The return value will be casted to boolean if non-boolean was returned. * The return value will be casted to boolean if non-boolean was returned.
* *
* @since 5.0.0 * @since 5.0.0
* @no-named-arguments because of conflict with ArrayObject
*/ */
public function offsetExists($offset); public function offsetExists($offset);
@ -94,6 +95,7 @@ interface ArrayAccess {
* @psalm-ignore-nullable-return * @psalm-ignore-nullable-return
* *
* @since 5.0.0 * @since 5.0.0
* @no-named-arguments because of conflict with ArrayObject
*/ */
public function offsetGet($offset); public function offsetGet($offset);
@ -106,6 +108,7 @@ interface ArrayAccess {
* @return void * @return void
* *
* @since 5.0.0 * @since 5.0.0
* @no-named-arguments because of conflict with ArrayObject
*/ */
public function offsetSet($offset, $value); public function offsetSet($offset, $value);
@ -117,6 +120,7 @@ interface ArrayAccess {
* @return void * @return void
* *
* @since 5.0.0 * @since 5.0.0
* @no-named-arguments because of conflict with ArrayObject
*/ */
public function offsetUnset($offset); public function offsetUnset($offset);
} }
@ -162,6 +166,7 @@ class ArrayObject implements IteratorAggregate, ArrayAccess, Serializable, Count
* @return bool true if the requested index exists, otherwise false * @return bool true if the requested index exists, otherwise false
* *
* @since 5.0.0 * @since 5.0.0
* @no-named-arguments because of conflict with ArrayAccess
*/ */
public function offsetExists($offset) { } public function offsetExists($offset) { }
@ -173,6 +178,7 @@ class ArrayObject implements IteratorAggregate, ArrayAccess, Serializable, Count
* @return TValue The value at the specified index or false. * @return TValue The value at the specified index or false.
* *
* @since 5.0.0 * @since 5.0.0
* @no-named-arguments because of conflict with ArrayAccess
*/ */
public function offsetGet($offset) { } public function offsetGet($offset) { }
@ -185,6 +191,7 @@ class ArrayObject implements IteratorAggregate, ArrayAccess, Serializable, Count
* @return void * @return void
* *
* @since 5.0.0 * @since 5.0.0
* @no-named-arguments because of conflict with ArrayAccess
*/ */
public function offsetSet($offset, $value) { } public function offsetSet($offset, $value) { }
@ -196,6 +203,7 @@ class ArrayObject implements IteratorAggregate, ArrayAccess, Serializable, Count
* @return void * @return void
* *
* @since 5.0.0 * @since 5.0.0
* @no-named-arguments because of conflict with ArrayAccess
*/ */
public function offsetUnset($offset) { } public function offsetUnset($offset) { }

View File

@ -1233,6 +1233,25 @@ class ArrayAccessTest extends TestCase
'assertions' => [], 'assertions' => [],
'ignored_issues' => ['UndefinedDocblockClass'], 'ignored_issues' => ['UndefinedDocblockClass'],
], ],
'canExtendArrayObjectOffsetSet' => [
'code' => <<<'PHP'
<?php
// parameter names in PHP are messed up:
// ArrayObject::offsetSet(mixed $key, mixed $value) : void;
// ArrayAccess::offsetSet(mixed $offset, mixed $value) : void;
// and yet ArrayObject implements ArrayAccess
/** @extends ArrayObject<int, int> */
class C extends ArrayObject {
public function offsetSet(mixed $key, mixed $value): void {
parent::offsetSet($key, $value);
}
}
PHP,
'assertions' => [],
'ignored_issues' => [],
'php_version' => '8.0',
],
]; ];
} }
@ -1560,6 +1579,16 @@ class ArrayAccessTest extends TestCase
if ($x === null) {}', if ($x === null) {}',
'error_message' => 'PossiblyUndefinedArrayOffset', 'error_message' => 'PossiblyUndefinedArrayOffset',
], ],
'cannotUseNamedArgumentsForArrayAccess' => [
'code' => <<<'PHP'
<?php
/** @param ArrayAccess<int, string> $a */
function f(ArrayAccess $a): void {
echo $a->offsetGet(offset: 0);
}
PHP,
'error_message' => 'NamedArgumentNotAllowed',
],
]; ];
} }
} }