HiddenGeneratorReturn
Emitted when a generator returns a value, but its declared return type (iterable, Iterator, Traversable, …) doesn't mention Generator, so the value can't be read back through the declared type.
<?php
/** @return iterable<int, string> */
function gen(): iterable {
yield 'a';
return 1; // HiddenGeneratorReturn
}
Why this is bad
A function containing yield always returns a Generator. The value of return is only reachable with Generator::getReturn(), which callers can't use on an iterable.
How to fix
Declare a Generator return type, whose fourth template parameter is the type of the returned value:
<?php
/** @return Generator<int, string, mixed, int> */
function gen(): Generator {
yield 'a';
return 1; // no issue
}
Or remove the returned value (return; and return null; are not reported).