Passed
Push — master ( 44542b...077e9d )
by Tomáš
03:58
created

Word   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Test Coverage

Coverage 94.44%

Importance

Changes 0
Metric Value
eloc 16
dl 0
loc 44
ccs 17
cts 18
cp 0.9444
rs 10
c 0
b 0
f 0
wmc 7

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A accept() 0 3 2
A visit() 0 23 4
1
<?php declare(strict_types = 1);
2
3
namespace Apicart\FQL\Generator\SQL;
4
5
use Apicart\FQL\Generator\Common\AbstractVisitor;
6
use Apicart\FQL\Generator\SQL\Resolver\AbstractFilterResolver;
7
use Apicart\FQL\Token\Node\Group as GroupNode;
8
use Apicart\FQL\Token\Node\Term;
9
use Apicart\FQL\Token\Token\Word as WordToken;
10
use Apicart\FQL\Value\AbstractNode;
11
use LogicException;
12
13
final class Word extends AbstractVisitor
14
{
15
16
    /**
17
     * @var AbstractFilterResolver
18
     */
19
    private $filterResolver;
20
21
22 1
    public function __construct(AbstractFilterResolver $filterResolver)
23
    {
24 1
        $this->filterResolver = $filterResolver;
25 1
    }
26
27
28 1
    public function accept(AbstractNode $node): bool
29
    {
30 1
        return $node instanceof Term && $node->getToken() instanceof WordToken;
31
    }
32
33
34 1
    public function visit(AbstractNode $node, ?AbstractVisitor $subVisitor = null, ?array $options = null): string
35
    {
36
        /** @var Term $termNode */
37 1
        $termNode = $node;
38
        /** @var WordToken $token */
39 1
        $token = $termNode->getToken();
40 1
        $domain = $token->getDomain();
41
42 1
        if ($domain === '') {
43 1
            $parent = $options['parent'] ?? false;
44 1
            if ($parent instanceof GroupNode) {
45 1
                $tokenLeft = $parent->getTokenLeft();
46 1
                $domain = $tokenLeft->getDomain();
47
            }
48
49 1
            if ($domain === '') {
50
                throw new LogicException('Missing required domain');
51
            }
52
        }
53
54 1
        $wordEscaped = preg_replace('/([\\\'"+\-!():#@ ])/', '\\\\$1', $token->getWord());
55
56 1
        return $this->filterResolver->resolve($domain, $wordEscaped);
0 ignored issues
show
Bug introduced by
It seems like $domain can also be of type null; however, parameter $column of Apicart\FQL\Generator\SQ...lterResolver::resolve() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

56
        return $this->filterResolver->resolve(/** @scrutinizer ignore-type */ $domain, $wordEscaped);
Loading history...
57
    }
58
59
}
60