/
ProjectFileFilter.php
93 lines (77 loc) · 2.48 KB
/
ProjectFileFilter.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?php
namespace Psalm\Config;
use Psalm\Exception\ConfigException;
use SimpleXMLElement;
use function stripos;
use function strpos;
/** @internal */
final class ProjectFileFilter extends FileFilter
{
private ?ProjectFileFilter $file_filter = null;
/**
* @return static
*/
public static function loadFromXMLElement(
SimpleXMLElement $e,
string $base_dir,
bool $inclusive
): ProjectFileFilter {
$filter = parent::loadFromXMLElement($e, $base_dir, $inclusive);
if (isset($e->ignoreFiles)) {
if (!$inclusive) {
throw new ConfigException('Cannot nest ignoreFiles inside itself');
}
/** @var SimpleXMLElement $e->ignoreFiles */
$filter->file_filter = static::loadFromXMLElement($e->ignoreFiles, $base_dir, false);
}
return $filter;
}
public function allows(string $file_name, bool $case_sensitive = false): bool
{
if ($this->inclusive && $this->file_filter) {
if (!$this->file_filter->allows($file_name, $case_sensitive)) {
return false;
}
}
return parent::allows($file_name, $case_sensitive);
}
public function forbids(string $file_name, bool $case_sensitive = false): bool
{
if ($this->inclusive && $this->file_filter) {
if (!$this->file_filter->allows($file_name, $case_sensitive)) {
return true;
}
}
return false;
}
public function reportTypeStats(string $file_name, bool $case_sensitive = false): bool
{
foreach ($this->ignore_type_stats as $exclude_dir => $_) {
if ($case_sensitive) {
if (strpos($file_name, $exclude_dir) === 0) {
return false;
}
} else {
if (stripos($file_name, $exclude_dir) === 0) {
return false;
}
}
}
return true;
}
public function useStrictTypes(string $file_name, bool $case_sensitive = false): bool
{
foreach ($this->declare_strict_types as $exclude_dir => $_) {
if ($case_sensitive) {
if (strpos($file_name, $exclude_dir) === 0) {
return true;
}
} else {
if (stripos($file_name, $exclude_dir) === 0) {
return true;
}
}
}
return false;
}
}