Skip to content

Commit f956c6d

Browse files
committed
StubValidator - analyse only project stub files
1 parent 3e95603 commit f956c6d

File tree

6 files changed

+51
-27
lines changed

6 files changed

+51
-27
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,7 @@ jobs:
209209
script:
210210
- "vendor/bin/phing phpstan"
211211
- "vendor/bin/phing phpstan-static-reflection"
212+
- "vendor/bin/phing phpstan-validate-stub-files"
212213
exclude:
213214
- operating-system: windows-latest
214215
script: "vendor/bin/phing phpstan-static-reflection"

build.xml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,27 @@
437437
</exec>
438438
</target>
439439

440+
<target name="phpstan-validate-stub-files">
441+
<touch file="empty.php"/>
442+
<exec
443+
executable="php"
444+
logoutput="true"
445+
passthru="true"
446+
checkreturn="true"
447+
>
448+
<arg value="-d"/>
449+
<arg value="memory_limit=768M"/>
450+
<arg path="bin/phpstan"/>
451+
<arg value="analyse"/>
452+
<arg value="-c"/>
453+
<arg path="conf/config.stubFiles.neon"/>
454+
<arg value="-l"/>
455+
<arg value="8"/>
456+
<arg path="empty.php"/>
457+
</exec>
458+
<delete file="empty.php"/>
459+
</target>
460+
440461
<target name="phpstan-pro">
441462
<property name="phpstan.config" value="build/phpstan-generated.neon"/>
442463
<touch file="${phpstan.config}"/>

conf/config.neon

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
includes:
2+
- config.stubFiles.neon
13
parameters:
24
bootstrap: null
35
bootstrapFiles:
@@ -77,18 +79,6 @@ parameters:
7779
typeAliases: []
7880
universalObjectCratesClasses:
7981
- stdClass
80-
stubFiles:
81-
- ../stubs/ReflectionClass.stub
82-
- ../stubs/iterable.stub
83-
- ../stubs/ArrayObject.stub
84-
- ../stubs/WeakReference.stub
85-
- ../stubs/ext-ds.stub
86-
- ../stubs/PDOStatement.stub
87-
- ../stubs/ReflectionFunctionAbstract.stub
88-
- ../stubs/date.stub
89-
- ../stubs/zip.stub
90-
- ../stubs/dom.stub
91-
- ../stubs/spl.stub
9282
earlyTerminatingMethodCalls: []
9383
earlyTerminatingFunctionCalls: []
9484
memoryLimitFile: %tmpDir%/.memory_limit
@@ -353,8 +343,6 @@ services:
353343

354344
-
355345
class: PHPStan\PhpDoc\StubValidator
356-
arguments:
357-
stubFiles: %stubFiles%
358346

359347
-
360348
class: PHPStan\Analyser\Analyser

conf/config.stubFiles.neon

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
parameters:
2+
stubFiles:
3+
- ../stubs/ReflectionClass.stub
4+
- ../stubs/iterable.stub
5+
- ../stubs/ArrayObject.stub
6+
- ../stubs/WeakReference.stub
7+
- ../stubs/ext-ds.stub
8+
- ../stubs/PDOStatement.stub
9+
- ../stubs/ReflectionFunctionAbstract.stub
10+
- ../stubs/date.stub
11+
- ../stubs/zip.stub
12+
- ../stubs/dom.stub
13+
- ../stubs/spl.stub

src/Command/AnalyseApplication.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,11 @@ public function analyse(
6565
): AnalysisResult
6666
{
6767
$this->updateMemoryLimitFile();
68-
$stubErrors = $this->stubValidator->validate();
68+
$projectStubFiles = [];
69+
if ($projectConfigArray !== null) {
70+
$projectStubFiles = $projectConfigArray['parameters']['stubFiles'] ?? [];
71+
}
72+
$stubErrors = $this->stubValidator->validate($projectStubFiles);
6973

7074
register_shutdown_function(function (): void {
7175
$error = error_get_last();

src/PhpDoc/StubValidator.php

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -47,28 +47,25 @@
4747
class StubValidator
4848
{
4949

50-
/** @var string[] */
51-
private array $stubFiles;
52-
5350
private \PHPStan\DependencyInjection\DerivativeContainerFactory $derivativeContainerFactory;
5451

55-
/**
56-
* @param string[] $stubFiles
57-
*/
5852
public function __construct(
59-
array $stubFiles,
6053
DerivativeContainerFactory $derivativeContainerFactory
6154
)
6255
{
63-
$this->stubFiles = $stubFiles;
6456
$this->derivativeContainerFactory = $derivativeContainerFactory;
6557
}
6658

6759
/**
60+
* @param string[] $stubFiles
6861
* @return \PHPStan\Analyser\Error[]
6962
*/
70-
public function validate(): array
63+
public function validate(array $stubFiles): array
7164
{
65+
if (count($stubFiles) === 0) {
66+
return [];
67+
}
68+
7269
$originalBroker = Broker::getInstance();
7370
$container = $this->derivativeContainerFactory->create([
7471
__DIR__ . '/../../conf/config.stubValidator.neon',
@@ -81,12 +78,12 @@ public function validate(): array
8178

8279
/** @var NodeScopeResolver $nodeScopeResolver */
8380
$nodeScopeResolver = $container->getByType(NodeScopeResolver::class);
84-
$nodeScopeResolver->setAnalysedFiles($this->stubFiles);
81+
$nodeScopeResolver->setAnalysedFiles($stubFiles);
8582

86-
$analysedFiles = array_fill_keys($this->stubFiles, true);
83+
$analysedFiles = array_fill_keys($stubFiles, true);
8784

8885
$errors = [];
89-
foreach ($this->stubFiles as $stubFile) {
86+
foreach ($stubFiles as $stubFile) {
9087
$tmpErrors = $fileAnalyser->analyseFile(
9188
$stubFile,
9289
$analysedFiles,

0 commit comments

Comments
 (0)