AssessComplexityCommand::execute()   A
last analyzed

Complexity

Conditions 3
Paths 4

Size

Total Lines 17
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 10
c 1
b 0
f 0
dl 0
loc 17
rs 9.9332
cc 3
nc 4
nop 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Churn\Command;
6
7
use Churn\Assessor\Assessor;
8
use Churn\Assessor\CyclomaticComplexityAssessor;
9
use Symfony\Component\Console\Command\Command;
10
use Symfony\Component\Console\Input\InputArgument;
11
use Symfony\Component\Console\Input\InputInterface;
12
use Symfony\Component\Console\Output\OutputInterface;
13
14
/**
15
 * @internal
16
 */
17
final class AssessComplexityCommand extends Command
18
{
19
    /**
20
     * @var Assessor
21
     */
22
    private $assessor;
23
24
    /**
25
     * Class constructor.
26
     *
27
     * @param Assessor $assessor The class calculating the complexity.
28
     */
29
    public function __construct(Assessor $assessor)
30
    {
31
        parent::__construct();
32
33
        $this->assessor = $assessor;
34
    }
35
36
    /**
37
     * Returns a new instance of the command.
38
     */
39
    public static function newInstance(): self
40
    {
41
        return new self(new CyclomaticComplexityAssessor());
42
    }
43
44
    /**
45
     * Configure the command
46
     */
47
    #[\Override]
48
    protected function configure(): void
49
    {
50
        $this->setName('assess-complexity')
51
            ->addArgument('file', InputArgument::REQUIRED, 'Path to file to analyze.')
52
            ->setDescription('Calculate the Cyclomatic Complexity');
53
    }
54
55
    /**
56
     * Execute the command
57
     *
58
     * @param InputInterface $input Input.
59
     * @param OutputInterface $output Output.
60
     */
61
    #[\Override]
62
    protected function execute(InputInterface $input, OutputInterface $output): int
63
    {
64
        $file = (string) $input->getArgument('file');
65
        $contents = \is_file($file)
66
            ? \file_get_contents($file)
67
            : false;
68
69
        if (false === $contents) {
70
            $output->writeln('0');
71
72
            return 0;
73
        }
74
75
        $output->writeln((string) $this->assessor->assess($contents));
76
77
        return 0;
78
    }
79
}
80