Completed
Pull Request — master (#10)
by Tomáš
31:42
created

FixerResolver::turnExcludedFixersToString()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 7
ccs 0
cts 4
cp 0
rs 9.4285
cc 2
eloc 4
nc 2
nop 1
crap 6
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\PhpCsFixer\Factory;
9
10
use Symfony\CS\ConfigurationResolver;
11
12
final class FixerResolver
13
{
14
    /**
15
     * @var ConfigurationResolver
16
     */
17
    private $configurationResolver;
18
19
    public function __construct(ConfigurationResolver $configurationResolver)
20
    {
21
        $this->configurationResolver = $configurationResolver;
22
    }
23
24
    public function resolveFixersByLevelAndExcludedFixers(array $fixerLevels, array $excludedFixers) : array
25
    {
26
        if (!count($fixerLevels)) {
27
            return [];
28
        }
29
30
        $fixers = [];
31
        foreach ($fixerLevels as $fixerLevel) {
32
            $currentConfigurationResolver = clone $this->configurationResolver;
33
34
            $excludedFixersAsString = $this->turnExcludedFixersToString($excludedFixers);
35
            if ($excludedFixersAsString) {
36
                $currentConfigurationResolver->setOption('fixers', $excludedFixersAsString);
37
            }
38
            $currentConfigurationResolver->setOption('level', $fixerLevel);
39
            $currentConfigurationResolver->resolve();
40
41
            $fixers = array_merge($fixers, $currentConfigurationResolver->getFixers());
42
        }
43
44
        return $fixers;
45
    }
46
47
    public function resolveFixers(array $fixers) : array
48
    {
49
        if (!count($fixers)) {
50
            return [];
51
        }
52
53
        $fixersAsString = $this->turnFixersToString($fixers);
54
55
        $currentConfigurationResolver = clone $this->configurationResolver;
56
        $currentConfigurationResolver->setOption('level', 'none');
57
        $currentConfigurationResolver->setOption('fixers', $fixersAsString);
58
        $currentConfigurationResolver->resolve();
59
60
        return $currentConfigurationResolver->getFixers();
61
    }
62
63
    private function turnExcludedFixersToString(array $excludedFixers) : string
64
    {
65
        if (count($excludedFixers)) {
66
            return '-' . implode(',-', $excludedFixers);
67
        }
68
        return '';
69
    }
70
71
    private function turnFixersToString(array $fixers) : string
72
    {
73
        if (count($fixers)) {
74
            return implode(',', $fixers);
75
        }
76
        return '';
77
    }
78
}
79