Skip to content

Commit

Permalink
StubValidator - analyse only project stub files
Browse files Browse the repository at this point in the history
  • Loading branch information
ondrejmirtes committed Nov 23, 2020
1 parent 3e95603 commit f956c6d
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 27 deletions.
1 change: 1 addition & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,7 @@ jobs:
script:
- "vendor/bin/phing phpstan"
- "vendor/bin/phing phpstan-static-reflection"
- "vendor/bin/phing phpstan-validate-stub-files"
exclude:
- operating-system: windows-latest
script: "vendor/bin/phing phpstan-static-reflection"
Expand Down
21 changes: 21 additions & 0 deletions build.xml
Original file line number Diff line number Diff line change
Expand Up @@ -437,6 +437,27 @@
</exec>
</target>

<target name="phpstan-validate-stub-files">
<touch file="empty.php"/>
<exec
executable="php"
logoutput="true"
passthru="true"
checkreturn="true"
>
<arg value="-d"/>
<arg value="memory_limit=768M"/>
<arg path="bin/phpstan"/>
<arg value="analyse"/>
<arg value="-c"/>
<arg path="conf/config.stubFiles.neon"/>
<arg value="-l"/>
<arg value="8"/>
<arg path="empty.php"/>
</exec>
<delete file="empty.php"/>
</target>

<target name="phpstan-pro">
<property name="phpstan.config" value="build/phpstan-generated.neon"/>
<touch file="${phpstan.config}"/>
Expand Down
16 changes: 2 additions & 14 deletions conf/config.neon
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
includes:
- config.stubFiles.neon
parameters:
bootstrap: null
bootstrapFiles:
Expand Down Expand Up @@ -77,18 +79,6 @@ parameters:
typeAliases: []
universalObjectCratesClasses:
- stdClass
stubFiles:
- ../stubs/ReflectionClass.stub
- ../stubs/iterable.stub
- ../stubs/ArrayObject.stub
- ../stubs/WeakReference.stub
- ../stubs/ext-ds.stub
- ../stubs/PDOStatement.stub
- ../stubs/ReflectionFunctionAbstract.stub
- ../stubs/date.stub
- ../stubs/zip.stub
- ../stubs/dom.stub
- ../stubs/spl.stub
earlyTerminatingMethodCalls: []
earlyTerminatingFunctionCalls: []
memoryLimitFile: %tmpDir%/.memory_limit
Expand Down Expand Up @@ -353,8 +343,6 @@ services:

-
class: PHPStan\PhpDoc\StubValidator
arguments:
stubFiles: %stubFiles%

-
class: PHPStan\Analyser\Analyser
Expand Down
13 changes: 13 additions & 0 deletions conf/config.stubFiles.neon
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
parameters:
stubFiles:
- ../stubs/ReflectionClass.stub
- ../stubs/iterable.stub
- ../stubs/ArrayObject.stub
- ../stubs/WeakReference.stub
- ../stubs/ext-ds.stub
- ../stubs/PDOStatement.stub
- ../stubs/ReflectionFunctionAbstract.stub
- ../stubs/date.stub
- ../stubs/zip.stub
- ../stubs/dom.stub
- ../stubs/spl.stub
6 changes: 5 additions & 1 deletion src/Command/AnalyseApplication.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,11 @@ public function analyse(
): AnalysisResult
{
$this->updateMemoryLimitFile();
$stubErrors = $this->stubValidator->validate();
$projectStubFiles = [];
if ($projectConfigArray !== null) {
$projectStubFiles = $projectConfigArray['parameters']['stubFiles'] ?? [];
}
$stubErrors = $this->stubValidator->validate($projectStubFiles);

register_shutdown_function(function (): void {
$error = error_get_last();
Expand Down
21 changes: 9 additions & 12 deletions src/PhpDoc/StubValidator.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,28 +47,25 @@
class StubValidator
{

/** @var string[] */
private array $stubFiles;

private \PHPStan\DependencyInjection\DerivativeContainerFactory $derivativeContainerFactory;

/**
* @param string[] $stubFiles
*/
public function __construct(
array $stubFiles,
DerivativeContainerFactory $derivativeContainerFactory
)
{
$this->stubFiles = $stubFiles;
$this->derivativeContainerFactory = $derivativeContainerFactory;
}

/**
* @param string[] $stubFiles
* @return \PHPStan\Analyser\Error[]
*/
public function validate(): array
public function validate(array $stubFiles): array
{
if (count($stubFiles) === 0) {
return [];
}

$originalBroker = Broker::getInstance();
$container = $this->derivativeContainerFactory->create([
__DIR__ . '/../../conf/config.stubValidator.neon',
Expand All @@ -81,12 +78,12 @@ public function validate(): array

/** @var NodeScopeResolver $nodeScopeResolver */
$nodeScopeResolver = $container->getByType(NodeScopeResolver::class);
$nodeScopeResolver->setAnalysedFiles($this->stubFiles);
$nodeScopeResolver->setAnalysedFiles($stubFiles);

$analysedFiles = array_fill_keys($this->stubFiles, true);
$analysedFiles = array_fill_keys($stubFiles, true);

$errors = [];
foreach ($this->stubFiles as $stubFile) {
foreach ($stubFiles as $stubFile) {
$tmpErrors = $fileAnalyser->analyseFile(
$stubFile,
$analysedFiles,
Expand Down

0 comments on commit f956c6d

Please sign in to comment.