Skip to content

Commit

Permalink
fix some iterator stubs (#6970)
Browse files Browse the repository at this point in the history
* fix some iterator stubs

* fix iterators

* update stubs

* fix a test

* fixes

* fixes

* fix a test

* fix
  • Loading branch information
orklah committed Jan 30, 2022
1 parent 963b41d commit 1220320
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 34 deletions.
76 changes: 44 additions & 32 deletions stubs/CoreGenericIterators.phpstub
Expand Up @@ -104,7 +104,7 @@ interface SeekableIterator extends Iterator {
/**
* @template-covariant TKey
* @template-covariant TValue
* @template TIterator as Traversable<TKey, TValue>
* @template-covariant TIterator as Traversable<TKey, TValue>
*
* @template-implements OuterIterator<TKey, TValue>
*
Expand Down Expand Up @@ -132,9 +132,9 @@ class IteratorIterator implements OuterIterator {
/**
* @template TKey
* @template TValue
* @template TIterator as Traversable<TKey, TValue>
* @template TIterator as Iterator<TKey, TValue>
*
* @template-extends IteratorIterator<TKey, TValue>
* @template-extends IteratorIterator<TKey, TValue, TIterator>
*/
class AppendIterator extends IteratorIterator {
public function __construct(){}
Expand Down Expand Up @@ -319,10 +319,11 @@ class ArrayIterator implements SeekableIterator, ArrayAccess, Serializable, Coun
/**
* @template-covariant TKey
* @template-covariant TValue
* @template-covariant TIterator as Traversable<TKey, TValue>
*
* @template-extends IteratorIterator<TKey, TValue>
* @template-extends IteratorIterator<TKey, TValue, TIterator>
*/
class FilterIterator extends IteratorIterator {
abstract class FilterIterator extends IteratorIterator {
/** @return bool */
abstract public function accept();

Expand All @@ -340,11 +341,12 @@ class FilterIterator extends IteratorIterator {
/**
* @template-covariant TKey
* @template-covariant TValue
* @template-covariant TIterator as Iterator<TKey, TValue>
*
* @template-implements OuterIterator<TKey, TValue>
* @template-implements ArrayAccess<TKey, TValue>
*
* @template-extends IteratorIterator<TKey, TValue>
* @template-extends IteratorIterator<TKey, TValue, TIterator>
*/
class CachingIterator extends IteratorIterator implements OuterIterator , ArrayAccess , Countable {
const CALL_TOSTRING = 1 ;
Expand All @@ -355,7 +357,7 @@ class CachingIterator extends IteratorIterator implements OuterIterator , ArrayA
const FULL_CACHE = 256 ;

/**
* @param Iterator<TKey, TValue> $iterator
* @param TIterator $iterator
* @param int-mask-of<self::*> $flags
*/
public function __construct(Iterator $iterator, int $flags = self::CALL_TOSTRING) {}
Expand All @@ -379,15 +381,16 @@ class CachingIterator extends IteratorIterator implements OuterIterator , ArrayA
/**
* @template-covariant TKey
* @template-covariant TValue
* @template-covariant TIterator as Iterator<TKey, TValue>
*
* @template-implements OuterIterator<TKey, TValue>
*
* @template-extends FilterIterator<TKey, TValue>
* @template-extends FilterIterator<TKey, TValue, TIterator>
*/
class CallbackFilterIterator extends FilterIterator implements OuterIterator {
/**
* @param Iterator<TKey, TValue> $iterator
* @param callable(TValue, TKey, Iterator<TKey, TValue>): bool $callback
* @param TIterator $iterator
* @param callable(TValue, TKey, TIterator): bool $callback
*/
public function __construct(Iterator $iterator, callable $callback) {}

Expand Down Expand Up @@ -527,12 +530,13 @@ class GlobIterator extends FilesystemIterator implements Countable {
/**
* @template-covariant TKey
* @template-covariant TValue
* @template-covariant TIterator as Iterator<TKey, TValue>
*
* @template-extends IteratorIterator<TKey, TValue>
* @template-extends IteratorIterator<TKey, TValue, TIterator>
*/
class InfiniteIterator extends IteratorIterator {
/**
* @param Iterator<TKey, TValue> $iterator
* @param TIterator $iterator
*/
public function __construct(Iterator $iterator) {}

Expand All @@ -552,14 +556,15 @@ class InfiniteIterator extends IteratorIterator {
/**
* @template-covariant TKey
* @template-covariant TValue
* @template-covariant TIterator as Iterator<TKey, TValue>
*
* @template-implements OuterIterator<TKey, TValue>
*
* @template-extends IteratorIterator<TKey, TValue>
* @template-extends IteratorIterator<TKey, TValue, TIterator>
*/
class LimitIterator extends IteratorIterator implements OuterIterator {
/**
* @param Iterator<TKey, TValue> $iterator
* @param TIterator $iterator
*/
public function __construct(Iterator $iterator, int $offset = 0, int $count = -1) {}

Expand All @@ -581,12 +586,13 @@ class LimitIterator extends IteratorIterator implements OuterIterator {
/**
* @template-covariant TKey
* @template-covariant TValue
* @template-covariant TIterator as Iterator<TKey, TValue>
*
* @template-extends IteratorIterator<TKey, TValue>
* @template-extends IteratorIterator<TKey, TValue, TIterator>
*/
class NoRewindIterator extends IteratorIterator {
/**
* @param Iterator<TKey, TValue> $iterator
* @param TIterator $iterator
*/
public function __construct(Iterator $iterator) {}

Expand Down Expand Up @@ -668,18 +674,19 @@ class MultipleIterator implements Iterator {
/**
* @template TKey
* @template TValue
* @template TIterator as RecursiveIterator<TKey, TValue>
*
* @template-extends FilterIterator<TKey, TValue>
* @template-extends FilterIterator<TKey, TValue, TIterator>
* @template-implements RecursiveIterator<TKey, TValue>
*/
abstract class RecursiveFilterIterator extends FilterIterator implements RecursiveIterator {

/**
* @param RecursiveIterator<TKey, TValue> $iterator
* @param TIterator $iterator
*/
public function __construct(RecursiveIterator $iterator) {}
/**
* @return RecursiveFilterIterator<TKey, TValue>
* @return TIterator
*/
public function getChildren() {}

Expand All @@ -704,8 +711,9 @@ abstract class RecursiveFilterIterator extends FilterIterator implements Recursi
/**
* @template TKey
* @template TValue
* @template TIterator as RecursiveIterator<TKey, TValue>
*
* @template-extends RecursiveFilterIterator<TKey, TValue>
* @template-extends RecursiveFilterIterator<TKey, TValue, TIterator>
*/
class ParentIterator extends RecursiveFilterIterator implements RecursiveIterator, OuterIterator {

Expand All @@ -714,7 +722,7 @@ class ParentIterator extends RecursiveFilterIterator implements RecursiveIterato
*/
public function accept() {}
/**
* @param RecursiveIterator<TKey, TValue> $iterator
* @param TIterator $iterator
*/
public function __construct(RecursiveIterator $iterator) {}
/**
Expand Down Expand Up @@ -785,9 +793,10 @@ class RecursiveArrayIterator extends ArrayIterator implements RecursiveIterator
/**
* @template TKey
* @template TValue
* @template TIterator as Iterator<TKey, TValue>
*
* @template-implements RecursiveIterator<TKey, TValue>
* @template-extends ArrayIterator<TKey, TValue>
* @template-extends CachingIterator<TKey, TValue, TIterator>
*/
class RecursiveCachingIterator extends CachingIterator implements RecursiveIterator {

Expand All @@ -799,12 +808,12 @@ class RecursiveCachingIterator extends CachingIterator implements RecursiveItera
const FULL_CACHE = 256 ;

/**
* @param Iterator<TKey, TValue> $iterator
* @param TIterator $iterator
* @param int-mask-of<self::*> $flags
*/
public function __construct(Iterator $iterator, int $flags = 0) {}
/**
* @return RecursiveCachingIterator<TKey,TValue>
* @return RecursiveCachingIterator<TKey,TValue, TIterator>
*/
public function getChildren() {}

Expand All @@ -829,19 +838,20 @@ class RecursiveCachingIterator extends CachingIterator implements RecursiveItera
/**
* @template TKey
* @template TValue
* @template TIterator as RecursiveIterator<TKey, TValue>
*
* @template-implements RecursiveIterator<TKey, TValue>
* @template-extends CallbackFilterIterator<TKey, TValue>
* @template-extends CallbackFilterIterator<TKey, TValue, TIterator>
*/
class RecursiveCallbackFilterIterator extends CallbackFilterIterator implements RecursiveIterator {

/**
* @param RecursiveIterator<TKey, TValue> $iterator
* @param callable(TValue, TKey, RecursiveIterator<TKey, TValue>): bool $callback
* @param TIterator $iterator
* @param callable(TValue, TKey, TIterator): bool $callback
*/
public function __construct(RecursiveIterator $iterator, callable $callback) {}
/**
* @return RecursiveCallbackFilterIterator<TKey, TValue>
* @return RecursiveCallbackFilterIterator<TKey, TValue, TIterator>
*/
public function getChildren() {}

Expand Down Expand Up @@ -926,9 +936,10 @@ class RecursiveIteratorIterator implements OuterIterator {
/**
* @template TKey
* @template TValue
* @template TIterator as RecursiveIterator<TKey, TValue>
*
* @template-implements RecursiveIterator<TKey, TValue>
* @template-extends RegexIterator<TKey, TValue>
* @template-extends RegexIterator<TKey, TValue, TIterator>
*/
class RecursiveRegexIterator extends RegexIterator implements RecursiveIterator {

Expand All @@ -940,7 +951,7 @@ class RecursiveRegexIterator extends RegexIterator implements RecursiveIterator
const USE_KEY = 1 ;

/**
* @param RecursiveIterator<TKey, TValue> $iterator
* @param TIterator $iterator
* @param string $regex
* @param self::MATH|self::GET_MATCH|self::ALL_MATCHES|self::SPLIT|self::REPLACE $mode
* @param self::USE_KEY|0 $flags
Expand Down Expand Up @@ -1063,8 +1074,9 @@ class RecursiveTreeIterator extends RecursiveIteratorIterator implements OuterIt
/**
* @template TKey
* @template TValue
* @template TIterator as Iterator<TKey, TValue>
*
* @template-extends FilterIterator<TKey, TValue>
* @template-extends FilterIterator<TKey, TValue, TIterator>
*/
class RegexIterator extends FilterIterator {
const MATCH = 0 ;
Expand All @@ -1075,7 +1087,7 @@ class RegexIterator extends FilterIterator {
const USE_KEY = 1 ;

/**
* @param Iterator<TKey, TValue> $iterator
* @param TIterator $iterator
* @param string $regex
* @param self::MATCH|self::GET_MATCH|self::ALL_MATCHES|self::SPLIT|self::REPLACE $mode
* @param int-mask<self::USE_KEY> $flags
Expand Down
2 changes: 1 addition & 1 deletion tests/GeneratorTest.php
Expand Up @@ -287,7 +287,7 @@ function generator(): Generator
$iterator = new NoRewindIterator(generator());
',
'assertions' => [
'$iterator' => 'NoRewindIterator<int, string>',
'$iterator' => 'NoRewindIterator<int, string, Generator<int, string, mixed, mixed>>',
]
],
'detectYieldInNew' => [
Expand Down
2 changes: 1 addition & 1 deletion tests/Template/ClassTemplateExtendsTest.php
Expand Up @@ -3670,7 +3670,7 @@ public function foo(int $i): Container
* @template-covariant TKey
* @template-covariant TValue
*
* @template-extends IteratorIterator<TKey, TValue, Traversable<TKey, TValue>>
* @template-extends IteratorIterator<TKey, TValue, Iterator<TKey, TValue>>
*/
abstract class MyFilterIterator extends IteratorIterator {
/** @return bool */
Expand Down

0 comments on commit 1220320

Please sign in to comment.