annotate vendor/squizlabs/php_codesniffer/scripts/ValidatePEAR/FileList.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents af1871eacc83
children
rev   line source
Chris@18 1 <?php
Chris@18 2 /**
Chris@18 3 * Retrieve a filtered file list.
Chris@18 4 *
Chris@18 5 * PHP version 5
Chris@18 6 *
Chris@18 7 * @category PHP
Chris@18 8 * @package PHP_CodeSniffer
Chris@18 9 * @author Juliette Reinders Folmer <phpcs_nospam@adviesenzo.nl>
Chris@18 10 * @copyright 2019 Juliette Reinders Folmer. All rights reserved.
Chris@18 11 * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence
Chris@18 12 */
Chris@18 13
Chris@18 14 /**
Chris@18 15 * Class to create a file list with filtering.
Chris@18 16 */
Chris@18 17 class FileList
Chris@18 18 {
Chris@18 19
Chris@18 20 /**
Chris@18 21 * The path to the project root directory.
Chris@18 22 *
Chris@18 23 * @var string
Chris@18 24 */
Chris@18 25 protected $rootPath;
Chris@18 26
Chris@18 27 /**
Chris@18 28 * Recursive directory iterator.
Chris@18 29 *
Chris@18 30 * @var \DirectoryIterator
Chris@18 31 */
Chris@18 32 protected $fileIterator;
Chris@18 33
Chris@18 34 /**
Chris@18 35 * Base regex to use if no filter regex is provided.
Chris@18 36 *
Chris@18 37 * Matches based on:
Chris@18 38 * - File path starts with the project root (replacement done in constructor).
Chris@18 39 * - Don't match .git/ files.
Chris@18 40 * - Don't match dot files, i.e. "." or "..".
Chris@18 41 * - Don't match backup files.
Chris@18 42 * - Match everything else in a case-insensitive manner.
Chris@18 43 *
Chris@18 44 * @var string
Chris@18 45 */
Chris@18 46 private $baseRegex = '`^%s(?!\.git/)(?!(.*/)?\.+$)(?!.*\.(bak|orig)).*$`Dix';
Chris@18 47
Chris@18 48
Chris@18 49 /**
Chris@18 50 * Constructor.
Chris@18 51 *
Chris@18 52 * @param string $directory The directory to examine.
Chris@18 53 * @param string $rootPath Path to the project root.
Chris@18 54 * @param string $filter PCRE regular expression to filter the file list with.
Chris@18 55 */
Chris@18 56 public function __construct($directory, $rootPath='', $filter='')
Chris@18 57 {
Chris@18 58 $this->rootPath = $rootPath;
Chris@18 59
Chris@18 60 $directory = new \RecursiveDirectoryIterator(
Chris@18 61 $directory,
Chris@18 62 \RecursiveDirectoryIterator::UNIX_PATHS
Chris@18 63 );
Chris@18 64 $flattened = new \RecursiveIteratorIterator(
Chris@18 65 $directory,
Chris@18 66 \RecursiveIteratorIterator::LEAVES_ONLY,
Chris@18 67 \RecursiveIteratorIterator::CATCH_GET_CHILD
Chris@18 68 );
Chris@18 69
Chris@18 70 if ($filter === '') {
Chris@18 71 $filter = sprintf($this->baseRegex, preg_quote($this->rootPath));
Chris@18 72 }
Chris@18 73
Chris@18 74 $this->fileIterator = new \RegexIterator($flattened, $filter);
Chris@18 75
Chris@18 76 return $this;
Chris@18 77
Chris@18 78 }//end __construct()
Chris@18 79
Chris@18 80
Chris@18 81 /**
Chris@18 82 * Retrieve the filtered file list as an array.
Chris@18 83 *
Chris@18 84 * @return array
Chris@18 85 */
Chris@18 86 public function getList()
Chris@18 87 {
Chris@18 88 $fileList = [];
Chris@18 89
Chris@18 90 foreach ($this->fileIterator as $file) {
Chris@18 91 $fileList[] = str_replace($this->rootPath, '', $file);
Chris@18 92 }
Chris@18 93
Chris@18 94 return $fileList;
Chris@18 95
Chris@18 96 }//end getList()
Chris@18 97
Chris@18 98
Chris@18 99 }//end class