Passed
Push — master ( 00bc3e...3edb00 )
by Björn
02:16
created

EqualOperatorSniff   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 83
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 3
dl 0
loc 83
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A processToken() 0 17 3
A register() 0 4 1
A replaceToken() 0 8 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BestIt\Sniffs\Comparisons;
6
7
use BestIt\Sniffs\AbstractSniff;
8
use const T_IS_EQUAL;
9
10
/**
11
 * Class EqualOperatorSniff.
12
 *
13
 * @author Mika Bertels <[email protected]>
14
 * @package BestIt\Sniffs\Comparisons
15
 */
16
class EqualOperatorSniff extends AbstractSniff
17
{
18
    /**
19
     * You should use the "Identical" operator (===)
20
     *
21
     * @var string CODE_EQUAL_OPERATOR_FOUND
22
     */
23
    public const CODE_EQUAL_OPERATOR_FOUND = 'EqualOperatorFound';
24
25
    /**
26
     * Warning when an equal operator was found.
27
     *
28
     * @var string WARNING_EQUAL_OPERATOR_FOUND
29
     */
30
    private const MESSAGE_EQUAL_OPERATOR_FOUND = 'Please check if you could use the "Identical" operator (===).';
31
32
    /**
33
     * Is this sniff allowed to fix?
34
     *
35
     * @var bool $isFixing
36
     */
37
    public $isFixable = false;
38
    
39
    /**
40
     * Processes the token.
41
     *
42
     * @return void
43
     */
44
    protected function processToken(): void
45
    {
46
        $file = $this->getFile();
47
        $stackPos = $this->getStackPos();
48
49
        $isFixing = $file->addFixableWarning(
50
            self::MESSAGE_EQUAL_OPERATOR_FOUND,
51
            $stackPos,
52
            self::CODE_EQUAL_OPERATOR_FOUND
53
        );
54
55
        $file->recordMetric($stackPos, 'Found not wanted T_IS_EQUAL', 'yes');
56
57
        if ($isFixing && $this->isFixable) {
58
            $this->replaceToken();
59
        }
60
    }
61
62
    /**
63
     * Registers the tokens that this sniff wants to listen for.
64
     *
65
     * An example return value for a sniff that wants to listen for whitespace
66
     * and any comments would be:
67
     *
68
     * <code>
69
     *    return array(
70
     *            T_WHITESPACE,
71
     *            T_DOC_COMMENT,
72
     *            T_COMMENT,
73
     *           );
74
     * </code>
75
     *
76
     * @see    Tokens.php
77
     *
78
     * @return int[]
79
     */
80
    public function register(): array
81
    {
82
        return [T_IS_EQUAL];
83
    }
84
85
    /**
86
     * Replace token with the T_IS_IDENTIAL token.
87
     *
88
     * @return void
89
     */
90
    private function replaceToken(): void
91
    {
92
        $file = $this->getFile();
93
94
        $file->fixer->beginChangeset();
95
        $file->fixer->replaceToken($this->getStackPos(), '===');
96
        $file->fixer->endChangeset();
97
    }
98
}
99