Completed
Push — master ( 8eec5e...3d8421 )
by Dave
30s queued 12s
created

getIdentifier()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
1
<?php
2
3
/**
4
 * Static Analysis Results Baseliner (sarb).
5
 *
6
 * (c) Dave Liddament
7
 *
8
 * For the full copyright and licence information please view the LICENSE file distributed with this source code.
9
 */
10
11
declare(strict_types=1);
12
13
namespace DaveLiddament\StaticAnalysisResultsBaseliner\Plugins\ResultsParsers\PhpMagicNumberDetectorResultsParser;
14
15
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\LineNumber;
16
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\Location;
17
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\ProjectRoot;
18
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\RelativeFileName;
19
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\Type;
20
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\AnalysisResult;
21
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\AnalysisResults;
22
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\AnalysisResultsBuilder;
23
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\Identifier;
24
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\ResultsParser;
25
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Utils\ArrayUtils;
26
use Webmozart\Assert\Assert;
27
28
/**
29
 * Handles PHPMND CLI output.
30
 */
31
class PhpMagicNumberDetectorResultsParser implements ResultsParser
32
{
33
    private const MAGIC_NUMBER_REGEX = "/^(.*):(\d+)\. Magic number: (.*)$/";
34
35
    public function convertFromString(string $resultsAsString, ProjectRoot $projectRoot): AnalysisResults
36
    {
37
        $lines = explode(\PHP_EOL, $resultsAsString);
38
        $analysisResultsBuilder = new AnalysisResultsBuilder();
39
40
        foreach ($lines as $line) {
41
            $matches = null;
42
            $match = preg_match(self::MAGIC_NUMBER_REGEX, $line, $matches);
43
            if (1 === $match) {
44
                Assert::count($matches, 4);
45
                $relativeFileName = ArrayUtils::getStringValue($matches, '1');
46
                $lineNumber = ArrayUtils::getIntAsStringValue($matches, '2');
47
                $magicNumber = ArrayUtils::getStringValue($matches, '3');
48
49
                $location = Location::fromRelativeFileName(
50
                    new RelativeFileName($relativeFileName),
51
                    $projectRoot,
52
                    new LineNumber($lineNumber)
53
                );
54
55
                $analysisResult = new AnalysisResult(
56
                    $location,
57
                    new Type($magicNumber),
58
                    "Magic number {$magicNumber}",
59
                    []
60
                );
61
62
                $analysisResultsBuilder->addAnalysisResult($analysisResult);
63
            }
64
        }
65
66
        return $analysisResultsBuilder->build();
67
    }
68
69
    public function getIdentifier(): Identifier
70
    {
71
        return new PhpMagicNumberDetectorIdentifier();
72
    }
73
74
    public function showTypeGuessingWarning(): bool
75
    {
76
        return false;
77
    }
78
}
79