Passed
Push — master ( de3d61...be839c )
by Alec
13:42 queued 13s
created

definitions()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 115
Code Lines 88

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 88
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 115
rs 8.2617

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
use AlecRabbit\Spinner\Container\DefinitionRegistry;
6
use AlecRabbit\Spinner\Contract\Option\OptionCursor;
7
use AlecRabbit\Spinner\Contract\Option\OptionNormalizerMode;
8
use AlecRabbit\Spinner\Contract\Option\OptionStyleMode;
9
use AlecRabbit\Spinner\Contract\Output\IResourceStream;
10
use AlecRabbit\Spinner\Core\Builder\BufferedOutputBuilder;
11
use AlecRabbit\Spinner\Core\Builder\ConsoleCursorBuilder;
12
use AlecRabbit\Spinner\Core\Builder\Contract\IBufferedOutputBuilder;
13
use AlecRabbit\Spinner\Core\Builder\Contract\IConsoleCursorBuilder;
14
use AlecRabbit\Spinner\Core\Builder\Contract\IDriverOutputBuilder;
15
use AlecRabbit\Spinner\Core\Builder\Contract\IIntegerNormalizerBuilder;
16
use AlecRabbit\Spinner\Core\Builder\Contract\ILoopSetupBuilder;
17
use AlecRabbit\Spinner\Core\Builder\Contract\ITimerBuilder;
18
use AlecRabbit\Spinner\Core\Builder\DriverBuilder;
19
use AlecRabbit\Spinner\Core\Builder\DriverOutputBuilder;
20
use AlecRabbit\Spinner\Core\Builder\IntegerNormalizerBuilder;
21
use AlecRabbit\Spinner\Core\Builder\LoopSetupBuilder;
22
use AlecRabbit\Spinner\Core\Builder\Settings\AuxSettingsBuilder;
23
use AlecRabbit\Spinner\Core\Builder\Settings\Contract\IAuxSettingsBuilder;
24
use AlecRabbit\Spinner\Core\Builder\Settings\Contract\IDriverSettingsBuilder;
25
use AlecRabbit\Spinner\Core\Builder\Settings\Contract\ISettingsProviderBuilder;
26
use AlecRabbit\Spinner\Core\Builder\Settings\Contract\IWidgetSettingsBuilder;
27
use AlecRabbit\Spinner\Core\Builder\Settings\DriverSettingsBuilder;
28
use AlecRabbit\Spinner\Core\Builder\Settings\SettingsProviderBuilder;
29
use AlecRabbit\Spinner\Core\Builder\TimerBuilder;
30
use AlecRabbit\Spinner\Core\Builder\WidgetSettingsBuilder;
31
use AlecRabbit\Spinner\Core\Contract\IDriver;
32
use AlecRabbit\Spinner\Core\Contract\IDriverBuilder;
33
use AlecRabbit\Spinner\Core\Contract\IDriverLinker;
34
use AlecRabbit\Spinner\Core\Contract\IDriverSetup;
35
use AlecRabbit\Spinner\Core\Contract\IIntervalNormalizer;
36
use AlecRabbit\Spinner\Core\Contract\ILoopSetup;
37
use AlecRabbit\Spinner\Core\Contract\ISettingsProvider;
38
use AlecRabbit\Spinner\Core\Contract\ISignalProcessingProbe;
39
use AlecRabbit\Spinner\Core\Contract\IWidthMeasurer;
40
use AlecRabbit\Spinner\Core\Contract\Loop\Contract\ILoop;
41
use AlecRabbit\Spinner\Core\Contract\Loop\Contract\ILoopProbe;
42
use AlecRabbit\Spinner\Core\DriverSetup;
43
use AlecRabbit\Spinner\Core\Factory\BufferedOutputSingletonFactory;
44
use AlecRabbit\Spinner\Core\Factory\CharFrameFactory;
45
use AlecRabbit\Spinner\Core\Factory\CharFrameRevolverFactory;
46
use AlecRabbit\Spinner\Core\Factory\ConsoleCursorFactory;
47
use AlecRabbit\Spinner\Core\Factory\Contract\IBufferedOutputSingletonFactory;
48
use AlecRabbit\Spinner\Core\Factory\Contract\ICharFrameFactory;
49
use AlecRabbit\Spinner\Core\Factory\Contract\ICharFrameRevolverFactory;
50
use AlecRabbit\Spinner\Core\Factory\Contract\IConsoleCursorFactory;
51
use AlecRabbit\Spinner\Core\Factory\Contract\IDriverLinkerFactory;
52
use AlecRabbit\Spinner\Core\Factory\Contract\IDriverOutputFactory;
53
use AlecRabbit\Spinner\Core\Factory\Contract\IDriverFactory;
54
use AlecRabbit\Spinner\Core\Factory\Contract\IFrameCollectionFactory;
55
use AlecRabbit\Spinner\Core\Factory\Contract\IIntervalFactory;
56
use AlecRabbit\Spinner\Core\Factory\Contract\IIntervalNormalizerFactory;
57
use AlecRabbit\Spinner\Core\Factory\Contract\ILoopProbeFactory;
58
use AlecRabbit\Spinner\Core\Factory\Contract\ILoopSettingsFactory;
59
use AlecRabbit\Spinner\Core\Factory\Contract\ILoopSetupFactory;
60
use AlecRabbit\Spinner\Core\Factory\Contract\ILoopFactory;
61
use AlecRabbit\Spinner\Core\Factory\Contract\ISignalProcessingProbeFactory;
62
use AlecRabbit\Spinner\Core\Factory\Contract\ISpinnerFactory;
63
use AlecRabbit\Spinner\Core\Factory\Contract\IStyleFrameFactory;
64
use AlecRabbit\Spinner\Core\Factory\Contract\IStyleFrameRevolverFactory;
65
use AlecRabbit\Spinner\Core\Factory\Contract\ITerminalProbeFactory;
66
use AlecRabbit\Spinner\Core\Factory\Contract\ITerminalSettingsFactory;
67
use AlecRabbit\Spinner\Core\Factory\Contract\ITimerFactory;
68
use AlecRabbit\Spinner\Core\Factory\Contract\IWidgetSettingsFactory;
69
use AlecRabbit\Spinner\Core\Factory\Contract\IWidthMeasurerFactory;
70
use AlecRabbit\Spinner\Core\Factory\DriverLinkerFactory;
71
use AlecRabbit\Spinner\Core\Factory\DriverOutputFactory;
72
use AlecRabbit\Spinner\Core\Factory\DriverFactory;
73
use AlecRabbit\Spinner\Core\Factory\FrameCollectionFactory;
74
use AlecRabbit\Spinner\Core\Factory\IntervalFactory;
75
use AlecRabbit\Spinner\Core\Factory\IntervalNormalizerFactory;
76
use AlecRabbit\Spinner\Core\Factory\LoopSettingsFactory;
77
use AlecRabbit\Spinner\Core\Factory\LoopSetupFactory;
78
use AlecRabbit\Spinner\Core\Factory\LoopFactory;
79
use AlecRabbit\Spinner\Core\Factory\SignalProcessingProbeFactory;
80
use AlecRabbit\Spinner\Core\Factory\SpinnerFactory;
81
use AlecRabbit\Spinner\Core\Factory\StyleFrameFactory;
82
use AlecRabbit\Spinner\Core\Factory\StyleFrameRevolverFactory;
83
use AlecRabbit\Spinner\Core\Factory\TerminalProbeFactory;
84
use AlecRabbit\Spinner\Core\Factory\TerminalSettingsFactory;
85
use AlecRabbit\Spinner\Core\Factory\TimerFactory;
86
use AlecRabbit\Spinner\Core\Factory\WidgetSettingsFactory;
87
use AlecRabbit\Spinner\Core\Factory\WidthMeasurerFactory;
0 ignored issues
show
Bug introduced by
The type AlecRabbit\Spinner\Core\...ry\WidthMeasurerFactory was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
88
use AlecRabbit\Spinner\Core\LoopSetup;
89
use AlecRabbit\Spinner\Core\Output\ResourceStream;
90
use AlecRabbit\Spinner\Core\Revolver\Contract\IFrameRevolverBuilder;
91
use AlecRabbit\Spinner\Core\Revolver\FrameRevolverBuilder;
92
use AlecRabbit\Spinner\Core\Settings\Contract\IDriverSettings;
93
use AlecRabbit\Spinner\Core\Terminal\NativeTerminalProbe;
94
use AlecRabbit\Spinner\Core\Widget\Contract\IWidgetBuilder;
95
use AlecRabbit\Spinner\Core\Widget\Contract\IWidgetRevolverBuilder;
96
use AlecRabbit\Spinner\Core\Widget\Factory\Contract\IWidgetFactory;
97
use AlecRabbit\Spinner\Core\Widget\Factory\Contract\IWidgetRevolverFactory;
98
use AlecRabbit\Spinner\Core\Widget\Factory\WidgetFactory;
99
use AlecRabbit\Spinner\Core\Widget\Factory\WidgetRevolverFactory;
100
use AlecRabbit\Spinner\Core\Widget\WidgetBuilder;
101
use AlecRabbit\Spinner\Core\Widget\WidgetRevolverBuilder;
102
use AlecRabbit\Spinner\Exception\DomainException;
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, DomainException. Consider defining an alias.

Let?s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let?s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
103
use Psr\Container\ContainerInterface;
104
105
// @codeCoverageIgnoreStart
106
107
$definitions = DefinitionRegistry::getInstance();
108
109
foreach (definitions() as $id => $definition) {
110
    $definitions->bind($id, $definition);
111
}
112
113
function definitions(): Traversable
114
{
115
    yield from [
116
        IAuxSettingsBuilder::class => AuxSettingsBuilder::class,
117
        IBufferedOutputBuilder::class => BufferedOutputBuilder::class,
118
        IBufferedOutputSingletonFactory::class => BufferedOutputSingletonFactory::class,
119
        ICharFrameFactory::class => CharFrameFactory::class,
120
        ICharFrameRevolverFactory::class => CharFrameRevolverFactory::class,
121
        IConsoleCursorBuilder::class => ConsoleCursorBuilder::class,
122
        IConsoleCursorFactory::class => ConsoleCursorFactory::class,
123
        ISettingsProviderBuilder::class => SettingsProviderBuilder::class,
124
        IDriverLinkerFactory::class => DriverLinkerFactory::class,
125
        IDriverBuilder::class => DriverBuilder::class,
126
        IDriverOutputBuilder::class => DriverOutputBuilder::class,
127
        IDriverOutputFactory::class => DriverOutputFactory::class,
128
        IDriverSettingsBuilder::class => DriverSettingsBuilder::class,
129
        IDriverSetup::class => DriverSetup::class,
130
        IDriverFactory::class => DriverFactory::class,
131
        IFrameCollectionFactory::class => FrameCollectionFactory::class,
132
        IFrameRevolverBuilder::class => FrameRevolverBuilder::class,
133
        IIntegerNormalizerBuilder::class => IntegerNormalizerBuilder::class,
134
        IIntervalFactory::class => IntervalFactory::class,
135
        IIntervalNormalizerFactory::class => IntervalNormalizerFactory::class,
136
        ILoopSetup::class => LoopSetup::class,
137
        ILoopSetupBuilder::class => LoopSetupBuilder::class,
138
        ILoopSetupFactory::class => LoopSetupFactory::class,
139
        ILoopFactory::class => LoopFactory::class,
140
        ISpinnerFactory::class => SpinnerFactory::class,
141
        IStyleFrameFactory::class => StyleFrameFactory::class,
142
        IStyleFrameRevolverFactory::class => StyleFrameRevolverFactory::class,
143
        ITimerBuilder::class => TimerBuilder::class,
144
        ITimerFactory::class => TimerFactory::class,
145
        IWidgetBuilder::class => WidgetBuilder::class,
146
        IWidgetFactory::class => WidgetFactory::class,
147
        IWidgetSettingsFactory::class => WidgetSettingsFactory::class,
148
        IWidgetRevolverBuilder::class => WidgetRevolverBuilder::class,
149
        IWidgetRevolverFactory::class => WidgetRevolverFactory::class,
150
        IWidgetSettingsBuilder::class => WidgetSettingsBuilder::class,
151
        IWidthMeasurerFactory::class => WidthMeasurerFactory::class,
152
153
        ISettingsProvider::class => static function (ContainerInterface $container): ISettingsProvider {
154
            return $container->get(ISettingsProviderBuilder::class)->build();
155
        },
156
        IDriver::class => static function (ContainerInterface $container): IDriver {
157
            return $container->get(IDriverFactory::class)->getDriver();
158
        },
159
        IDriverLinker::class => static function (ContainerInterface $container): IDriverLinker {
160
            return $container->get(IDriverLinkerFactory::class)->getDriverLinker();
161
        },
162
        IDriverSettings::class => static function (ContainerInterface $container): IDriverSettings {
163
            return $container->get(ISettingsProvider::class)->getDriverSettings();
164
        },
165
        IIntervalNormalizer::class => static function (ContainerInterface $container): IIntervalNormalizer {
166
            return $container->get(IIntervalNormalizerFactory::class)->create();
167
        },
168
        ILoop::class => static function (ContainerInterface $container): ILoop {
169
            return $container->get(ILoopFactory::class)->getLoop();
170
        },
171
        ILoopProbeFactory::class => static function (): never {
172
            throw new DomainException(
173
                sprintf(
174
                    'Service for id [%s] is not available in this context.',
175
                    ILoopProbeFactory::class
176
                )
177
            );
178
        },
179
        ILoopProbe::class => static function (ContainerInterface $container): ILoopProbe {
180
            return $container->get(ILoopProbeFactory::class)->getProbe();
181
        },
182
        ILoopSettingsFactory::class => static function (ContainerInterface $container): ILoopSettingsFactory {
183
            $loopProbe = null;
0 ignored issues
show
Unused Code introduced by
The assignment to $loopProbe is dead and can be removed.
Loading history...
184
            $signalProcessingProbe = null;
185
            try {
186
                $loopProbe = $container->get(ILoopProbeFactory::class)->getProbe();
187
                $signalProcessingProbe = $container->get(ISignalProcessingProbeFactory::class)->getProbe();
188
            } finally {
189
                return new LoopSettingsFactory(
190
                    $loopProbe,
191
                    $signalProcessingProbe
192
                );
193
            }
194
        },
195
        ISignalProcessingProbe::class => static function (ContainerInterface $container): ISignalProcessingProbe {
196
            return $container->get(ISignalProcessingProbeFactory::class)->getProbe();
197
        },
198
        ISignalProcessingProbeFactory::class => SignalProcessingProbeFactory::class,
199
        IResourceStream::class => static function (ContainerInterface $container): IResourceStream {
200
            /** @var ISettingsProvider $provider */
201
            $provider = $container->get(ISettingsProvider::class);
202
            return new ResourceStream($provider->getTerminalSettings()->getOutputStream());
203
        },
204
        ITerminalProbeFactory::class => static function (): ITerminalProbeFactory {
205
            return new TerminalProbeFactory(
206
                new ArrayObject([
207
                    NativeTerminalProbe::class,
208
                ]),
209
            );
210
        },
211
        ITerminalSettingsFactory::class => static function (ContainerInterface $container
212
        ): ITerminalSettingsFactory {
213
            $terminalProbe = $container->get(ITerminalProbeFactory::class)->getProbe();
214
215
            return new TerminalSettingsFactory($terminalProbe);
216
        },
217
        IWidthMeasurer::class => static function (ContainerInterface $container): IWidthMeasurer {
218
            return $container->get(IWidthMeasurerFactory::class)->create();
219
        },
220
        OptionNormalizerMode::class => static function (ContainerInterface $container): OptionNormalizerMode {
221
            return $container->get(ISettingsProvider::class)->getAuxSettings()->getOptionNormalizerMode();
222
        },
223
        OptionCursor::class => static function (ContainerInterface $container): OptionCursor {
224
            return $container->get(ISettingsProvider::class)->getTerminalSettings()->getOptionCursor();
225
        },
226
        OptionStyleMode::class => static function (ContainerInterface $container): OptionStyleMode {
227
            return $container->get(ISettingsProvider::class)->getTerminalSettings()->getOptionStyleMode();
228
        },
229
    ];
230
}
231
// @codeCoverageIgnoreEnd
232