1 | <?php |
||||||
2 | |||||||
3 | /** |
||||||
4 | * This file is part of the `tvi/monitor-bundle` project. |
||||||
5 | * |
||||||
6 | * (c) https://github.com/turnaev/monitor-bundle/graphs/contributors |
||||||
7 | * |
||||||
8 | * For the full copyright and license information, please view the LICENSE.md |
||||||
9 | * file that was distributed with this source code. |
||||||
10 | */ |
||||||
0 ignored issues
–
show
Coding Style
introduced
by
Loading history...
|
|||||||
11 | |||||||
12 | namespace Tvi\MonitorBundle\Check; |
||||||
13 | |||||||
14 | use Symfony\Component\Finder\Finder; |
||||||
15 | |||||||
16 | /** |
||||||
0 ignored issues
–
show
|
|||||||
17 | * @author Vladimir Turnaev <[email protected]> |
||||||
18 | */ |
||||||
0 ignored issues
–
show
|
|||||||
19 | class CheckPluginFinder |
||||||
20 | { |
||||||
21 | protected $searchExps = [__DIR__.'/**', __DIR__.'/**/**']; |
||||||
22 | |||||||
23 | 57 | public function __construct(array $exps = null) |
|||||
0 ignored issues
–
show
|
|||||||
24 | { |
||||||
25 | 57 | if ($exps) { |
|||||
26 | 10 | $this->addSearchExps($exps); |
|||||
27 | } |
||||||
28 | 57 | } |
|||||
29 | |||||||
30 | public function addCheckPluginFinderPath(CheckPluginFinderPath $checkPluginFinderPath) |
||||||
0 ignored issues
–
show
The type
Tvi\MonitorBundle\Check\CheckPluginFinderPath was not found. Maybe you did not declare it correctly or list all dependencies?
The issue could also be caused by a filter entry in the build configuration.
If the path has been excluded in your configuration, e.g. filter:
dependency_paths: ["lib/*"]
For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths
Loading history...
|
|||||||
31 | { |
||||||
32 | foreach ($checkPluginFinderPath->getPathes() as $path) { |
||||||
33 | $this->addSearchExps($path); |
||||||
34 | } |
||||||
35 | } |
||||||
36 | |||||||
37 | 10 | public function addSearchExps($exps) |
|||||
0 ignored issues
–
show
|
|||||||
38 | { |
||||||
39 | 10 | $exps = \is_string($exps) ? [$exps] : $exps; |
|||||
40 | |||||||
41 | 10 | $this->searchExps = array_merge($this->searchExps, $exps); |
|||||
42 | 10 | $this->searchExps = array_unique($this->searchExps); |
|||||
43 | 10 | } |
|||||
44 | |||||||
45 | /** |
||||||
0 ignored issues
–
show
|
|||||||
46 | * @return string[] |
||||||
47 | */ |
||||||
48 | 57 | public function find() |
|||||
49 | { |
||||||
50 | 57 | $fs = Finder::create(); |
|||||
51 | 57 | $res = []; |
|||||
52 | 57 | foreach ($this->searchExps as $searchExp) { |
|||||
53 | try { |
||||||
54 | 57 | $files = $fs->in($searchExp)->name('Plugin.php')->files(); |
|||||
55 | |||||||
56 | 57 | foreach ($files as $f) { |
|||||
57 | /* @var \SplFileInfo $f */ |
||||||
58 | |||||||
59 | 57 | $code = $f->getContents(); |
|||||
0 ignored issues
–
show
The method
getContents() does not exist on SplFileInfo . It seems like you code against a sub-type of SplFileInfo such as Symfony\Component\Finder\SplFileInfo or Symfony\Component\Finder...terator\MockSplFileInfo .
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
60 | 57 | $class = $this->getConfigClass($code); |
|||||
61 | |||||||
62 | 57 | if (is_subclass_of($class, CheckPluginInterface::class)) { |
|||||
63 | 57 | $res[] = $class; |
|||||
64 | } |
||||||
65 | } |
||||||
66 | |||||||
67 | 57 | } catch (\InvalidArgumentException $e) {} |
|||||
0 ignored issues
–
show
Coding Style
Comprehensibility
introduced
by
|
|||||||
68 | }; |
||||||
69 | |||||||
70 | 57 | return array_unique($res); |
|||||
71 | } |
||||||
72 | |||||||
73 | 57 | private function getConfigClass($contents) |
|||||
0 ignored issues
–
show
|
|||||||
74 | { |
||||||
75 | 57 | $namespace = []; |
|||||
76 | 57 | $class = []; |
|||||
77 | |||||||
78 | 57 | $tokens = token_get_all($contents); |
|||||
79 | |||||||
80 | do { |
||||||
81 | 57 | $token = current($tokens); |
|||||
82 | |||||||
83 | 57 | if (isset($token[0]) && T_NAMESPACE === $token[0]) { |
|||||
84 | 57 | next($tokens); |
|||||
85 | do { |
||||||
86 | 57 | $token = current($tokens); |
|||||
87 | 57 | if (';' === $token) { |
|||||
88 | 57 | break 1; |
|||||
89 | } |
||||||
90 | 57 | $namespace[] = $token[1]; |
|||||
91 | 57 | } while (next($tokens)); |
|||||
92 | |||||||
93 | 57 | $namespace = trim(implode('', $namespace)); |
|||||
94 | } |
||||||
95 | |||||||
96 | 57 | if (isset($token[0]) && T_CLASS === $token[0]) { |
|||||
97 | 57 | next($tokens); |
|||||
98 | do { |
||||||
99 | 57 | $token = current($tokens); |
|||||
100 | |||||||
101 | 57 | if (T_STRING === $token[0]) { |
|||||
102 | 57 | $class[] = $token[1]; |
|||||
103 | 57 | break 1; |
|||||
104 | } |
||||||
105 | 57 | } while (next($tokens)); |
|||||
106 | |||||||
107 | 57 | $class = trim(implode('', $class)); |
|||||
108 | |||||||
109 | 57 | break; |
|||||
110 | } |
||||||
111 | 57 | } while (next($tokens)); |
|||||
112 | |||||||
113 | 57 | return (string) $namespace.'\\'.(string) $class; |
|||||
114 | } |
||||||
115 | } |
||||||
116 |