Container::getComponents() returns incorrect type
component-model 3.1.0 returns array Container::getComponents() when $deep === false:
https://github.com/nette/component-model/commit/7f613eed7f5e57b6bde2d0be1bfdbb7e161620b3
instead of Iterator:
https://github.com/phpstan/phpstan-nette/blob/8af94743efcc6d1e685f2ffd7ab279e39c96429c/stubs/ComponentModel/Container.stub#L11-L13
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
Thanks for the pointer, I opened https://github.com/phpstan/phpstan-nette/pull/142