From 085d9f2bdcc4f704eeefac07054457c47eb430a2 Mon Sep 17 00:00:00 2001 From: Ondrej Mirtes Date: Tue, 4 Nov 2025 09:37:13 +0100 Subject: [PATCH] Fix `composerAutoloaderProjectPaths` array so that the items always refer to dir with composer.json in it --- bin/phpstan | 7 +++++-- src/Internal/ComposerHelper.php | 12 ++++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/bin/phpstan b/bin/phpstan index 89bbe2c381..7be491b792 100755 --- a/bin/phpstan +++ b/bin/phpstan @@ -20,12 +20,13 @@ use Symfony\Component\Console\Helper\ProgressBar; $devOrPharLoader = require_once __DIR__ . '/../vendor/autoload.php'; require_once __DIR__ . '/../preload.php'; + $composerJsonPath = ComposerHelper::getComposerJsonPath(getcwd()); $composer = ComposerHelper::getComposerConfig(getcwd()); if ($composer !== null) { $vendorDirectory = ComposerHelper::getVendorDirFromComposerConfig(getcwd(), $composer); } else { - $vendorDirectory = getcwd() . '/' . 'vendor'; + $vendorDirectory = getcwd() . '/vendor'; } $devOrPharLoader->unregister(); @@ -43,7 +44,9 @@ use Symfony\Component\Console\Helper\ProgressBar; $autoloadFunctionsBefore = spl_autoload_functions(); if (@is_file($autoloaderInWorkingDirectory)) { - $composerAutoloaderProjectPaths[] = dirname($autoloaderInWorkingDirectory, 2); + if ($composerJsonPath !== null) { + $composerAutoloaderProjectPaths[] = dirname($composerJsonPath); + } require_once $autoloaderInWorkingDirectory; } diff --git a/src/Internal/ComposerHelper.php b/src/Internal/ComposerHelper.php index e1995bc34d..0665a5bdf4 100644 --- a/src/Internal/ComposerHelper.php +++ b/src/Internal/ComposerHelper.php @@ -25,8 +25,7 @@ final class ComposerHelper public static function getComposerConfig(string $root): ?array { $composerJsonPath = self::getComposerJsonPath($root); - - if (!is_file($composerJsonPath)) { + if ($composerJsonPath === null) { return null; } @@ -39,13 +38,18 @@ public static function getComposerConfig(string $root): ?array } } - private static function getComposerJsonPath(string $root): string + public static function getComposerJsonPath(string $root): ?string { $envComposer = getenv('COMPOSER'); $fileName = is_string($envComposer) ? $envComposer : 'composer.json'; $fileName = basename(trim($fileName)); - return $root . '/' . $fileName; + $path = $root . '/' . $fileName; + if (!is_file($path)) { + return null; + } + + return $path; } /**