Skip to content

Commit 11e9969

Browse files
committed
Update ComponentModel\Container stub for component-model 3.1.0
That version changes the return type to array when `$deep` argument is `false` (default): nette/component-model@7f613ee It also deprecates the arguments but we cannot add deprecated annotation to those. nette/component-model@4e0946a
1 parent 8af9474 commit 11e9969

File tree

3 files changed

+73
-1
lines changed

3 files changed

+73
-1
lines changed

Diff for: extension.neon

+5-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ parameters:
99
- stubs/Application/UI/Component.stub
1010
- stubs/Application/UI/Multiplier.stub
1111
- stubs/ComponentModel/Component.stub
12-
- stubs/ComponentModel/Container.stub
1312
- stubs/ComponentModel/IComponent.stub
1413
- stubs/ComponentModel/IContainer.stub
1514
- stubs/Database/ResultSet.stub
@@ -110,3 +109,8 @@ services:
110109
class: PHPStan\Rule\Nette\PresenterInjectedPropertiesExtension
111110
tags:
112111
- phpstan.properties.readWriteExtension
112+
113+
-
114+
class: PHPStan\Stubs\Nette\StubFilesExtensionLoader
115+
tags:
116+
- phpstan.stubFilesExtension

Diff for: src/Stubs/Nette/StubFilesExtensionLoader.php

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace PHPStan\Stubs\Nette;
4+
5+
use Composer\InstalledVersions;
6+
use OutOfBoundsException;
7+
use PHPStan\PhpDoc\StubFilesExtension;
8+
use function class_exists;
9+
use function dirname;
10+
use function version_compare;
11+
12+
class StubFilesExtensionLoader implements StubFilesExtension
13+
{
14+
15+
public function getFiles(): array
16+
{
17+
$stubsDir = dirname(dirname(dirname(__DIR__))) . '/stubs';
18+
$path = $stubsDir;
19+
20+
$files = [];
21+
22+
$componentModelVersion = self::getInstalledVersion('nette/component-model');
23+
if ($componentModelVersion !== null && version_compare($componentModelVersion, '3.1.0', '>=')) {
24+
$files[] = $path . '/ComponentModel/Container_3_1.stub';
25+
} else {
26+
$files[] = $path . '/ComponentModel/Container.stub';
27+
}
28+
29+
return $files;
30+
}
31+
32+
private static function getInstalledVersion(string $package): ?string
33+
{
34+
if (!class_exists(InstalledVersions::class)) {
35+
return null;
36+
}
37+
38+
try {
39+
$installedVersion = InstalledVersions::getVersion($package);
40+
} catch (OutOfBoundsException $e) {
41+
return null;
42+
}
43+
44+
return $installedVersion;
45+
}
46+
47+
}

Diff for: stubs/ComponentModel/Container_3_1.stub

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace Nette\ComponentModel;
4+
5+
class Container extends Component implements IContainer
6+
{
7+
8+
/**
9+
* @template T of \Nette\ComponentModel\IComponent
10+
* @phpstan-param null|class-string<T> $filterType
11+
* @phpstan-return (
12+
* $deep is true
13+
* ? ($filterType is null ? array<int|string, \Nette\ComponentModel\IComponent> : array<int|string, T>)
14+
* : ($filterType is null ? \Iterator<int|string, \Nette\ComponentModel\IComponent> : \Iterator<int|string, T>)
15+
* )
16+
*/
17+
public function getComponents(bool $deep = false, string $filterType = null): \Iterator
18+
{
19+
// nothing
20+
}
21+
}

0 commit comments

Comments
 (0)