1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- <?php declare(strict_types=1);
- /*
- * This file is part of phpunit/php-file-iterator.
- *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace SebastianBergmann\FileIterator;
- use function assert;
- use function str_starts_with;
- use RecursiveDirectoryIterator;
- use RecursiveFilterIterator;
- use SplFileInfo;
- /**
- * @internal This class is not covered by the backward compatibility promise for phpunit/php-file-iterator
- */
- final class ExcludeIterator extends RecursiveFilterIterator
- {
- /**
- * @psalm-var list<string>
- */
- private array $exclude;
- /**
- * @psalm-param list<string> $exclude
- */
- public function __construct(RecursiveDirectoryIterator $iterator, array $exclude)
- {
- parent::__construct($iterator);
- $this->exclude = $exclude;
- }
- public function accept(): bool
- {
- $current = $this->current();
- assert($current instanceof SplFileInfo);
- $path = $current->getRealPath();
- if ($path === false) {
- return false;
- }
- foreach ($this->exclude as $exclude) {
- if (str_starts_with($path, $exclude)) {
- return false;
- }
- }
- return true;
- }
- public function hasChildren(): bool
- {
- return $this->getInnerIterator()->hasChildren();
- }
- public function getChildren(): self
- {
- return new self(
- $this->getInnerIterator()->getChildren(),
- $this->exclude
- );
- }
- public function getInnerIterator(): RecursiveDirectoryIterator
- {
- $innerIterator = parent::getInnerIterator();
- assert($innerIterator instanceof RecursiveDirectoryIterator);
- return $innerIterator;
- }
- }
|