Passed
Pull Request — master (#47)
by
unknown
22:50 queued 07:29
created

PhpToNodeFilesConverter::convert()   A

Complexity

Conditions 3
Paths 9

Size

Total Lines 24
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 3
eloc 16
c 1
b 0
f 1
nc 9
nop 0
dl 0
loc 24
rs 9.7333
1
<?php
2
declare(strict_types=1);
3
4
namespace hipanel\rbac\console\converter;
5
6
use PhpParser\NodeTraverser;
7
use PhpParser\Parser;
8
use PhpParser\ParserFactory;
9
use Throwable;
10
use yii\helpers\FileHelper;
11
12
final class PhpToNodeFilesConverter implements ConverterInterface
13
{
14
    private const EXPORT_FILE_NAME = 'index.ts';
15
16
    public string $storageDir;
17
18
    public string $convertFile;
19
20
    private Parser $parser;
21
22
    public function __construct()
23
    {
24
        $this->parser = (new ParserFactory())
25
            ->create(ParserFactory::PREFER_PHP7);
26
    }
27
28
    public function convert()
29
    {
30
        $traverser = new NodeTraverser();
31
        $visitor = new Visitor();
32
        $traverser->addVisitor($visitor);
33
34
        try {
35
            $stmts = $this->parser->parse(file_get_contents($this->convertFile));
36
            $traverser->traverse($stmts);
0 ignored issues
show
Bug introduced by
It seems like $stmts can also be of type null; however, parameter $nodes of PhpParser\NodeTraverser::traverse() does only seem to accept array, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

36
            $traverser->traverse(/** @scrutinizer ignore-type */ $stmts);
Loading history...
37
38
            $output = TsFileGenerator::fromParts(
39
                (new TsObjectGenerator('ROLES_AND_PERMISSIONS', require $this->convertFile))->generate(),
40
                (new TsEnumGenerator('ROLES_ENUM', $visitor->getRoles()))->generate(),
41
                (new TsEnumGenerator('PERMISSIONS_ENUM', $visitor->getPermissions()))->generate(),
42
            );
43
44
            if (!is_dir($this->storageDir)) {
45
                FileHelper::createDirectory($this->storageDir);
46
            }
47
48
            $targetFile = $this->storageDir . '/' . self::EXPORT_FILE_NAME;
49
            file_put_contents($targetFile, $output, LOCK_EX);
50
        } catch (Throwable $e) {
51
            echo 'Falied to parse file: ' . $e->getMessage();
52
        }
53
    }
54
}
55