Container::getComponents() returns incorrect type
Opened this issue · 3 comments
component-model 3.1.0 returns array Container::getComponents() when $deep === false:
instead of Iterator:
phpstan-nette/stubs/ComponentModel/Container.stub
Lines 11 to 13 in 8af9474
The return type should be something like
@phpstan-return (
$deep is true
? ($filterType is null ? array<int|string, \Nette\ComponentModel\IComponent> : array<int|string, T>)
: ($filterType is null ? \Iterator<int|string, \Nette\ComponentModel\IComponent> : \Iterator<int|string, T>)
)I can open a PR but not sure what to do about older versions. Should I just add conflict with < 3.1.0?
Or maybe we should even remove the stub since the arguments were deprecated in 3.1.0 and Nette has correct annotations for argument-less use.
You can detect which version of Nette the project uses. This has similar approach: https://github.com/phpstan/phpstan-doctrine/blob/4058fdc7333cb9e46f8cf5b952cd9cb59658f2e5/src/Stubs/Doctrine/StubFilesExtensionLoader.php#L75-L84