rector/vendor/symplify/smart-file-system/src/Finder/SmartFinder.php
Tomas Votruba 4e3847e1bc Updated Rector to commit 3c07468691132d0246e55627495a1e7d4cd76a8d
3c07468691 [DX] Localize few PackageBuilder classes (#2884)
2022-09-01 19:50:06 +00:00

67 lines
2.2 KiB
PHP

<?php
declare (strict_types=1);
namespace RectorPrefix202209\Symplify\SmartFileSystem\Finder;
use RectorPrefix202209\Symfony\Component\Finder\Finder;
use RectorPrefix202209\Symplify\SmartFileSystem\FileSystemFilter;
use Symplify\SmartFileSystem\SmartFileInfo;
/**
* @api
* @see \Symplify\SmartFileSystem\Tests\Finder\SmartFinder\SmartFinderTest
*/
final class SmartFinder
{
/**
* @var \Symplify\SmartFileSystem\Finder\FinderSanitizer
*/
private $finderSanitizer;
/**
* @var \Symplify\SmartFileSystem\FileSystemFilter
*/
private $fileSystemFilter;
public function __construct(FinderSanitizer $finderSanitizer, FileSystemFilter $fileSystemFilter)
{
$this->finderSanitizer = $finderSanitizer;
$this->fileSystemFilter = $fileSystemFilter;
}
/**
* @param string[] $directoriesOrFiles
* @return SmartFileInfo[]
*/
public function findPaths(array $directoriesOrFiles, string $path) : array
{
$directories = $this->fileSystemFilter->filterDirectories($directoriesOrFiles);
$fileInfos = [];
if ($directories !== []) {
$finder = new Finder();
$finder->name('*')->in($directories)->path($path)->files()->sortByName();
$fileInfos = $this->finderSanitizer->sanitize($finder);
}
return $fileInfos;
}
/**
* @param string[] $directoriesOrFiles
* @param string[] $excludedDirectories
* @return SmartFileInfo[]
*/
public function find(array $directoriesOrFiles, string $name, array $excludedDirectories = []) : array
{
$directories = $this->fileSystemFilter->filterDirectories($directoriesOrFiles);
$fileInfos = [];
if ($directories !== []) {
$finder = new Finder();
$finder->name($name)->in($directories)->files()->sortByName();
if ($excludedDirectories !== []) {
$finder->exclude($excludedDirectories);
}
$fileInfos = $this->finderSanitizer->sanitize($finder);
}
$files = $this->fileSystemFilter->filterFiles($directoriesOrFiles);
foreach ($files as $file) {
$fileInfos[] = new SmartFileInfo($file);
}
return $fileInfos;
}
}