Completed
Pull Request — master (#51)
by Povilas
02:03
created

Printer::addFileReport()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
3
namespace Povils\PHPMND;
4
5
use JakubOnderka\PhpConsoleColor\ConsoleColor;
6
use JakubOnderka\PhpConsoleHighlighter\Highlighter;
7
use Symfony\Component\Console\Output\OutputInterface;
8
9
/**
10
 * Class Printer
11
 *
12
 * @package Povils\PHPMND
13
 */
14
class Printer
15
{
16
    const LINE_LENGTH = 80;
17
    const TAB = 4;
18
19
    /**
20
     * @param OutputInterface $output
21
     * @param FileReportList  $fileReportList
22
     * @param HintList        $hintList
23
     */
24
    public function printData(OutputInterface $output, FileReportList $fileReportList, HintList $hintList)
25
    {
26
        $separator = str_repeat('-', self::LINE_LENGTH);
27
        $output->writeln(PHP_EOL . $separator . PHP_EOL);
28
29
        $total = 0;
30
        foreach ($fileReportList->getFileReports() as $fileReport) {
31
            $entries = $fileReport->getEntries();
32
            $total += count($entries);
33
            foreach ($entries as $entry) {
34
                $output->writeln(sprintf(
35
                    '%s:%d. Magic number: %s',
36
                    $fileReport->getFile()->getRelativePathname(),
37
                    $entry['line'],
38
                    $entry['value']
39
                ));
40
41
                $highlighter = new Highlighter(new ConsoleColor());
42
                $output->writeln($highlighter->getCodeSnippet($fileReport->getFile()->getContents(), $entry['line'], 0, 0));
43
44
                if ($hintList->hasHints()) {
45
                    $hints = $hintList->getHintsByValue($entry['value']);
46
                    if (false === empty($hints)) {
47
                        $output->writeln('Suggestions:');
48
                        foreach ($hints as $hint) {
49
                            $output->writeln(str_repeat(' ', 2 * self::TAB) . $hint);
50
                        }
51
                        $output->write(PHP_EOL);
52
                    }
53
                }
54
            }
55
            $output->writeln($separator . PHP_EOL);
56
        }
57
        $output->writeln('<info>Total of Magic Numbers: ' . $total . '</info>');
58
    }
59
}
60