Skip to content

Commit

Permalink
[DX] Use local file and directory filter (#2875)
Browse files Browse the repository at this point in the history
  • Loading branch information
TomasVotruba committed Aug 31, 2022
1 parent 4b6d114 commit 1c4307b
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 9 deletions.
33 changes: 33 additions & 0 deletions src/FileSystem/FileAndDirectoryFilter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php

declare(strict_types=1);

namespace Rector\Core\FileSystem;

/**
* @see \Rector\Core\Tests\FileSystem\FileAndDirectoryFilter\FileAndDirectoryFilterTest
*/
final class FileAndDirectoryFilter
{
/**
* @param string[] $filesAndDirectories
* @return string[]
*/
public function filterDirectories(array $filesAndDirectories): array
{
$directories = array_filter($filesAndDirectories, static fn (string $path): bool => ! is_file($path));

return array_values($directories);
}

/**
* @param string[] $filesAndDirectories
* @return string[]
*/
public function filterFiles(array $filesAndDirectories): array
{
$files = array_filter($filesAndDirectories, static fn (string $path): bool => is_file($path));

return array_values($files);
}
}
7 changes: 3 additions & 4 deletions src/FileSystem/FilesFinder.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
use Symfony\Component\Finder\Finder;
use Symfony\Component\Finder\SplFileInfo;
use Symplify\Skipper\SkipCriteriaResolver\SkippedPathsResolver;
use Symplify\SmartFileSystem\FileSystemFilter;
use Symplify\SmartFileSystem\SmartFileInfo;

/**
Expand All @@ -31,9 +30,9 @@ final class FilesFinder

public function __construct(
private readonly FilesystemTweaker $filesystemTweaker,
private readonly FileSystemFilter $fileSystemFilter,
private readonly SkippedPathsResolver $skippedPathsResolver,
private readonly UnchangedFilesFilter $unchangedFilesFilter,
private readonly FileAndDirectoryFilter $fileAndDirectoryFilter,
) {
}

Expand All @@ -46,8 +45,8 @@ public function findInDirectoriesAndFiles(array $source, array $suffixes = []):
{
$filesAndDirectories = $this->filesystemTweaker->resolveWithFnmatch($source);

$filePaths = $this->fileSystemFilter->filterFiles($filesAndDirectories);
$directories = $this->fileSystemFilter->filterDirectories($filesAndDirectories);
$filePaths = $this->fileAndDirectoryFilter->filterFiles($filesAndDirectories);
$directories = $this->fileAndDirectoryFilter->filterDirectories($filesAndDirectories);

$smartFileInfos = $this->unchangedFilesFilter->filterAndJoinWithDependentFileInfos($filePaths);

Expand Down
10 changes: 5 additions & 5 deletions src/StaticReflection/DynamicSourceLocatorDecorator.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

namespace Rector\Core\StaticReflection;

use Rector\Core\FileSystem\FileAndDirectoryFilter;
use Rector\Core\FileSystem\PhpFilesFinder;
use Rector\NodeTypeResolver\Reflection\BetterReflection\SourceLocatorProvider\DynamicSourceLocatorProvider;
use Symplify\SmartFileSystem\FileSystemFilter;

/**
* @see https://phpstan.org/blog/zero-config-analysis-with-static-reflection
Expand All @@ -15,9 +15,9 @@
final class DynamicSourceLocatorDecorator
{
public function __construct(
private readonly FileSystemFilter $fileSystemFilter,
private readonly DynamicSourceLocatorProvider $dynamicSourceLocatorProvider,
private readonly PhpFilesFinder $phpFilesFinder
private readonly PhpFilesFinder $phpFilesFinder,
private readonly FileAndDirectoryFilter $fileAndDirectoryFilter
) {
}

Expand All @@ -30,10 +30,10 @@ public function addPaths(array $paths): void
return;
}

$files = $this->fileSystemFilter->filterFiles($paths);
$files = $this->fileAndDirectoryFilter->filterFiles($paths);
$this->dynamicSourceLocatorProvider->addFiles($files);

$directories = $this->fileSystemFilter->filterDirectories($paths);
$directories = $this->fileAndDirectoryFilter->filterDirectories($paths);
foreach ($directories as $directory) {
$filesInfosInDirectory = $this->phpFilesFinder->findInPaths([$directory]);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

declare(strict_types=1);

namespace Rector\Core\Tests\FileSystem\FileAndDirectoryFilter;

use PHPUnit\Framework\TestCase;
use Rector\Core\FileSystem\FileAndDirectoryFilter;

final class FileAndDirectoryFilterTest extends TestCase
{
private FileAndDirectoryFilter $fileAndDirectoryFilter;

protected function setUp(): void
{
$this->fileAndDirectoryFilter = new FileAndDirectoryFilter();
}

public function testSeparateFilesAndDirectories(): void
{
$sources = [__DIR__, __DIR__ . '/FileAndDirectoryFilterTest.php'];

$files = $this->fileAndDirectoryFilter->filterFiles($sources);
$directories = $this->fileAndDirectoryFilter->filterDirectories($sources);

$this->assertCount(1, $files);
$this->assertCount(1, $directories);

$this->assertSame($files, [__DIR__ . '/FileAndDirectoryFilterTest.php']);
$this->assertSame($directories, [__DIR__]);
}
}

0 comments on commit 1c4307b

Please sign in to comment.