Passed
Push — master ( 9787f7...8354ea )
by Tomáš
02:37
created

Phrase::visit()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 15
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 7
nc 2
nop 3
dl 0
loc 15
rs 10
c 0
b 0
f 0
1
<?php declare(strict_types = 1);
2
3
namespace Apicart\FQL\Tests\Integration\Generator\SQL\Visitor;
4
5
use Apicart\FQL\Generator\Common\AbstractVisitor;
6
use Apicart\FQL\Tests\Integration\Generator\SQL\Resolver\AbstractFilterResolver;
7
use Apicart\FQL\Token\Node\Term;
8
use Apicart\FQL\Token\Token\Phrase as PhraseToken;
9
use Apicart\FQL\Value\AbstractNode;
10
use LogicException;
11
12
final class Phrase extends AbstractVisitor
13
{
14
15
	/**
16
	 * @var AbstractFilterResolver
17
	 */
18
	private $filterResolver;
19
20
21
	public function __construct(AbstractFilterResolver $filterResolver)
22
	{
23
		$this->filterResolver = $filterResolver;
24
	}
25
26
27
	public function accept(AbstractNode $node): bool
28
	{
29
		return $node instanceof Term && $node->getToken() instanceof PhraseToken;
30
	}
31
32
33
	public function visit(AbstractNode $node, ?AbstractVisitor $subVisitor = null, ?array $options = null): string
34
	{
35
		/** @var Term $termNode */
36
		$termNode = $node;
37
		/** @var PhraseToken $token */
38
		$token = $termNode->getToken();
39
40
		$domain = $token->getDomain();
41
		if ($domain === '') {
42
			throw new LogicException('Missing required domain');
43
		}
44
45
		$phraseEscaped = preg_replace("/([\\{$token->getQuote()}])/", '\\\\$1', $token->getPhrase());
46
47
		return $this->filterResolver->resolve($domain, $phraseEscaped);
0 ignored issues
show
Bug introduced by
It seems like $domain can also be of type null; however, parameter $column of Apicart\FQL\Tests\Integr...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

47
		return $this->filterResolver->resolve(/** @scrutinizer ignore-type */ $domain, $phraseEscaped);
Loading history...
48
	}
49
50
}
51