Completed
Push — master ( 7a803c...5b8a72 )
by Peter
11:20
created

YamlStandardConfigDefinition   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 80
Duplicated Lines 0 %

Test Coverage

Coverage 95.24%

Importance

Changes 3
Bugs 1 Features 0
Metric Value
eloc 57
c 3
b 1
f 0
dl 0
loc 80
ccs 40
cts 42
cp 0.9524
rs 10
wmc 3

2 Methods

Rating   Name   Duplication   Size   Complexity  
A buildItemsNode() 0 36 1
A getConfigTreeBuilder() 0 16 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace YamlStandards\Model\Config;
6
7
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
8
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
9
use Symfony\Component\Config\Definition\ConfigurationInterface;
10
use Symfony\Component\HttpKernel\Kernel;
11
12
class YamlStandardConfigDefinition implements ConfigurationInterface
13
{
14
    public const CONFIG_PATHS_TO_CHECK = 'pathsToCheck';
15
    public const CONFIG_EXCLUDED_PATHS = 'excludedPaths';
16
    public const CONFIG_CHECKERS = 'checkers';
17
    public const CONFIG_PATH_TO_CHECKER = 'pathToChecker';
18
    public const CONFIG_PARAMETERS_FOR_CHECKER = 'parameters';
19
    public const CONFIG_PARAMETERS_DEPTH = 'depth';
20
    public const CONFIG_PARAMETERS_INDENTS = 'indents';
21
    public const CONFIG_PARAMETERS_LEVEL = 'level';
22
    public const CONFIG_PARAMETERS_SERVICE_ALIASING_TYPE = 'serviceAliasingType';
23
    public const CONFIG_PARAMETERS_INDENTS_COMMENTS_WITHOUT_PARENT = 'indentsCommentsWithoutParent';
24
25
    public const CONFIG_PARAMETERS_SERVICE_ALIASING_TYPE_VALUE_SHORT = 'short';
26
    public const CONFIG_PARAMETERS_SERVICE_ALIASING_TYPE_VALUE_LONG = 'long';
27
28
    public const CONFIG_PARAMETERS_INDENTS_COMMENTS_WITHOUT_PARENT_VALUE_DEFAULT = 'default';
29
    public const CONFIG_PARAMETERS_INDENTS_COMMENTS_WITHOUT_PARENT_VALUE_PRESERVED = 'preserved';
30
31
    /**
32
     * @inheritDoc
33
     */
34 9
    public function getConfigTreeBuilder(): TreeBuilder
35
    {
36
        // fix for Symfony 4.2 and newer versions
37 9
        if (Kernel::VERSION_ID >= 40200) {
38 9
            $treeBuilder = new TreeBuilder('yaml_standards_config');
39
            /** @var \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition $rootNode */
40 9
            $rootNode = $treeBuilder->getRootNode();
41
        } else {
42
            $treeBuilder = new TreeBuilder();
43
            /** @var \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition $rootNode */
44
            $rootNode = /** @scrutinizer ignore-deprecated */ $treeBuilder->root('yaml_standards_config');
45
        }
46
47 9
        $this->buildItemsNode($rootNode->arrayPrototype());
48
49 9
        return $treeBuilder;
50
    }
51
52
    /**
53
     * @param \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition $node
54
     * @return \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition
55
     */
56 9
    private function buildItemsNode(ArrayNodeDefinition $node): ArrayNodeDefinition
57
    {
58
        return $node
59 9
            ->children()
60 9
                ->arrayNode(self::CONFIG_PATHS_TO_CHECK)->isRequired()->cannotBeEmpty()
61 9
                    ->prototype('scalar')->end()
62 9
                ->/** @scrutinizer ignore-call */end()
63 9
                ->arrayNode(self::CONFIG_EXCLUDED_PATHS)
64 9
                    ->prototype('scalar')->end()
65 9
                ->end()
66 9
                ->arrayNode(self::CONFIG_CHECKERS)
67 9
                    ->isRequired()
68 9
                    ->arrayPrototype()
69 9
                        ->children()
70 9
                            ->scalarNode(self::CONFIG_PATH_TO_CHECKER)->defaultNull()->end()
71 9
                            ->arrayNode(self::CONFIG_PARAMETERS_FOR_CHECKER)
72 9
                                ->addDefaultsIfNotSet()
73 9
                                    ->children()
74 9
                                        ->scalarNode(self::CONFIG_PARAMETERS_DEPTH)->defaultValue(4)->end()
75 9
                                        ->scalarNode(self::CONFIG_PARAMETERS_INDENTS)->defaultValue(4)->end()
76 9
                                        ->scalarNode(self::CONFIG_PARAMETERS_LEVEL)->defaultValue(2)->end()
77 9
                                        ->enumNode(self::CONFIG_PARAMETERS_SERVICE_ALIASING_TYPE)->defaultValue(self::CONFIG_PARAMETERS_SERVICE_ALIASING_TYPE_VALUE_SHORT)->values([
78 9
                                            self::CONFIG_PARAMETERS_SERVICE_ALIASING_TYPE_VALUE_SHORT,
79 9
                                            self::CONFIG_PARAMETERS_SERVICE_ALIASING_TYPE_VALUE_LONG,
80 9
                                        ])->end()
81 9
                                        ->enumNode(self::CONFIG_PARAMETERS_INDENTS_COMMENTS_WITHOUT_PARENT)->defaultValue(self::CONFIG_PARAMETERS_INDENTS_COMMENTS_WITHOUT_PARENT_VALUE_DEFAULT)->values([
82 9
                                            self::CONFIG_PARAMETERS_INDENTS_COMMENTS_WITHOUT_PARENT_VALUE_DEFAULT,
83 9
                                            self::CONFIG_PARAMETERS_INDENTS_COMMENTS_WITHOUT_PARENT_VALUE_PRESERVED,
84 9
                                        ])->end()
85 9
                                    ->end()
86 9
                                ->end()
87 9
                            ->end()
88 9
                        ->end()
89 9
                    ->end()
90 9
                ->end()
91 9
            ->end();
92
    }
93
}
94