Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
13 / 13
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
ParserClassNode
100.00% covered (success)
100.00%
13 / 13
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
1 / 1
 parse
100.00% covered (success)
100.00%
13 / 13
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2/**
3 * @author: Doug Wilbourne (dougwilbourne@gmail.com)
4 */
5
6declare(strict_types=1);
7
8namespace pvc\parser\php;
9
10use PhpParser\Node\Stmt\Class_;
11use PhpParser\NodeTraverser;
12use PhpParser\NodeVisitor\NameResolver;
13use PhpParser\ParserFactory;
14use pvc\parser\err\NonExistentFilePathException;
15use pvc\parser\php\node_visitors\NodeVisitorFirstClass;
16
17/**
18 * Parses a file and returns the Class node from the abstract syntax tree generated by the PHP Parser package.
19 *
20 * Class ParserClassNode
21 */
22class ParserClassNode
23{
24
25    public function parse(string $fileName) : ?Class_
26    {
27        if (false === ($code = file_get_contents($fileName))) {
28            throw new NonExistentFilePathException($fileName);
29        }
30        $parser = (new ParserFactory())->create(ParserFactory::PREFER_PHP7);
31        $nodes = $parser->parse($code);
32        if (empty($nodes)) {
33            return null;
34        }
35
36        $traverser = new NodeTraverser();
37        $nameResolver = new NameResolver();
38        $classVisitor = new NodeVisitorFirstClass();
39        $traverser->addVisitor($nameResolver);
40        $traverser->addVisitor($classVisitor);
41        $traverser->traverse($nodes);
42        return $classVisitor->getClassNode();
43    }
44}