Passed
Push — master ( 73347a...58d64d )
by Peter
04:44 queued 12s
created

YamlStandardConfigDefinition::buildItemsNode()   B

Complexity

Conditions 5
Paths 1

Size

Total Lines 62
Code Lines 52

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 47
CRAP Score 5.0002

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 52
c 3
b 0
f 0
dl 0
loc 62
ccs 47
cts 48
cp 0.9792
rs 8.7361
cc 5
nc 1
nop 1
crap 5.0002

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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
    public const CONFIG_PARAMETERS_ALPHABETICAL_PRIORITIZED_KEYS = 'prioritizedKeys';
25
    public const CONFIG_PARAMETERS_IGNORE_COMMENTS_INDENT = 'ignoreCommentsIndent';
26
27
    public const CONFIG_PARAMETERS_SERVICE_ALIASING_TYPE_VALUE_SHORT = 'short';
28
    public const CONFIG_PARAMETERS_SERVICE_ALIASING_TYPE_VALUE_LONG = 'long';
29
30
    public const CONFIG_PARAMETERS_INDENTS_COMMENTS_WITHOUT_PARENT_VALUE_DEFAULT = 'default';
31
    public const CONFIG_PARAMETERS_INDENTS_COMMENTS_WITHOUT_PARENT_VALUE_PRESERVED = 'preserved';
32
33
    private const REGEX_FILE_EXTENSION = '/\..+$/';
34
35
    /**
36
     * @inheritDoc
37
     */
38 10
    public function getConfigTreeBuilder(): TreeBuilder
39
    {
40
        // fix for Symfony 4.2 and newer versions
41 10
        if (Kernel::VERSION_ID >= 40200) {
42 10
            $treeBuilder = new TreeBuilder('yaml_standards_config');
43
            /** @var \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition $rootNode */
44 10
            $rootNode = $treeBuilder->getRootNode();
45
        } else {
46
            $treeBuilder = new TreeBuilder();
47
            /** @var \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition $rootNode */
48
            $rootNode = /** @scrutinizer ignore-deprecated */ $treeBuilder->root('yaml_standards_config');
49
        }
50
51 10
        $this->buildItemsNode($rootNode->arrayPrototype());
52
53 10
        return $treeBuilder;
54
    }
55
56
    /**
57
     * @param \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition $node
58
     * @return \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition
59
     */
60 10
    private function buildItemsNode(ArrayNodeDefinition $node): ArrayNodeDefinition
61
    {
62
        return $node
63 10
            ->children()
64 10
                ->arrayNode(self::CONFIG_PATHS_TO_CHECK)->isRequired()->cannotBeEmpty()
65 10
                    ->validate()
66 10
                        ->ifTrue(function (array $patterns) {
67 10
                            foreach ($patterns as $pattern) {
68 10
                                if (preg_match(self::REGEX_FILE_EXTENSION, $pattern) === 0) {
69 1
                                    return true;
70
                                }
71
                            }
72
73 9
                            return false;
74
                        })
75 10
                        ->thenInvalid('Invalid pattern: %s. Pattern must have to suffix defined.')
76 10
                    ->end()
77 10
                    ->/** @scrutinizer ignore-call */prototype('scalar')->end()
78 10
                ->/** @scrutinizer ignore-call */end()
79 10
                ->arrayNode(self::CONFIG_EXCLUDED_PATHS)
80 10
                    ->validate()
81 10
                        ->ifTrue(function (array $patterns) {
82 5
                            foreach ($patterns as $pattern) {
83 5
                                if (preg_match(self::REGEX_FILE_EXTENSION, $pattern) === 0) {
84
                                    return true;
85
                                }
86
                            }
87
88 5
                            return false;
89
                        })
90 10
                        ->thenInvalid('Invalid pattern: %s. Pattern must have to suffix defined.')
91 10
                    ->end()
92 10
                    ->prototype('scalar')->end()
93 10
                ->end()
94 10
                ->arrayNode(self::CONFIG_CHECKERS)
95 10
                    ->isRequired()
96 10
                    ->arrayPrototype()
97 10
                        ->children()
98 10
                            ->scalarNode(self::CONFIG_PATH_TO_CHECKER)->defaultNull()->end()
99 10
                            ->arrayNode(self::CONFIG_PARAMETERS_FOR_CHECKER)
100 10
                                ->addDefaultsIfNotSet()
101 10
                                    ->children()
102 10
                                        ->scalarNode(self::CONFIG_PARAMETERS_DEPTH)->defaultValue(4)->end()
103 10
                                        ->scalarNode(self::CONFIG_PARAMETERS_INDENTS)->defaultValue(4)->end()
104 10
                                        ->scalarNode(self::CONFIG_PARAMETERS_LEVEL)->defaultValue(2)->end()
105 10
                                        ->enumNode(self::CONFIG_PARAMETERS_SERVICE_ALIASING_TYPE)->defaultValue(self::CONFIG_PARAMETERS_SERVICE_ALIASING_TYPE_VALUE_SHORT)->values([
106
                                            self::CONFIG_PARAMETERS_SERVICE_ALIASING_TYPE_VALUE_SHORT,
107
                                            self::CONFIG_PARAMETERS_SERVICE_ALIASING_TYPE_VALUE_LONG,
108 10
                                        ])->end()
109 10
                                        ->enumNode(self::CONFIG_PARAMETERS_INDENTS_COMMENTS_WITHOUT_PARENT)->defaultValue(self::CONFIG_PARAMETERS_INDENTS_COMMENTS_WITHOUT_PARENT_VALUE_DEFAULT)->values([
110
                                            self::CONFIG_PARAMETERS_INDENTS_COMMENTS_WITHOUT_PARENT_VALUE_DEFAULT,
111
                                            self::CONFIG_PARAMETERS_INDENTS_COMMENTS_WITHOUT_PARENT_VALUE_PRESERVED,
112 10
                                        ])->end()
113 10
                                        ->booleanNode(self::CONFIG_PARAMETERS_IGNORE_COMMENTS_INDENT)->defaultValue(false)->end()
114 10
                                        ->arrayNode(self::CONFIG_PARAMETERS_ALPHABETICAL_PRIORITIZED_KEYS)->prototype('scalar')->end()
115 10
                                    ->end()
116 10
                                ->end()
117 10
                            ->end()
118 10
                        ->end()
119 10
                    ->end()
120 10
                ->end()
121 10
            ->end();
122
    }
123
}
124