Passed
Push — master ( 239abe...00bc3e )
by Björn
02:21
created

EqualOperatorSniff::replaceToken()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 8
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BestIt\Sniffs\Formatting;
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\Formatting
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