Code Duplication    Length = 21-22 lines in 2 locations

src/Parser.php 2 locations

@@ 89-110 (lines=22) @@
86
    /**
87
     * @return Ast\Term|Ast\Disjunction
88
     */
89
    private function disjunction()
90
    {
91
        /** @var Ast\Term[] $terms */
92
        $terms = [];
93
        $terms[] = $this->conjunction();
94
95
        if ($this->lexer->isNextToken(Tokens::T_SP)) {
96
            $nextToken = $this->lexer->glimpse();
97
            if ($nextToken && $nextToken->is(Tokens::T_OR)) {
98
                $this->match(Tokens::T_SP);
99
                $this->match(Tokens::T_OR);
100
                $this->match(Tokens::T_SP);
101
                $terms[] = $this->conjunction();
102
            }
103
        }
104
105
        if (count($terms) == 1) {
106
            return $terms[0];
107
        }
108
109
        return new Ast\Disjunction($terms);
110
    }
111
112
    /**
113
     * @return Ast\Conjunction|Ast\Factor
@@ 115-135 (lines=21) @@
112
    /**
113
     * @return Ast\Conjunction|Ast\Factor
114
     */
115
    private function conjunction()
116
    {
117
        $factors = [];
118
        $factors[] = $this->factor();
119
120
        if ($this->lexer->isNextToken(Tokens::T_SP)) {
121
            $nextToken = $this->lexer->glimpse();
122
            if ($nextToken && $nextToken->is(Tokens::T_AND)) {
123
                $this->match(Tokens::T_SP);
124
                $this->match(Tokens::T_AND);
125
                $this->match(Tokens::T_SP);
126
                $factors[] = $this->factor();
127
            }
128
        }
129
130
        if (count($factors) == 1) {
131
            return $factors[0];
132
        }
133
134
        return new Ast\Conjunction($factors);
135
    }
136
137
    /**
138
     * @return Ast\Filter