annotate vendor/squizlabs/php_codesniffer/scripts/ValidatePEAR/FileList.php @ 5:12f9dff5fda9 tip

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