mirror of
https://github.com/danog/psalm.git
synced 2024-11-27 12:55:26 +01:00
Add callable $directory_filter
to FileProvider::getFilesInDir()
This commit is contained in:
parent
837075a378
commit
d00c733c1f
@ -57,12 +57,13 @@ class FakeFileProvider extends FileProvider
|
||||
|
||||
/**
|
||||
* @param array<string> $file_extensions
|
||||
* @param null|callable(string):bool $directory_filter
|
||||
*
|
||||
* @return list<string>
|
||||
*/
|
||||
public function getFilesInDir(string $dir_path, array $file_extensions): array
|
||||
public function getFilesInDir(string $dir_path, array $file_extensions, callable $directory_filter = null): array
|
||||
{
|
||||
$file_paths = parent::getFilesInDir($dir_path, $file_extensions);
|
||||
$file_paths = parent::getFilesInDir($dir_path, $file_extensions, $directory_filter);
|
||||
|
||||
foreach ($this->fake_files as $file_path => $_) {
|
||||
if (strpos(strtolower($file_path), strtolower($dir_path)) === 0) {
|
||||
|
@ -2,7 +2,9 @@
|
||||
namespace Psalm\Internal\Provider;
|
||||
|
||||
use FilesystemIterator;
|
||||
use RecursiveCallbackFilterIterator;
|
||||
use RecursiveDirectoryIterator;
|
||||
use RecursiveIterator;
|
||||
use RecursiveIteratorIterator;
|
||||
use UnexpectedValueException;
|
||||
|
||||
@ -14,6 +16,8 @@ use function in_array;
|
||||
use function is_dir;
|
||||
use function strtolower;
|
||||
|
||||
use const DIRECTORY_SEPARATOR;
|
||||
|
||||
class FileProvider
|
||||
{
|
||||
/**
|
||||
@ -113,10 +117,11 @@ class FileProvider
|
||||
|
||||
/**
|
||||
* @param array<string> $file_extensions
|
||||
* @param null|callable(string):bool $directory_filter
|
||||
*
|
||||
* @return list<string>
|
||||
*/
|
||||
public function getFilesInDir(string $dir_path, array $file_extensions): array
|
||||
public function getFilesInDir(string $dir_path, array $file_extensions, callable $directory_filter = null): array
|
||||
{
|
||||
$file_paths = [];
|
||||
|
||||
@ -125,6 +130,16 @@ class FileProvider
|
||||
FilesystemIterator::CURRENT_AS_PATHNAME | FilesystemIterator::SKIP_DOTS
|
||||
);
|
||||
|
||||
if ($directory_filter !== null) {
|
||||
$iterator = new RecursiveCallbackFilterIterator(
|
||||
$iterator,
|
||||
/** @param mixed $_ */
|
||||
function (string $current, $_, RecursiveIterator $iterator) use ($directory_filter): bool {
|
||||
return !$iterator->hasChildren() || $directory_filter($current . DIRECTORY_SEPARATOR);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/** @var RecursiveDirectoryIterator */
|
||||
$iterator = new RecursiveIteratorIterator($iterator);
|
||||
$iterator->rewind();
|
||||
|
Loading…
Reference in New Issue
Block a user