Completed
Push — master ( 10064a...e7d54b )
by Matthias
04:25
created

CheckCommand::configure()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 13
rs 9.4286
cc 1
eloc 9
nc 1
nop 0
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: matthias
5
 * Date: 28.11.15
6
 * Time: 16:16
7
 */
8
9
namespace ComposerRequireChecker\Cli;
10
11
use ComposerRequireChecker\ASTLocator\LocateASTFromFiles;
12
use ComposerRequireChecker\DefinedExtensionsResolver\DefinedExtensionsResolver;
13
use ComposerRequireChecker\DefinedSymbolsLocator\LocateDefinedSymbolsFromASTRoots;
14
use ComposerRequireChecker\DefinedSymbolsLocator\LocateDefinedSymbolsFromExtensions;
15
use ComposerRequireChecker\FileLocator\LocateComposerPackageDirectDependenciesSourceFiles;
16
use ComposerRequireChecker\FileLocator\LocateComposerPackageSourceFiles;
17
use ComposerRequireChecker\GeneratorUtil\ComposeGenerators;
18
use ComposerRequireChecker\UsedSymbolsLocator\LocateUsedSymbolsFromASTRoots;
19
use PhpParser\ParserFactory;
20
use Symfony\Component\Console\Command\Command;
21
use Symfony\Component\Console\Input\InputArgument;
22
use Symfony\Component\Console\Input\InputInterface;
23
use Symfony\Component\Console\Input\InputOption;
24
use Symfony\Component\Console\Output\OutputInterface;
25
26
class CheckCommand extends Command
27
{
28
    protected function configure()
29
    {
30
        $this
31
            ->setName('check')
32
            ->setDescription('check the defined dependencies against your code')
33
            ->addArgument(
34
                'composer-json',
35
                InputArgument::OPTIONAL,
36
                'the composer.json of your package, that should be checked',
37
                './composer.json'
38
            )
39
        ;
40
    }
41
42
    protected function execute(InputInterface $input, OutputInterface $output) : int
0 ignored issues
show
Bug introduced by
This code did not parse for me. Apparently, there is an error somewhere around this line:

Syntax error, unexpected ':', expecting ';' or '{'
Loading history...
43
    {
44
45
        $getPackageSourceFiles = new LocateComposerPackageSourceFiles();
46
47
        $sourcesASTs  = new LocateASTFromFiles((new ParserFactory())->create(ParserFactory::PREFER_PHP7));
48
        $composerJson = $input->getArgument('composer-json');
49
50
        $definedVendorSymbols = (new LocateDefinedSymbolsFromASTRoots())->__invoke($sourcesASTs(
51
            (new ComposeGenerators())->__invoke(
52
                $getPackageSourceFiles($composerJson),
53
                (new LocateComposerPackageDirectDependenciesSourceFiles())->__invoke($composerJson)
54
            )
55
        ));
56
57
        $options = new Options();
58
59
        $definedExtensionSymbols = (new LocateDefinedSymbolsFromExtensions())->__invoke(
60
            (new DefinedExtensionsResolver())->__invoke($composerJson, $options->getPhpCoreExtensions())
61
        );
62
63
        $usedSymbols = (new LocateUsedSymbolsFromASTRoots())->__invoke($sourcesASTs($getPackageSourceFiles($composerJson)));
64
65
        $unknownSymbols = array_diff(
66
            $usedSymbols,
67
            $definedVendorSymbols,
68
            $definedExtensionSymbols,
69
            $options->getSymbolWhitelist()
70
        );
71
72
        if (!$unknownSymbols) {
73
            $output->writeln("There were no unknown symbols found.");
74
            return 0;
75
        }
76
77
        $output->writeln("The following unknown symbols were found:");
78
        foreach ($unknownSymbols as $unknownSymbol) {
79
            $output->writeln("  " . $unknownSymbol);
80
        }
81
82
        return ((int) (bool) $unknownSymbols);
83
    }
84
}