From 582a0f8a744fa2ebda2d98783c55c78183e8bbed Mon Sep 17 00:00:00 2001 From: Ondrej Mirtes Date: Wed, 31 Jul 2024 10:47:49 +0200 Subject: [PATCH] DefaultStubFilesProvider - consider all composerAutoloaderProjectPaths when filtering 3rd party stub files --- conf/config.neon | 2 +- src/PhpDoc/DefaultStubFilesProvider.php | 26 ++++++++++++++----------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/conf/config.neon b/conf/config.neon index b73dfc3dbc..8adebd5693 100644 --- a/conf/config.neon +++ b/conf/config.neon @@ -469,7 +469,7 @@ services: class: PHPStan\PhpDoc\DefaultStubFilesProvider arguments: stubFiles: %stubFiles% - currentWorkingDirectory: %currentWorkingDirectory% + composerAutoloaderProjectPaths: %composerAutoloaderProjectPaths% autowired: - PHPStan\PhpDoc\StubFilesProvider diff --git a/src/PhpDoc/DefaultStubFilesProvider.php b/src/PhpDoc/DefaultStubFilesProvider.php index da52332a1f..15919f8430 100644 --- a/src/PhpDoc/DefaultStubFilesProvider.php +++ b/src/PhpDoc/DefaultStubFilesProvider.php @@ -20,11 +20,12 @@ class DefaultStubFilesProvider implements StubFilesProvider /** * @param string[] $stubFiles + * @param string[] $composerAutoloaderProjectPaths */ public function __construct( private Container $container, private array $stubFiles, - private string $currentWorkingDirectory, + private array $composerAutoloaderProjectPaths, ) { } @@ -52,19 +53,22 @@ public function getProjectStubFiles(): array return $this->cachedProjectFiles; } - $composerConfig = ComposerHelper::getComposerConfig($this->currentWorkingDirectory); + $filteredStubFiles = $this->getStubFiles(); + foreach ($this->composerAutoloaderProjectPaths as $composerAutoloaderProjectPath) { + $composerConfig = ComposerHelper::getComposerConfig($composerAutoloaderProjectPath); + if ($composerConfig === null) { + continue; + } - if ($composerConfig === null) { - return $this->getStubFiles(); + $vendorDir = ComposerHelper::getVendorDirFromComposerConfig($composerAutoloaderProjectPath, $composerConfig); + $vendorDir = strtr($vendorDir, '\\', '/'); + $filteredStubFiles = array_filter( + $filteredStubFiles, + static fn (string $file): bool => !str_contains(strtr($file, '\\', '/'), $vendorDir) + ); } - $vendorDir = ComposerHelper::getVendorDirFromComposerConfig($this->currentWorkingDirectory, $composerConfig); - $vendorDir = strtr($vendorDir, '\\', '/'); - - return $this->cachedProjectFiles = array_values(array_filter( - $this->getStubFiles(), - static fn (string $file): bool => !str_contains(strtr($file, '\\', '/'), $vendorDir) - )); + return $this->cachedProjectFiles = array_values($filteredStubFiles); } }