Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
94.12% covered (success)
94.12%
16 / 17
90.00% covered (success)
90.00%
9 / 10
CRAP
0.00% covered (danger)
0.00%
0 / 1
KeywordNodeVisitor
94.12% covered (success)
94.12%
16 / 17
90.00% covered (success)
90.00%
9 / 10
14.04
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 visitWordsQueryNode
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 visitPhraseQueryNode
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 visitPhrasePrefixNode
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 visitFuzzyNode
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 visitPrefixNode
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 visitWildcardNode
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 visitEmptyQueryNode
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 visitKeywordFeatureNode
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
2
 filterKeyword
83.33% covered (warning)
83.33%
5 / 6
0.00% covered (danger)
0.00%
0 / 1
4.07
 doVisitKeyword
n/a
0 / 0
n/a
0 / 0
0
1<?php
2
3namespace CirrusSearch\Parser\AST\Visitor;
4
5use CirrusSearch\Parser\AST\EmptyQueryNode;
6use CirrusSearch\Parser\AST\FuzzyNode;
7use CirrusSearch\Parser\AST\KeywordFeatureNode;
8use CirrusSearch\Parser\AST\PhrasePrefixNode;
9use CirrusSearch\Parser\AST\PhraseQueryNode;
10use CirrusSearch\Parser\AST\PrefixNode;
11use CirrusSearch\Parser\AST\WildcardNode;
12use CirrusSearch\Parser\AST\WordsQueryNode;
13
14/**
15 * Simple KeywordFeatureNode visitor
16 */
17abstract class KeywordNodeVisitor extends LeafVisitor {
18
19    /**
20     * @var string[] class names to accept (empty to accept all)
21     */
22    private $keywordClasses;
23
24    /**
25     * @param array $excludeOccurs list of boolean accurence type to ignore
26     * @param array $keywordClasses list of KeywordFeature classes to accept (empty to accept them all)
27     */
28    public function __construct( array $excludeOccurs = [], array $keywordClasses = [] ) {
29        parent::__construct( $excludeOccurs );
30        $this->keywordClasses = $keywordClasses;
31    }
32
33    /**
34     * @param WordsQueryNode $node
35     */
36    final public function visitWordsQueryNode( WordsQueryNode $node ) {
37    }
38
39    /**
40     * @param PhraseQueryNode $node
41     */
42    final public function visitPhraseQueryNode( PhraseQueryNode $node ) {
43    }
44
45    /**
46     * @param PhrasePrefixNode $node
47     */
48    final public function visitPhrasePrefixNode( PhrasePrefixNode $node ) {
49    }
50
51    /**
52     * @param FuzzyNode $node
53     */
54    final public function visitFuzzyNode( FuzzyNode $node ) {
55    }
56
57    /**
58     * @param PrefixNode $node
59     */
60    final public function visitPrefixNode( PrefixNode $node ) {
61    }
62
63    /**
64     * @param WildcardNode $node
65     */
66    final public function visitWildcardNode( WildcardNode $node ) {
67    }
68
69    /**
70     * @param EmptyQueryNode $node
71     */
72    final public function visitEmptyQueryNode( EmptyQueryNode $node ) {
73    }
74
75    /**
76     * @param KeywordFeatureNode $node
77     */
78    final public function visitKeywordFeatureNode( KeywordFeatureNode $node ) {
79        if ( $this->filterKeyword( $node ) ) {
80            $this->doVisitKeyword( $node );
81        }
82    }
83
84    /**
85     * @param KeywordFeatureNode $node
86     * @return bool
87     */
88    private function filterKeyword( KeywordFeatureNode $node ) {
89        if ( $this->keywordClasses === [] ) {
90            return true;
91        }
92        foreach ( $this->keywordClasses as $class ) {
93            if ( $node->getKeyword() instanceof $class ) {
94                return true;
95            }
96        }
97        return false;
98    }
99
100    /**
101     * @param KeywordFeatureNode $node
102     */
103    abstract public function doVisitKeyword( KeywordFeatureNode $node );
104}