Completed
Push — master ( a2e7e2...d30d88 )
by Wim
7s
created

ConstantArraysUsingDefineSniff::process()   C

Complexity

Conditions 7
Paths 7

Size

Total Lines 42
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 1 Features 0
Metric Value
cc 7
eloc 24
c 3
b 1
f 0
nc 7
nop 2
dl 0
loc 42
rs 6.7272
1
<?php
2
/**
3
 * PHPCompatibility_Sniffs_PHP_ConstantArraysUsingDefineSniff.
4
 *
5
 * PHP version 7.0
6
 *
7
 * @category  PHP
8
 * @package   PHPCompatibility
9
 * @author    Wim Godden <[email protected]>
10
 */
11
12
/**
13
 * PHPCompatibility_Sniffs_PHP_ConstantArraysUsingDefineSniff.
14
 *
15
 * Constant arrays using define in PHP 7.0
16
 *
17
 * PHP version 7.0
18
 *
19
 * @category  PHP
20
 * @package   PHPCompatibility
21
 * @author    Wim Godden <[email protected]>
22
 */
23
class PHPCompatibility_Sniffs_PHP_ConstantArraysUsingDefineSniff extends PHPCompatibility_Sniff
24
{
25
26
    /**
27
     * Returns an array of tokens this test wants to listen for.
28
     *
29
     * @return array
30
     */
31
    public function register()
32
    {
33
        return array(T_STRING);
34
    }
35
36
    /**
37
     * Processes this test, when one of its tokens is encountered.
38
     *
39
     * @param PHP_CodeSniffer_File $phpcsFile The file being scanned.
40
     * @param int                  $stackPtr  The position of the current token in the
41
     *                                        stack passed in $tokens.
42
     *
43
     * @return void
44
     */
45
    public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr)
46
    {
47
        $tokens = $phpcsFile->getTokens();
48
49
        $ignore = array(
50
            T_DOUBLE_COLON,
51
            T_OBJECT_OPERATOR,
52
            T_FUNCTION,
53
            T_CONST,
54
        );
55
56
        $prevToken = $phpcsFile->findPrevious(T_WHITESPACE, ($stackPtr - 1), null, true);
57
        if (in_array($tokens[$prevToken]['code'], $ignore) === true) {
58
            // Not a call to a PHP function.
59
            return;
60
        }
61
62
        $function = strtolower($tokens[$stackPtr]['content']);
63
64
        if ($function === 'define') {
65
            $openParenthesis = $phpcsFile->findNext(T_OPEN_PARENTHESIS, $stackPtr, null, null, null, true);
0 ignored issues
show
Documentation introduced by
null is of type null, but the function expects a boolean.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
66
            if ($openParenthesis === false) {
67
                return;
68
            }
69
70
            $comma = $phpcsFile->findNext(T_COMMA, $openParenthesis, $tokens[$openParenthesis]['parenthesis_closer']);
71
72
            if ($comma === false) {
73
                return;
74
            }
75
76
            $array = $phpcsFile->findNext(array(T_ARRAY, T_OPEN_SHORT_ARRAY), $comma, $tokens[$openParenthesis]['parenthesis_closer']);
77
78
            if ($array !== false) {
79
                if ($this->supportsAbove('7.0')) {
80
                    return;
81
                } else {
82
                    $phpcsFile->addError('Constant arrays using define are not allowed in PHP 5.6 or earlier', $array);
83
                }
84
            }
85
        }
86
    }
87
}
88