77use PHPStan \ExtensionInstaller \GeneratedConfig ;
88use PHPStan \File \FileHelper ;
99use PHPStan \Internal \ComposerHelper ;
10+ use PHPStan \Php \ComposerPhpVersionFactory ;
1011use PHPStan \Php \PhpVersion ;
1112use ReflectionClass ;
1213use function array_key_exists ;
1718use function explode ;
1819use function implode ;
1920use function in_array ;
21+ use function is_array ;
2022use function is_file ;
2123use function is_readable ;
2224use 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 (
0 commit comments