Completed
Pull Request — master (#47)
by Povilas
02:04
created

ConditionExtension::comparesToConst()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 11
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 11
rs 9.4285
cc 3
eloc 7
nc 3
nop 1
1
<?php
2
3
namespace Povils\PHPMND\Extension;
4
5
use PhpParser\Node;
6
use PhpParser\Node\Expr\BinaryOp;
7
use PhpParser\Node\Expr\BinaryOp\Coalesce;
8
use PhpParser\Node\Expr\BinaryOp\Equal;
9
use PhpParser\Node\Expr\BinaryOp\Greater;
10
use PhpParser\Node\Expr\BinaryOp\GreaterOrEqual;
11
use PhpParser\Node\Expr\BinaryOp\Identical;
12
use PhpParser\Node\Expr\BinaryOp\LogicalAnd;
13
use PhpParser\Node\Expr\BinaryOp\LogicalOr;
14
use PhpParser\Node\Expr\BinaryOp\LogicalXor;
15
use PhpParser\Node\Expr\BinaryOp\NotEqual;
16
use PhpParser\Node\Expr\BinaryOp\NotIdentical;
17
use PhpParser\Node\Expr\BinaryOp\Smaller;
18
use PhpParser\Node\Expr\BinaryOp\SmallerOrEqual;
19
use PhpParser\Node\Expr\BinaryOp\Spaceship;
20
use PhpParser\Node\Expr\ConstFetch;
21
22
/**
23
 * Class ConditionExtension
24
 *
25
 * @package Povils\PHPMND\Extension
26
 */
27
class ConditionExtension implements Extension
28
{
29
    /**
30
     * @inheritdoc
31
     */
32
    public function getName()
33
    {
34
        return 'condition';
35
    }
36
37
    /**
38
     * @inheritdoc
39
     */
40
    public function extend(Node $node)
41
    {
42
        return
43
            $this->isCondition($node->getAttribute('parent'))
44
            &&
45
            false === $this->comparesToConst($node->getAttribute('parent'));
46
    }
47
48
    /**
49
     * @param Node $node
50
     *
51
     * @return bool
52
     */
53
    private function isCondition($node)
54
    {
55
        return
56
            $node instanceof BinaryOp
57
            &&
58
            (
59
                $node instanceof Equal
60
                ||
61
                $node instanceof NotEqual
62
                ||
63
                $node instanceof Greater
64
                ||
65
                $node instanceof GreaterOrEqual
66
                ||
67
                $node instanceof Smaller
68
                ||
69
                $node instanceof SmallerOrEqual
70
                ||
71
                $node instanceof Identical
72
                ||
73
                $node instanceof NotIdentical
74
                ||
75
                $node instanceof LogicalAnd
76
                ||
77
                $node instanceof LogicalOr
78
                ||
79
                $node instanceof LogicalXor
80
                ||
81
                $node instanceof Coalesce
82
                ||
83
                $node instanceof Spaceship
84
            );
85
    }
86
87
    /**
88
     * @param BinaryOp $node
89
     *
90
     * @return bool
91
     */
92
    private function comparesToConst($node)
93
    {
94
        return
95
            $node instanceof BinaryOp
96
            &&
97
            (
98
                $node->left instanceof ConstFetch
99
                ||
100
                $node->right instanceof ConstFetch
101
            );
102
    }
103
}
104