Completed
Pull Request — master (#19)
by
unknown
02:31
created

File::addFixableError()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 9
ccs 2
cts 2
cp 1
rs 9.6666
c 0
b 0
f 0
cc 1
eloc 8
nc 1
nop 5
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BestIt\CodeSniffer;
6
7
use PHP_CodeSniffer_File;
8
9
/**
10
 * Class File
11
 *
12
 * Wrapper Class for PHP_CodeSniffer_File to provide a consistent way to replace int|bool returns
13
 * with int returns (false => -1)
14
 * Additionally there could be some architecture changes in the future, like Token-Objects and so on.
15
 *
16
 * @package BestIt\CodeSniffer
17
 * @author Nick Lubisch <[email protected]>
18
 */
19
class File
20
{
21
    /**
22
     * The CodeSniffer file
23
     *
24
     * @var PHP_CodeSniffer_File
25
     */
26
    private $baseFile;
27
28
    /**
29
     * Wrapped PHP_CodeSniffer_Fixer
30
     *
31
     * @var Fixer
32
     */
33
    private $fixer;
34
35
    /**
36
     * Contains the advanced token stack
37
     *
38
     * @var array
39
     */
40
    private $tokens;
41
42
    /**
43
     * File constructor.
44
     *
45
     * @param PHP_CodeSniffer_File $baseFile CodeSniffer file
46
     */
47 121
    public function __construct(PHP_CodeSniffer_File $baseFile)
48
    {
49 121
        $this->baseFile = $baseFile;
50 121
        $this->fixer = new Fixer($this, $this->baseFile->fixer);
51 121
        $this->tokens = $this->getAdvancedTokens();
52 121
    }
53
54
    /**
55
     * Adds the pointer to all token data arrays.
56
     *
57
     * @return array Advanced token stack.
58
     */
59 121
    private function getAdvancedTokens(): array
60
    {
61 121
        $tokens = [];
62
63 121
        foreach ($this->baseFile->getTokens() as $tokenPtr => $token) {
64 121
            $token['pointer'] = $tokenPtr;
65 121
            $tokens[$tokenPtr] = $token;
66
        }
67
68 121
        return $tokens;
69
    }
70
71
    /**
72
     * Records a fixable error against a specific token in the file.
73
     *
74
     * @param string $error The error message.
75
     * @param int $stackPtr The stack position where the error occurred.
76
     * @param string $code A violation code unique to the sniff message.
77
     * @param array $data Replacements for the error message.
78
     * @param int $severity The severity level for this error.
79
     *                      A value of 0 will be converted into the default severity level.
80
     *
81
     * @return bool Returns true if the error was recorded and should be fixed.
82
     */
83 68
    public function addFixableError(
84
        string $error,
85
        int $stackPtr,
86
        string $code = '',
87
        array $data = [],
88
        int $severity = 0
89
    ): bool {
90 68
         return $this->baseFile->addFixableError($error, $stackPtr, $code, $data, $severity);
91
    }
92
93
    /**
94
     * Returns the token stack for this file.
95
     *
96
     * @return array Return array of token data
97
     */
98 121
    public function getTokens(): array
99
    {
100 121
        return $this->tokens;
101
    }
102
103
    /**
104
     * Returns the position of the previous specified token(s).
105
     *
106
     * If a value is specified, the previous token of the specified type(s)
107
     * containing the specified value will be returned.
108
     *
109
     * Returns false if no token can be found.
110
     *
111
     * @param array $types The type(s) of tokens to search for.
112
     * @param int $start The position to start searching from in the token stack.
113
     * @param int $end The end position to fail if no token is found.
114
     *        if not specified or null, end will default to the start of the token stack.
115
     * @param bool $exclude If true, find the previous token that are NOT of the types specified in $types.
116
     * @param string $value The value that the token(s) must be equal to.
117
     *        If value is omitted, tokens with any value will be returned.
118
     * @param bool $local If true, tokens outside the current statement will not be checked.
119
     *        IE. checking will stop at the previous semi-colon found.
120
     *
121
     * @return int Pointer to the found token
122
     *
123
     * @SuppressWarnings(PHPMD.BooleanArgumentFlag)
124
     */
125 121
    public function findPrevious(
126
        array $types,
127
        int $start,
128
        ?int $end = null,
129
        bool $exclude = false,
130
        ?string $value = null,
131
        bool $local = false
132
    ): int {
133 121
        return $this->baseFile->findPrevious($types, $start, $end, $exclude, $value, $local);
134
    }
135
136
    /**
137
     * Records an error against a specific token in the file.
138
     *
139
     * @param string $error The error message.
140
     * @param int $stackPtr The stack position where the error occurred.
141
     * @param string $code A violation code unique to the sniff message.
142
     * @param array $data Replacements for the error message.
143
     * @param int $severity The severity level for this error. A value of 0
144
     *                      will be converted into the default severity level.
145
     * @param bool $fixable Can the error be fixed by the sniff?
146
     *
147
     * @return bool Returns true if setting the error was done or false
148
     *
149
     * @SuppressWarnings(PHPMD.BooleanArgumentFlag)
150
     */
151 64
    public function addError(
152
        string $error,
153
        int $stackPtr,
154
        string $code = '',
155
        array $data = [],
156
        int $severity = 0,
157
        bool $fixable = false
158
    ): bool {
159 64
        return $this->baseFile->addError($error, $stackPtr, $code, $data, $severity, $fixable);
160
    }
161
162
    /**
163
     * Records an error against a specific line in the file.
164
     *
165
     * @param string $error The error message.
166
     * @param int $line The line on which the error occurred.
167
     * @param string $code A violation code unique to the sniff message.
168
     * @param array $data Replacements for the error message.
169
     * @param int $severity The severity level for this error. A value of 0
170
     *                      will be converted into the default severity level.
171
     *
172
     * @return bool Returns true of the error got recorded
173
     */
174 12
    public function addErrorOnLine(
175
        string $error,
176
        int $line,
177
        string $code = '',
178
        array $data = [],
179
        int $severity = 0
180
    ): bool {
181 12
        return $this->baseFile->addErrorOnLine($error, $line, $code, $data, $severity);
182
    }
183
184
    /**
185
     * Returns the position of the next specified token(s).
186
     *
187
     * If a value is specified, the next token of the specified type(s)
188
     * containing the specified value will be returned.
189
     *
190
     * Returns false if no token can be found.
191
     *
192
     * @param array $types The type(s) of tokens to search for.
193
     * @param int $start The position to start searching from in the
194
     *                   token stack.
195
     * @param int $end The end position to fail if no token is found. if not specified or null, end will default to
196
     *                 the end of the token stack.
197
     * @param bool $exclude If true, find the next token that is NOT of a type specified in $types.
198
     * @param string $value The value that the token(s) must be equal to.
199
     *                      If value is omitted, tokens with any value will be returned.
200
     * @param bool $local If true, tokens outside the current statement will not be checked. i.e., checking will stop
201
     *                    at the next semi-colon found.
202
     *
203
     * @return int Returns the pointer of the token or -1
204
     *
205
     * @SuppressWarnings(PHPMD.BooleanArgumentFlag)
206
     */
207 113
    public function findNext(
208
        array $types,
209
        int $start,
210
        ?int $end = null,
211
        bool $exclude = false,
212
        ?string $value = null,
213
        bool $local = false
214
    ): int {
215 113
        $result = $this->baseFile->findNext($types, $start, $end, $exclude, $value, $local);
216
217 113
        return $this->preparePointer($result);
218
    }
219
220
    /**
221
     * Prepares given pointer result.
222
     *
223
     * @param int|bool $pointer Pointer of a token
224
     *
225
     * @return int Pointer or -1 when not found
226
     */
227 113
    public function preparePointer($pointer): int
228
    {
229 113
        return $pointer !== false ? $pointer : -1;
230
    }
231
232
    /**
233
     * Returns the Wrapped PHP_CodeSniffer_Fixer
234
     *
235
     * @return Fixer Returns the wrapped PHP_CodeSniffer_Fixer
236
     */
237 33
    public function getFixer(): Fixer
238
    {
239 33
        return $this->fixer;
240
    }
241
242
    /**
243
     * Returns the eol char of the file
244
     *
245
     * @return string Returns the EndOfLine-Character of the processed file
246
     */
247 87
    public function getEolChar(): string
248
    {
249 87
        return $this->baseFile->eolChar;
250
    }
251
}
252