GuessFromLoadedExtensions::__invoke()   A
last analyzed

Complexity

Conditions 5
Paths 4

Size

Total Lines 11
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 5

Importance

Changes 2
Bugs 1 Features 0
Metric Value
eloc 7
c 2
b 1
f 0
dl 0
loc 11
ccs 8
cts 8
cp 1
rs 9.6111
cc 5
nc 4
nop 1
crap 5
1
<?php
2
3
namespace ComposerRequireChecker\DependencyGuesser;
4
5
use ComposerRequireChecker\Cli\Options;
6
use ComposerRequireChecker\DefinedSymbolsLocator\LocateDefinedSymbolsFromExtensions;
7
8
class GuessFromLoadedExtensions implements GuesserInterface
9
{
10
    private $loadedExtensions;
11
12
    /**
13
     * @var string[]|null
14
     */
15
    private $coreExtensions;
16
17 5
    public function __construct(?Options $options = null)
18
    {
19 5
        $this->loadedExtensions = get_loaded_extensions();
20 5
        if ($options instanceof Options) {
21 3
            $this->coreExtensions = $options->getPhpCoreExtensions();
22
        }
23 5
    }
24
25 5
    public function __invoke(string $symbolName): \Generator
26
    {
27 5
        $definedSymbolsFromExtensions = new LocateDefinedSymbolsFromExtensions();
28 5
        foreach ($this->loadedExtensions as $extensionName) {
29 5
            $extensionSymbols = $definedSymbolsFromExtensions([$extensionName]);
30 5
            if (in_array($symbolName, $extensionSymbols)) {
31 3
                if ($this->coreExtensions && in_array($extensionName, $this->coreExtensions)) {
32 1
                    yield 'php';
33
                }
34
35 2
                yield 'ext-' . $extensionName;
36
            }
37
        }
38 3
    }
39
}
40