Completed
Pull Request — master (#21)
by
unknown
07:03
created

File::addError()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 10
ccs 2
cts 2
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 9
nc 1
nop 6
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 123
    public function __construct(PHP_CodeSniffer_File $baseFile)
48
    {
49 123
        $this->baseFile = $baseFile;
50 123
        $this->fixer = new Fixer($this, $this->baseFile->fixer);
51 123
        $this->tokens = $this->getAdvancedTokens();
52 123
    }
53
54
    /**
55
     * Adds the pointer to all token data arrays.
56
     *
57
     * @return array Advanced token stack.
58
     */
59 123
    private function getAdvancedTokens(): array
60
    {
61 123
        $tokens = [];
62
63 123
        foreach ($this->baseFile->getTokens() as $tokenPtr => $token) {
64 123
            $token['pointer'] = $tokenPtr;
65 123
            $tokens[$tokenPtr] = $token;
66
        }
67
68 123
        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 69
    public function addFixableError(
84
        string $error,
85
        int $stackPtr,
86
        string $code = '',
87
        array $data = [],
88
        int $severity = 0
89
    ): bool {
90 69
         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 123
    public function getTokens(): array
99
    {
100 123
        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 -1 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 123
    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 123
        $pointer = $this->baseFile->findPrevious($types, $start, $end, $exclude, $value, $local);
134
135 123
        return $this->preparePointer($pointer);
136
    }
137
138
    /**
139
     * Records an error against a specific token in the file.
140
     *
141
     * @param string $error The error message.
142
     * @param int $stackPtr The stack position where the error occurred.
143
     * @param string $code A violation code unique to the sniff message.
144
     * @param array $data Replacements for the error message.
145
     * @param int $severity The severity level for this error. A value of 0
146
     *                      will be converted into the default severity level.
147
     * @param bool $fixable Can the error be fixed by the sniff?
148
     *
149
     * @return bool Returns true if setting the error was done or false
150
     *
151
     * @SuppressWarnings(PHPMD.BooleanArgumentFlag)
152
     */
153 65
    public function addError(
154
        string $error,
155
        int $stackPtr,
156
        string $code = '',
157
        array $data = [],
158
        int $severity = 0,
159
        bool $fixable = false
160
    ): bool {
161 65
        return $this->baseFile->addError($error, $stackPtr, $code, $data, $severity, $fixable);
162
    }
163
164
    /**
165
     * Records a warning against a specific token in the file.
166
     *
167
     * @param string $warning The warning message.
168
     * @param int $stackPtr The stack position where the warning occurred.
169
     * @param string $code A violation code unique to the sniff message.
170
     * @param array $data Replacements for the warning message.
171
     * @param int $severity The severity level for this warning. A value of 0
172
     *                      will be converted into the default severity level.
173
     * @param bool $fixable Can the warning be fixed by the sniff?
174
     *
175
     * @return bool Returns true if setting the warning was done or false
176
     *
177
     * @SuppressWarnings(PHPMD.BooleanArgumentFlag)
178
     */
179 2
    public function addWarning(
180
        string $warning,
181
        int $stackPtr,
182
        string $code = '',
183
        array $data = [],
184
        int $severity = 0,
185
        bool $fixable = false
186
    ): bool {
187 2
        return $this->baseFile->addWarning($warning, $stackPtr, $code, $data, $severity, $fixable);
188
    }
189
190
    /**
191
     * Records an error against a specific line in the file.
192
     *
193
     * @param string $error The error message.
194
     * @param int $line The line on which the error occurred.
195
     * @param string $code A violation code unique to the sniff message.
196
     * @param array $data Replacements for the error message.
197
     * @param int $severity The severity level for this error. A value of 0
198
     *                      will be converted into the default severity level.
199
     *
200
     * @return bool Returns true of the error got recorded
201
     */
202 12
    public function addErrorOnLine(
203
        string $error,
204
        int $line,
205
        string $code = '',
206
        array $data = [],
207
        int $severity = 0
208
    ): bool {
209 12
        return $this->baseFile->addErrorOnLine($error, $line, $code, $data, $severity);
210
    }
211
212
    /**
213
     * Returns the position of the next specified token(s).
214
     *
215
     * If a value is specified, the next token of the specified type(s)
216
     * containing the specified value will be returned.
217
     *
218
     * Returns false if no token can be found.
219
     *
220
     * @param array $types The type(s) of tokens to search for.
221
     * @param int $start The position to start searching from in the
222
     *                   token stack.
223
     * @param int $end The end position to fail if no token is found. if not specified or null, end will default to
224
     *                 the end of the token stack.
225
     * @param bool $exclude If true, find the next token that is NOT of a type specified in $types.
226
     * @param string $value The value that the token(s) must be equal to.
227
     *                      If value is omitted, tokens with any value will be returned.
228
     * @param bool $local If true, tokens outside the current statement will not be checked. i.e., checking will stop
229
     *                    at the next semi-colon found.
230
     *
231
     * @return int Returns the pointer of the token or -1
232
     *
233
     * @SuppressWarnings(PHPMD.BooleanArgumentFlag)
234
     */
235 115
    public function findNext(
236
        array $types,
237
        int $start,
238
        ?int $end = null,
239
        bool $exclude = false,
240
        ?string $value = null,
241
        bool $local = false
242
    ): int {
243 115
        $result = $this->baseFile->findNext($types, $start, $end, $exclude, $value, $local);
244
245 115
        return $this->preparePointer($result);
246
    }
247
248
    /**
249
     * Prepares given pointer result.
250
     *
251
     * @param int|bool $pointer Pointer of a token
252
     *
253
     * @return int Pointer or -1 when not found
254
     */
255 123
    public function preparePointer($pointer): int
256
    {
257 123
        return $pointer !== false ? $pointer : -1;
258
    }
259
260
    /**
261
     * Returns the Wrapped PHP_CodeSniffer_Fixer
262
     *
263
     * @return Fixer Returns the wrapped PHP_CodeSniffer_Fixer
264
     */
265 33
    public function getFixer(): Fixer
266
    {
267 33
        return $this->fixer;
268
    }
269
270
    /**
271
     * Returns the eol char of the file
272
     *
273
     * @return string Returns the EndOfLine-Character of the processed file
274
     */
275 88
    public function getEolChar(): string
276
    {
277 88
        return $this->baseFile->eolChar;
278
    }
279
}
280