From 8c6a6258e2fb7ad1061c51d9c1dc6db9a1b52675 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Mon, 20 Oct 2025 21:19:26 +0200 Subject: [PATCH] add simple script to resolve phpstan version --- bin/add-phpstan-self-replace.php | 12 ++++-------- build/build-rector-scoped.sh | 17 ++--------------- composer-dependency-analyser.php | 1 - phpstan.neon | 4 ---- src/Composer/InstalledPackageResolver.php | 17 ++++++++++++++++- 5 files changed, 22 insertions(+), 29 deletions(-) diff --git a/bin/add-phpstan-self-replace.php b/bin/add-phpstan-self-replace.php index 9d002b2a05c..b6770821156 100644 --- a/bin/add-phpstan-self-replace.php +++ b/bin/add-phpstan-self-replace.php @@ -6,20 +6,16 @@ use Nette\Utils\FileSystem; use Nette\Utils\Json; -use PackageVersions\Versions; +use Rector\Composer\InstalledPackageResolver; require __DIR__ . '/../vendor/autoload.php'; -if (! class_exists(Versions::class)) { - echo 'You need to run `composer require ocramius/package-versions` first' . PHP_EOL; - exit(1); -} - $composerJsonFileContents = FileSystem::read(__DIR__ . '/../composer.json'); +$installedPackageResolver = new InstalledPackageResolver(__DIR__ . '/..'); +$phpstanVersion = $installedPackageResolver->resolvePackageVersion('phpstan/phpstan'); + $composerJson = Json::decode($composerJsonFileContents, forceArrays: true); -// result output is like: // 1.0.0@0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33 -[$phpstanVersion] = explode('@', Versions::getVersion('phpstan/phpstan')); $composerJson['replace']['phpstan/phpstan'] = $phpstanVersion; $modifiedComposerJsonFileContents = Json::encode($composerJson, pretty: true); diff --git a/build/build-rector-scoped.sh b/build/build-rector-scoped.sh index 38def6707ff..86c11ae01b8 100644 --- a/build/build-rector-scoped.sh +++ b/build/build-rector-scoped.sh @@ -30,26 +30,13 @@ note "Starts" note "Downloading php-scoper.phar" wget https://github.com/humbug/php-scoper/releases/download/0.18.17/php-scoper.phar -N --no-verbose -# make PackageVersions exists -# here while wait for PHP 8.5 compatible code -# see https://github.com/Ocramius/PackageVersions/pull/270 -# to allow us on rector to create downgrade PHP 8.5 rules with define -# -# #[RequiresPhp('>= 8.5')] -# -# On Downgrade PHP 8.5 rule, see https://github.com/rectorphp/rector-downgrade-php/pull/337 -# -composer require ocramius/package-versions --working-dir "$BUILD_DIRECTORY" --update-no-dev - php "$BUILD_DIRECTORY/bin/add-phpstan-self-replace.php" -# avoid phpstan/phpstan and ocramius/package-versions dependency duplicate -note "Remove PHPStan and PackageVersions to avoid duplicating it" +note "Remove PHPStan to avoid duplicating it" composer remove phpstan/phpstan -W --update-no-dev --working-dir "$BUILD_DIRECTORY" -composer remove ocramius/package-versions -W --update-no-dev --working-dir "$BUILD_DIRECTORY" -note "PHPStan and PackageVersions now removed, safe to start php-scoper from here" +note "PHPStan now removed, safe to start php-scoper from here" # Work around possible PHP memory limits note "Running php-scoper on /bin, /config, /src, /rules and /vendor" diff --git a/composer-dependency-analyser.php b/composer-dependency-analyser.php index 817df7532d3..ab40195069f 100644 --- a/composer-dependency-analyser.php +++ b/composer-dependency-analyser.php @@ -21,7 +21,6 @@ __DIR__ . '/stubs', __DIR__ . '/tests', __DIR__ . '/rules-tests', - __DIR__ . '/bin/add-phpstan-self-replace.php', ], [ErrorType::UNKNOWN_CLASS]) ->disableExtensionsAnalysis(); diff --git a/phpstan.neon b/phpstan.neon index b63fa6411e0..6091df0d97b 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -92,10 +92,6 @@ parameters: message: '#Function "var_dump\(\)" cannot be used/left in the code#' path: src/functions/node_helper.php - - - message: '#Function "class_exists\(\)" cannot be used/left in the code#' - path: bin/add-phpstan-self-replace.php - # lack of generic array in nikic/php-parser - '#Method (.*?) should return array but returns array#' diff --git a/src/Composer/InstalledPackageResolver.php b/src/Composer/InstalledPackageResolver.php index b5431d9a17b..50c4bc44ff3 100644 --- a/src/Composer/InstalledPackageResolver.php +++ b/src/Composer/InstalledPackageResolver.php @@ -42,7 +42,7 @@ public function resolve(): array return $this->resolvedInstalledPackages; } - $installedPackagesFilePath = self::resolveVendorDir() . '/composer/installed.json'; + $installedPackagesFilePath = $this->resolveVendorDir() . '/composer/installed.json'; if (! file_exists($installedPackagesFilePath)) { throw new ShouldNotHappenException( 'The installed package json not found. Make sure you run `composer update` and the "vendor/composer/installed.json" file exists' @@ -59,6 +59,20 @@ public function resolve(): array return $installedPackages; } + public function resolvePackageVersion(string $packageName): ?string + { + $installedPackages = $this->resolve(); + foreach ($installedPackages as $installedPackage) { + if ($installedPackage->getName() !== $packageName) { + continue; + } + + return $installedPackage->getVersion(); + } + + return null; + } + /** * @param mixed[] $packages * @return InstalledPackage[] @@ -77,6 +91,7 @@ private function createInstalledPackages(array $packages): array private function resolveVendorDir(): string { $projectComposerJsonFilePath = $this->projectDirectory . '/composer.json'; + if (\file_exists($projectComposerJsonFilePath)) { $projectComposerContents = FileSystem::read($projectComposerJsonFilePath); $projectComposerJson = Json::decode($projectComposerContents, true);