Completed
Pull Request — master (#2)
by Tomáš
02:50
created

CodeSnifferFactory::setupStandards()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 8
ccs 6
cts 6
cp 1
rs 9.4285
cc 2
eloc 5
nc 2
nop 1
crap 2
1
<?php
2
3
/*
4
 * This file is part of Symplify
5
 * Copyright (c) 2016 Tomas Votruba (http://tomasvotruba.cz).
6
 */
7
8
namespace Symplify\MultiCodingStandard\CodeSniffer;
9
10
use PHP_CodeSniffer;
11
use Symplify\MultiCodingStandard\Contract\CodeSniffer\CodeSnifferFactoryInterface;
12
use Symplify\MultiCodingStandard\Contract\CodeSniffer\FileSystem\RulesetFileSystemInterface;
13
use Symplify\MultiCodingStandard\Contract\CodeSniffer\FileSystem\SniffFileSystemInterface;
14
use Symplify\MultiCodingStandard\Contract\Configuration\ConfigurationInterface;
15
16
final class CodeSnifferFactory implements CodeSnifferFactoryInterface
17
{
18
    /**
19
     * @var ConfigurationInterface
20
     */
21
    private $configuration;
22
23
    /**
24
     * @var SniffFileSystemInterface
25
     */
26
    private $sniffFileSystem;
27
28
    /**
29
     * @var RulesetFileSystemInterface
30
     */
31
    private $rulesetFileSystem;
32
33
    /**
34
     * @var PHP_CodeSniffer
35
     */
36
    private $codeSniffer;
37
38 5
    public function __construct(
39
        ConfigurationInterface $configuration,
40
        SniffFileSystemInterface $sniffFileSystem,
41
        RulesetFileSystemInterface $rulesetFileSystem
42
    ) {
43 5
        $this->configuration = $configuration;
44 5
        $this->sniffFileSystem = $sniffFileSystem;
45 5
        $this->rulesetFileSystem = $rulesetFileSystem;
46 5
    }
47
48
    /**
49
     * {@inheritdoc}
50
     */
51 5
    public function create()
52
    {
53 5
        $this->codeSniffer = new PHP_CodeSniffer();
54 5
        $this->setupSniffs($this->configuration->getActiveSniffs());
55 5
        $this->setupStandards($this->configuration->getActiveStandards());
56 5
        $this->setupErrorRecoding();
57
58 5
        return $this->codeSniffer;
59
    }
60
61 5
    private function setupSniffs(array $sniffs)
62
    {
63 5
        $this->codeSniffer->registerSniffs($this->sniffFileSystem->findAllSniffs(), $sniffs);
64 5
        $this->codeSniffer->populateTokenListeners();
65 5
    }
66
67 5
    private function setupStandards(array $standards)
68
    {
69 5
        foreach ($standards as $standard) {
70 2
            $rulesetPath = $this->rulesetFileSystem->getRulesetPathForStandardName($standard);
71 2
            $sniffs = $this->codeSniffer->processRuleset($rulesetPath);
72 2
            $this->codeSniffer->registerSniffs($sniffs, []);
73
        }
74 5
    }
75
76 5
    private function setupErrorRecoding()
77
    {
78 5
        $this->codeSniffer->cli->setCommandLineValues([
79 5
            '-s', // showSources must be on, so that errors are recorded
80
        ]);
81 5
    }
82
}
83