-
Notifications
You must be signed in to change notification settings - Fork 58
Expand file tree
/
Copy pathIgnoredPaths.php
More file actions
124 lines (106 loc) · 3.31 KB
/
IgnoredPaths.php
File metadata and controls
124 lines (106 loc) · 3.31 KB
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?php
namespace Edge\QA;
class IgnoredPaths
{
private $ignoreDirs;
private $ignoreFiles;
private $ignoreBoth;
private $isWindows;
public function __construct($ignoredDirs, $ignoredFiles)
{
$this->ignoreDirs = $this->csvToArray($ignoredDirs);
$this->ignoreFiles = $this->csvToArray($ignoredFiles);
$this->ignoreBoth = array_merge($this->ignoreDirs, $this->ignoreFiles);
$this->setOS(PHP_OS);
}
public function setOS($os)
{
$this->isWindows = strtoupper(substr($os, 0, 3)) == 'WIN';
}
private function csvToArray($csv)
{
return array_filter(explode(',', $csv), function ($value) {
return (bool) trim($value);
});
}
public function phpcs()
{
return $this->ignore(' --ignore=*/', '/*,*/', '/*', ',');
}
public function pdepend()
{
if ($this->isWindows) {
return $this->pdependWindowsFilter('ignore=');
}
return $this->ignore(' --ignore=/', '/,/', '/', ',/');
}
public function phpmd()
{
if ($this->isWindows) {
return $this->pdependWindowsFilter('exclude ');
}
return $this->ignore(" --exclude /", '/,/', '/', ',/');
}
public function phpmd3()
{
$parts = [];
foreach ($this->ignoreDirs as $dir) {
$dir = trim($dir, '/');
$parts[] = '--exclude ' . escapeshellarg('*' . $dir . '/*');
}
foreach ($this->ignoreFiles as $file) {
$file = ltrim($file, '/');
$parts[] = '--exclude ' . escapeshellarg('*' . $file);
}
return $parts ? ' ' . implode(' ', $parts) : '';
}
private function pdependWindowsFilter($option)
{
return str_replace('/', '\\', $this->ignore(" --{$option}", '\*,', '\*', ','));
}
public function phpmetrics()
{
return $this->ignore(' --excluded-dirs="', '|', '"');
}
public function phpmetrics2()
{
return $this->ignore(' --exclude="', ',', '"');
}
public function bergmann()
{
return $this->ignore(' --exclude=', ' --exclude=', '');
}
public function parallelLint()
{
return $this->ignore(' --exclude ', ' --exclude ', '');
}
public function phpstan()
{
return $this->ignoreBoth;
}
public function psalm()
{
return array(
'file' => $this->ignoreFiles,
'directory' => $this->ignoreDirs,
);
}
private function ignore($before, $dirSeparator, $after, $fileSeparator = null)
{
if ($fileSeparator) {
if ($this->ignoreDirs) {
$files = $this->implode($this->ignoreFiles, $fileSeparator, $fileSeparator);
return $this->implode($this->ignoreDirs, $before, $dirSeparator, "{$after}{$files}");
} else {
$ignoredFiles = $this->implode($this->ignoreFiles, $before, $fileSeparator);
return str_replace('*/', '', $ignoredFiles); // phpcs hack
}
} else {
return $this->implode($this->ignoreBoth, $before, $dirSeparator, $after);
}
}
private function implode(array $input, $before, $separator, $after = '')
{
return $input && $separator ? ($before . implode($separator, $input) . $after) : '';
}
}