1
0
mirror of https://github.com/danog/psalm.git synced 2025-01-22 13:51:54 +01:00

Use callable to filter files in FileProvider::getFilesInDir()

This commit is contained in:
Tomasz Mlynski 2021-12-22 19:47:57 +01:00
parent f2db139b15
commit a514df2bb7
No known key found for this signature in database
GPG Key ID: 665B4A17698A1954
2 changed files with 14 additions and 8 deletions

View File

@ -57,13 +57,13 @@ class FakeFileProvider extends FileProvider
/** /**
* @param array<string> $file_extensions * @param array<string> $file_extensions
* @param null|callable(string):bool $directory_filter * @param null|callable(string):bool $filter
* *
* @return list<string> * @return list<string>
*/ */
public function getFilesInDir(string $dir_path, array $file_extensions, callable $directory_filter = null): array public function getFilesInDir(string $dir_path, array $file_extensions, callable $filter = null): array
{ {
$file_paths = parent::getFilesInDir($dir_path, $file_extensions, $directory_filter); $file_paths = parent::getFilesInDir($dir_path, $file_extensions, $filter);
foreach ($this->fake_files as $file_path => $_) { foreach ($this->fake_files as $file_path => $_) {
if (strpos(strtolower($file_path), strtolower($dir_path)) === 0) { if (strpos(strtolower($file_path), strtolower($dir_path)) === 0) {

View File

@ -118,11 +118,11 @@ class FileProvider
/** /**
* @param array<string> $file_extensions * @param array<string> $file_extensions
* @param null|callable(string):bool $directory_filter * @param null|callable(string):bool $filter
* *
* @return list<string> * @return list<string>
*/ */
public function getFilesInDir(string $dir_path, array $file_extensions, callable $directory_filter = null): array public function getFilesInDir(string $dir_path, array $file_extensions, callable $filter = null): array
{ {
$file_paths = []; $file_paths = [];
@ -131,12 +131,18 @@ class FileProvider
FilesystemIterator::CURRENT_AS_PATHNAME | FilesystemIterator::SKIP_DOTS FilesystemIterator::CURRENT_AS_PATHNAME | FilesystemIterator::SKIP_DOTS
); );
if ($directory_filter !== null) { if ($filter !== null) {
$iterator = new RecursiveCallbackFilterIterator( $iterator = new RecursiveCallbackFilterIterator(
$iterator, $iterator,
/** @param mixed $_ */ /** @param mixed $_ */
function (string $current, $_, RecursiveIterator $iterator) use ($directory_filter): bool { function (string $current, $_, RecursiveIterator $iterator) use ($filter): bool {
return !$iterator->hasChildren() || $directory_filter($current . DIRECTORY_SEPARATOR); if ($iterator->hasChildren()) {
$path = $current . DIRECTORY_SEPARATOR;
} else {
$path = $current;
}
return $filter($path);
} }
); );
} }