1 | <?php |
||
14 | class Factory |
||
15 | { |
||
16 | /** |
||
17 | * @return NodeDefinition[] |
||
18 | */ |
||
19 | 3 | public static function getPassesConfigurations() |
|
37 | |||
38 | /** |
||
39 | * @return \PHPSA\Analyzer\Pass\Metadata[] |
||
40 | */ |
||
41 | 1 | public static function getPassesMetadata() |
|
59 | |||
60 | /** |
||
61 | * @param EventManager $eventManager |
||
62 | * @param Configuration $config |
||
63 | * @return Analyzer |
||
64 | */ |
||
65 | 51 | public static function factory(EventManager $eventManager, Configuration $config) |
|
|
|||
66 | { |
||
67 | 51 | $analyzersConfig = $config->getValue('analyzers'); |
|
68 | |||
69 | $filterEnabled = function ($passClass) use ($config, $analyzersConfig) { |
||
70 | /** @var AnalyzerPass\Metadata $passMetadata */ |
||
71 | 51 | $passMetadata = $passClass::getMetadata(); |
|
72 | |||
73 | 51 | if (!isset($analyzersConfig[$passMetadata->getName()])) { |
|
74 | 50 | return false; |
|
75 | } |
||
76 | |||
77 | 51 | if (!$analyzersConfig[$passMetadata->getName()]['enabled']) { |
|
78 | return false; |
||
79 | } |
||
80 | |||
81 | 51 | if (!$passMetadata->allowsPhpVersion($config->getValue('language_level'))) { |
|
82 | return false; |
||
83 | } |
||
84 | |||
85 | 51 | return true; |
|
86 | 51 | }; |
|
87 | |||
88 | 51 | $instanciate = function ($passClass) use ($analyzersConfig) { |
|
89 | 51 | $passName = $passClass::getMetadata()->getName(); |
|
90 | |||
91 | 51 | return new $passClass($analyzersConfig[$passName]); |
|
92 | 51 | }; |
|
93 | |||
94 | 51 | $analyzer = new Analyzer($eventManager); |
|
95 | 51 | $analyzer->registerExpressionPasses( |
|
96 | 51 | array_map($instanciate, array_filter(self::getExpressionPasses(), $filterEnabled)) |
|
97 | 51 | ); |
|
98 | 51 | $analyzer->registerStatementPasses( |
|
99 | 51 | array_map($instanciate, array_filter(self::getStatementPasses(), $filterEnabled)) |
|
100 | 51 | ); |
|
101 | 51 | $analyzer->registerScalarPasses( |
|
102 | 51 | array_map($instanciate, array_filter(self::getScalarPasses(), $filterEnabled)) |
|
103 | 51 | ); |
|
104 | 51 | $analyzer->bind(); |
|
105 | |||
106 | 51 | return $analyzer; |
|
107 | } |
||
108 | |||
109 | /** |
||
110 | * @return array |
||
111 | */ |
||
112 | 53 | private static function getStatementPasses() |
|
139 | |||
140 | /** |
||
141 | * @return array |
||
142 | */ |
||
143 | 53 | private static function getExpressionPasses() |
|
179 | |||
180 | /** |
||
181 | * @return array |
||
182 | */ |
||
183 | 53 | private static function getScalarPasses() |
|
189 | } |
||
190 |