Completed
Push — master ( 14c836...906b18 )
by Björn
06:09 queued 03:52
created

ForbiddenFunctionsSniff   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 92
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
dl 0
loc 92
rs 10
c 0
b 0
f 0
wmc 5
lcom 1
cbo 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BestIt\Sniffs\Functions;
6
7
use BestIt\Sniffs\SuppressingTrait;
8
use PHP_CodeSniffer\Files\File;
9
use PHP_CodeSniffer\Standards\Generic\Sniffs\PHP\ForbiddenFunctionsSniff as BaseSniff;
10
11
/**
12
 * You SHOULD not use eval, die, sizeof, delete ...
13
 *
14
 * @author blange <[email protected]>
15
 * @package BestIt\Sniffs\Functions
16
 */
17
class ForbiddenFunctionsSniff extends BaseSniff
18
{
19
    use SuppressingTrait;
20
21
    /**
22
     * You SHOULD not use eval.
23
     */
24
    public const CODE_DISCOURAGED_WITHOUT_ALTERNATIVE = 'Discouraged';
25
26
    /**
27
     * You SHOULD not use alias but the original function names.
28
     */
29
    public const CODE_DISCOURAGED_WITH_ALTERNATIVE = 'DiscouragedWithAlternative';
30
31
    /**
32
     * If true, an error will be thrown; otherwise a warning.
33
     *
34
     * @var boolean
35
     */
36
    public $error = false;
37
38
    /**
39
     * The used file.
40
     *
41
     * @var File|void
42
     */
43
    protected $file;
44
45
    /**
46
     * A list of forbidden functions with their alternatives.
47
     *
48
     * The value is NULL if no alternative exists. IE, the function should just not be used.
49
     *
50
     * @var array<string, string|null>
51
     */
52
    public $forbiddenFunctions = [
53
        'eval' => null,
54
        'die' => 'exit',
55
        'sizeof' => 'count',
56
        'delete' => 'unset',
57
    ];
58
59
    /**
60
     * Position of the listened token.
61
     *
62
     * @var int|void
63
     */
64
    protected ?int $stackPos = null;
0 ignored issues
show
Bug introduced by
This code did not parse for me. Apparently, there is an error somewhere around this line:

Syntax error, unexpected '?', expecting T_FUNCTION or T_CONST
Loading history...
65
66
    /**
67
     * Type-safe getter for the file.
68
     *
69
     * @return File
70
     */
71
    protected function getFile(): File
72
    {
73
        return $this->file;
74
    }
75
76
    /**
77
     * Type-safe getter for the stack position.
78
     *
79
     * @return int
80
     */
81
    protected function getStackPos(): int
82
    {
83
        return $this->stackPos;
84
    }
85
86
    /**
87
     * Processes this test, when one of its tokens is encountered.
88
     *
89
     * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingParameterTypeHint
90
     *
91
     * @param File $file The file being scanned.
92
     * @param int $stackPtr The position of the current token in the stack passed in $tokens.
93
     *
94
     * @return void
95
     */
96
    public function process(File $file, $stackPtr): void
97
    {
98
        $this->file = $file;
99
        $this->stackPos = $stackPtr;
100
101
        if (
102
            !$this->isSniffSuppressed(static::CODE_DISCOURAGED_WITHOUT_ALTERNATIVE) &&
103
            !$this->isSniffSuppressed(static::CODE_DISCOURAGED_WITH_ALTERNATIVE)
104
        ) {
105
            parent::process($file, $stackPtr);
106
        }
107
    }
108
}
109