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
|