-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathFilesProcessor.php
61 lines (51 loc) · 1.46 KB
/
FilesProcessor.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
<?php
namespace ThemeCheck;
use PhpParser\Error;
use PhpParser\Lexer\Emulative;
use PhpParser\NodeTraverser;
use PhpParser\Parser;
use PhpParser\PrettyPrinter\Standard;
use ThemeCheck\Visitors\ForbiddenFunctions;
use ThemeCheck\Visitors\VisitorAbstract;
class FilesProcessor {
private $_parser;
private $_prettyPrinter;
private $_traverser;
/**
* @var VisitorAbstract[]
*/
private $_visitors;
function __construct() {
$this->_parser = new Parser( new Emulative() );
$this->_prettyPrinter = new Standard();
$this->_traverser = new NodeTraverser();
$this->_visitors = array(
new ForbiddenFunctions(),
);
foreach ( $this->_visitors as $visitor ) {
$this->_traverser->addVisitor( $visitor );
}
}
private function GetTraverseResult() {
$result = array();
foreach ( $this->_visitors as $visitor ) {
if ( ! $visitor->IsValid() ) {
$result[] = array(
'error' => $visitor->GetError(),
'type' => $visitor->GetErrorType(),
'occurrences' => $visitor->GetOccurrences(),
);
}
}
return $result;
}
function Process( &$php_file_content, $file_relative_path ) {
try {
$statements = $this->_parser->parse( $php_file_content );
$this->_traverser->traverse( $statements );
} catch ( Error $e ) {
throw new \Exception( 'Failed parsing PHP file ' . $file_relative_path . ': ' . $e->getMessage(), 'php_parse_error' );
}
return $this->GetTraverseResult();
}
}