Skip to content

Commit f243636

Browse files
authored
More details php version information in diagnose
1 parent 9717564 commit f243636

File tree

3 files changed

+53
-5
lines changed

3 files changed

+53
-5
lines changed

Diff for: conf/config.neon

+1
Original file line numberDiff line numberDiff line change
@@ -2108,6 +2108,7 @@ services:
21082108
arguments:
21092109
composerAutoloaderProjectPaths: %composerAutoloaderProjectPaths%
21102110
allConfigFiles: %allConfigFiles%
2111+
configPhpVersion: %phpVersion%
21112112
autowired: false
21122113

21132114
# Error formatters

Diff for: src/Diagnose/PHPStanDiagnoseExtension.php

+44-5
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use PHPStan\ExtensionInstaller\GeneratedConfig;
88
use PHPStan\File\FileHelper;
99
use PHPStan\Internal\ComposerHelper;
10+
use PHPStan\Php\ComposerPhpVersionFactory;
1011
use PHPStan\Php\PhpVersion;
1112
use ReflectionClass;
1213
use function array_key_exists;
@@ -17,6 +18,7 @@
1718
use function explode;
1819
use function implode;
1920
use function in_array;
21+
use function is_array;
2022
use function is_file;
2123
use function is_readable;
2224
use function sprintf;
@@ -29,14 +31,17 @@ final class PHPStanDiagnoseExtension implements DiagnoseExtension
2931
{
3032

3133
/**
34+
* @param int|array{min: int, max: int}|null $configPhpVersion
3235
* @param string[] $composerAutoloaderProjectPaths
3336
* @param string [] $allConfigFiles
3437
*/
3538
public function __construct(
3639
private PhpVersion $phpVersion,
40+
private int|array|null $configPhpVersion,
3741
private FileHelper $fileHelper,
3842
private array $composerAutoloaderProjectPaths,
3943
private array $allConfigFiles,
44+
private ComposerPhpVersionFactory $composerPhpVersionFactory,
4045
)
4146
{
4247
}
@@ -48,11 +53,45 @@ public function print(Output $output): void
4853
'<info>PHP runtime version:</info> %s',
4954
$phpRuntimeVersion->getVersionString(),
5055
));
51-
$output->writeLineFormatted(sprintf(
52-
'<info>PHP version for analysis:</info> %s (from %s)',
53-
$this->phpVersion->getVersionString(),
54-
$this->phpVersion->getSourceLabel(),
55-
));
56+
57+
if (
58+
$this->phpVersion->getSource() === PhpVersion::SOURCE_CONFIG
59+
&& is_array($this->configPhpVersion)
60+
) {
61+
$minVersion = new PhpVersion($this->configPhpVersion['min']);
62+
$maxVersion = new PhpVersion($this->configPhpVersion['max']);
63+
64+
$output->writeLineFormatted(sprintf(
65+
'<info>PHP version for analysis:</info> %s-%s (from %s)',
66+
$minVersion->getVersionString(),
67+
$maxVersion->getVersionString(),
68+
$this->phpVersion->getSourceLabel(),
69+
));
70+
71+
} else {
72+
$minComposerPhpVersion = $this->composerPhpVersionFactory->getMinVersion();
73+
$maxComposerPhpVersion = $this->composerPhpVersionFactory->getMaxVersion();
74+
if ($minComposerPhpVersion !== null && $maxComposerPhpVersion !== null) {
75+
if ($minComposerPhpVersion->getVersionId() !== $maxComposerPhpVersion->getVersionId()) {
76+
$output->writeLineFormatted(sprintf(
77+
'<info>PHP composer.json required version:</info> %s-%s',
78+
$minComposerPhpVersion->getVersionString(),
79+
$maxComposerPhpVersion->getVersionString(),
80+
));
81+
} else {
82+
$output->writeLineFormatted(sprintf(
83+
'<info>PHP composer.json required version:</info> %s',
84+
$minComposerPhpVersion->getVersionString(),
85+
));
86+
}
87+
}
88+
89+
$output->writeLineFormatted(sprintf(
90+
'<info>PHP version for analysis:</info> %s (from %s)',
91+
$this->phpVersion->getVersionString(),
92+
$this->phpVersion->getSourceLabel(),
93+
));
94+
}
5695
$output->writeLineFormatted('');
5796

5897
$output->writeLineFormatted(sprintf(

Diff for: src/Php/PhpVersion.php

+8
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@ public function __construct(private int $versionId, private int $source = self::
2222
{
2323
}
2424

25+
/**
26+
* @return self::SOURCE_*
27+
*/
28+
public function getSource(): int
29+
{
30+
return $this->source;
31+
}
32+
2533
public function getSourceLabel(): string
2634
{
2735
switch ($this->source) {

0 commit comments

Comments
 (0)