Chris@17
|
1 <?php
|
Chris@17
|
2 /**
|
Chris@17
|
3 * Stores weightings and groupings of tokens.
|
Chris@17
|
4 *
|
Chris@17
|
5 * @author Greg Sherwood <gsherwood@squiz.net>
|
Chris@17
|
6 * @copyright 2006-2015 Squiz Pty Ltd (ABN 77 084 670 600)
|
Chris@17
|
7 * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence
|
Chris@17
|
8 */
|
Chris@17
|
9
|
Chris@17
|
10 namespace PHP_CodeSniffer\Util;
|
Chris@17
|
11
|
Chris@17
|
12 define('T_NONE', 'PHPCS_T_NONE');
|
Chris@17
|
13 define('T_OPEN_CURLY_BRACKET', 'PHPCS_T_OPEN_CURLY_BRACKET');
|
Chris@17
|
14 define('T_CLOSE_CURLY_BRACKET', 'PHPCS_T_CLOSE_CURLY_BRACKET');
|
Chris@17
|
15 define('T_OPEN_SQUARE_BRACKET', 'PHPCS_T_OPEN_SQUARE_BRACKET');
|
Chris@17
|
16 define('T_CLOSE_SQUARE_BRACKET', 'PHPCS_T_CLOSE_SQUARE_BRACKET');
|
Chris@17
|
17 define('T_OPEN_PARENTHESIS', 'PHPCS_T_OPEN_PARENTHESIS');
|
Chris@17
|
18 define('T_CLOSE_PARENTHESIS', 'PHPCS_T_CLOSE_PARENTHESIS');
|
Chris@17
|
19 define('T_COLON', 'PHPCS_T_COLON');
|
Chris@17
|
20 define('T_NULLABLE', 'PHPCS_T_NULLABLE');
|
Chris@17
|
21 define('T_STRING_CONCAT', 'PHPCS_T_STRING_CONCAT');
|
Chris@17
|
22 define('T_INLINE_THEN', 'PHPCS_T_INLINE_THEN');
|
Chris@17
|
23 define('T_INLINE_ELSE', 'PHPCS_T_INLINE_ELSE');
|
Chris@17
|
24 define('T_NULL', 'PHPCS_T_NULL');
|
Chris@17
|
25 define('T_FALSE', 'PHPCS_T_FALSE');
|
Chris@17
|
26 define('T_TRUE', 'PHPCS_T_TRUE');
|
Chris@17
|
27 define('T_SEMICOLON', 'PHPCS_T_SEMICOLON');
|
Chris@17
|
28 define('T_EQUAL', 'PHPCS_T_EQUAL');
|
Chris@17
|
29 define('T_MULTIPLY', 'PHPCS_T_MULTIPLY');
|
Chris@17
|
30 define('T_DIVIDE', 'PHPCS_T_DIVIDE');
|
Chris@17
|
31 define('T_PLUS', 'PHPCS_T_PLUS');
|
Chris@17
|
32 define('T_MINUS', 'PHPCS_T_MINUS');
|
Chris@17
|
33 define('T_MODULUS', 'PHPCS_T_MODULUS');
|
Chris@17
|
34 define('T_BITWISE_AND', 'PHPCS_T_BITWISE_AND');
|
Chris@17
|
35 define('T_BITWISE_OR', 'PHPCS_T_BITWISE_OR');
|
Chris@17
|
36 define('T_BITWISE_XOR', 'PHPCS_T_BITWISE_XOR');
|
Chris@17
|
37 define('T_BITWISE_NOT', 'PHPCS_T_BITWISE_NOT');
|
Chris@17
|
38 define('T_ARRAY_HINT', 'PHPCS_T_ARRAY_HINT');
|
Chris@17
|
39 define('T_GREATER_THAN', 'PHPCS_T_GREATER_THAN');
|
Chris@17
|
40 define('T_LESS_THAN', 'PHPCS_T_LESS_THAN');
|
Chris@17
|
41 define('T_BOOLEAN_NOT', 'PHPCS_T_BOOLEAN_NOT');
|
Chris@17
|
42 define('T_SELF', 'PHPCS_T_SELF');
|
Chris@17
|
43 define('T_PARENT', 'PHPCS_T_PARENT');
|
Chris@17
|
44 define('T_DOUBLE_QUOTED_STRING', 'PHPCS_T_DOUBLE_QUOTED_STRING');
|
Chris@17
|
45 define('T_COMMA', 'PHPCS_T_COMMA');
|
Chris@17
|
46 define('T_HEREDOC', 'PHPCS_T_HEREDOC');
|
Chris@17
|
47 define('T_PROTOTYPE', 'PHPCS_T_PROTOTYPE');
|
Chris@17
|
48 define('T_THIS', 'PHPCS_T_THIS');
|
Chris@17
|
49 define('T_REGULAR_EXPRESSION', 'PHPCS_T_REGULAR_EXPRESSION');
|
Chris@17
|
50 define('T_PROPERTY', 'PHPCS_T_PROPERTY');
|
Chris@17
|
51 define('T_LABEL', 'PHPCS_T_LABEL');
|
Chris@17
|
52 define('T_OBJECT', 'PHPCS_T_OBJECT');
|
Chris@17
|
53 define('T_CLOSE_OBJECT', 'PHPCS_T_CLOSE_OBJECT');
|
Chris@17
|
54 define('T_COLOUR', 'PHPCS_T_COLOUR');
|
Chris@17
|
55 define('T_HASH', 'PHPCS_T_HASH');
|
Chris@17
|
56 define('T_URL', 'PHPCS_T_URL');
|
Chris@17
|
57 define('T_STYLE', 'PHPCS_T_STYLE');
|
Chris@17
|
58 define('T_ASPERAND', 'PHPCS_T_ASPERAND');
|
Chris@17
|
59 define('T_DOLLAR', 'PHPCS_T_DOLLAR');
|
Chris@17
|
60 define('T_TYPEOF', 'PHPCS_T_TYPEOF');
|
Chris@17
|
61 define('T_CLOSURE', 'PHPCS_T_CLOSURE');
|
Chris@17
|
62 define('T_ANON_CLASS', 'PHPCS_T_ANON_CLASS');
|
Chris@17
|
63 define('T_BACKTICK', 'PHPCS_T_BACKTICK');
|
Chris@17
|
64 define('T_START_NOWDOC', 'PHPCS_T_START_NOWDOC');
|
Chris@17
|
65 define('T_NOWDOC', 'PHPCS_T_NOWDOC');
|
Chris@17
|
66 define('T_END_NOWDOC', 'PHPCS_T_END_NOWDOC');
|
Chris@17
|
67 define('T_OPEN_SHORT_ARRAY', 'PHPCS_T_OPEN_SHORT_ARRAY');
|
Chris@17
|
68 define('T_CLOSE_SHORT_ARRAY', 'PHPCS_T_CLOSE_SHORT_ARRAY');
|
Chris@17
|
69 define('T_GOTO_LABEL', 'PHPCS_T_GOTO_LABEL');
|
Chris@17
|
70 define('T_BINARY_CAST', 'PHPCS_T_BINARY_CAST');
|
Chris@17
|
71 define('T_EMBEDDED_PHP', 'PHPCS_T_EMBEDDED_PHP');
|
Chris@17
|
72 define('T_RETURN_TYPE', 'PHPCS_T_RETURN_TYPE');
|
Chris@17
|
73 define('T_OPEN_USE_GROUP', 'PHPCS_T_OPEN_USE_GROUP');
|
Chris@17
|
74 define('T_CLOSE_USE_GROUP', 'PHPCS_T_CLOSE_USE_GROUP');
|
Chris@17
|
75 define('T_ZSR', 'PHPCS_T_ZSR');
|
Chris@17
|
76 define('T_ZSR_EQUAL', 'PHPCS_T_ZSR_EQUAL');
|
Chris@17
|
77
|
Chris@17
|
78 // Some PHP 5.5 tokens, replicated for lower versions.
|
Chris@17
|
79 if (defined('T_FINALLY') === false) {
|
Chris@17
|
80 define('T_FINALLY', 'PHPCS_T_FINALLY');
|
Chris@17
|
81 }
|
Chris@17
|
82
|
Chris@17
|
83 if (defined('T_YIELD') === false) {
|
Chris@17
|
84 define('T_YIELD', 'PHPCS_T_YIELD');
|
Chris@17
|
85 }
|
Chris@17
|
86
|
Chris@17
|
87 // Some PHP 5.6 tokens, replicated for lower versions.
|
Chris@17
|
88 if (defined('T_ELLIPSIS') === false) {
|
Chris@17
|
89 define('T_ELLIPSIS', 'PHPCS_T_ELLIPSIS');
|
Chris@17
|
90 }
|
Chris@17
|
91
|
Chris@17
|
92 if (defined('T_POW') === false) {
|
Chris@17
|
93 define('T_POW', 'PHPCS_T_POW');
|
Chris@17
|
94 }
|
Chris@17
|
95
|
Chris@17
|
96 if (defined('T_POW_EQUAL') === false) {
|
Chris@17
|
97 define('T_POW_EQUAL', 'PHPCS_T_POW_EQUAL');
|
Chris@17
|
98 }
|
Chris@17
|
99
|
Chris@17
|
100 // Some PHP 7 tokens, replicated for lower versions.
|
Chris@17
|
101 if (defined('T_SPACESHIP') === false) {
|
Chris@17
|
102 define('T_SPACESHIP', 'PHPCS_T_SPACESHIP');
|
Chris@17
|
103 }
|
Chris@17
|
104
|
Chris@17
|
105 if (defined('T_COALESCE') === false) {
|
Chris@17
|
106 define('T_COALESCE', 'PHPCS_T_COALESCE');
|
Chris@17
|
107 }
|
Chris@17
|
108
|
Chris@17
|
109 if (defined('T_COALESCE_EQUAL') === false) {
|
Chris@17
|
110 define('T_COALESCE_EQUAL', 'PHPCS_T_COALESCE_EQUAL');
|
Chris@17
|
111 }
|
Chris@17
|
112
|
Chris@17
|
113 if (defined('T_YIELD_FROM') === false) {
|
Chris@17
|
114 define('T_YIELD_FROM', 'PHPCS_T_YIELD_FROM');
|
Chris@17
|
115 }
|
Chris@17
|
116
|
Chris@17
|
117 // Tokens used for parsing doc blocks.
|
Chris@17
|
118 define('T_DOC_COMMENT_STAR', 'PHPCS_T_DOC_COMMENT_STAR');
|
Chris@17
|
119 define('T_DOC_COMMENT_WHITESPACE', 'PHPCS_T_DOC_COMMENT_WHITESPACE');
|
Chris@17
|
120 define('T_DOC_COMMENT_TAG', 'PHPCS_T_DOC_COMMENT_TAG');
|
Chris@17
|
121 define('T_DOC_COMMENT_OPEN_TAG', 'PHPCS_T_DOC_COMMENT_OPEN_TAG');
|
Chris@17
|
122 define('T_DOC_COMMENT_CLOSE_TAG', 'PHPCS_T_DOC_COMMENT_CLOSE_TAG');
|
Chris@17
|
123 define('T_DOC_COMMENT_STRING', 'PHPCS_T_DOC_COMMENT_STRING');
|
Chris@17
|
124
|
Chris@17
|
125 // Tokens used for PHPCS instruction comments.
|
Chris@17
|
126 define('T_PHPCS_ENABLE', 'PHPCS_T_PHPCS_ENABLE');
|
Chris@17
|
127 define('T_PHPCS_DISABLE', 'PHPCS_T_PHPCS_DISABLE');
|
Chris@17
|
128 define('T_PHPCS_SET', 'PHPCS_T_PHPCS_SET');
|
Chris@17
|
129 define('T_PHPCS_IGNORE', 'PHPCS_T_PHPCS_IGNORE');
|
Chris@17
|
130 define('T_PHPCS_IGNORE_FILE', 'PHPCS_T_PHPCS_IGNORE_FILE');
|
Chris@17
|
131
|
Chris@17
|
132 final class Tokens
|
Chris@17
|
133 {
|
Chris@17
|
134
|
Chris@17
|
135 /**
|
Chris@17
|
136 * The token weightings.
|
Chris@17
|
137 *
|
Chris@17
|
138 * @var array<int, int>
|
Chris@17
|
139 */
|
Chris@17
|
140 public static $weightings = [
|
Chris@17
|
141 T_CLASS => 1000,
|
Chris@17
|
142 T_INTERFACE => 1000,
|
Chris@17
|
143 T_TRAIT => 1000,
|
Chris@17
|
144 T_NAMESPACE => 1000,
|
Chris@17
|
145 T_FUNCTION => 100,
|
Chris@17
|
146 T_CLOSURE => 100,
|
Chris@17
|
147
|
Chris@17
|
148 /*
|
Chris@17
|
149 * Conditions.
|
Chris@17
|
150 */
|
Chris@17
|
151
|
Chris@17
|
152 T_WHILE => 50,
|
Chris@17
|
153 T_FOR => 50,
|
Chris@17
|
154 T_FOREACH => 50,
|
Chris@17
|
155 T_IF => 50,
|
Chris@17
|
156 T_ELSE => 50,
|
Chris@17
|
157 T_ELSEIF => 50,
|
Chris@17
|
158 T_DO => 50,
|
Chris@17
|
159 T_TRY => 50,
|
Chris@17
|
160 T_CATCH => 50,
|
Chris@17
|
161 T_FINALLY => 50,
|
Chris@17
|
162 T_SWITCH => 50,
|
Chris@17
|
163
|
Chris@17
|
164 T_SELF => 25,
|
Chris@17
|
165 T_PARENT => 25,
|
Chris@17
|
166
|
Chris@17
|
167 /*
|
Chris@17
|
168 * Operators and arithmetic.
|
Chris@17
|
169 */
|
Chris@17
|
170
|
Chris@17
|
171 T_BITWISE_AND => 8,
|
Chris@17
|
172 T_BITWISE_OR => 8,
|
Chris@17
|
173 T_BITWISE_XOR => 8,
|
Chris@17
|
174
|
Chris@17
|
175 T_MULTIPLY => 5,
|
Chris@17
|
176 T_DIVIDE => 5,
|
Chris@17
|
177 T_PLUS => 5,
|
Chris@17
|
178 T_MINUS => 5,
|
Chris@17
|
179 T_MODULUS => 5,
|
Chris@17
|
180 T_POW => 5,
|
Chris@17
|
181 T_SPACESHIP => 5,
|
Chris@17
|
182 T_COALESCE => 5,
|
Chris@17
|
183 T_COALESCE_EQUAL => 5,
|
Chris@17
|
184
|
Chris@17
|
185 T_SL => 5,
|
Chris@17
|
186 T_SR => 5,
|
Chris@17
|
187 T_SL_EQUAL => 5,
|
Chris@17
|
188 T_SR_EQUAL => 5,
|
Chris@17
|
189
|
Chris@17
|
190 T_EQUAL => 5,
|
Chris@17
|
191 T_AND_EQUAL => 5,
|
Chris@17
|
192 T_CONCAT_EQUAL => 5,
|
Chris@17
|
193 T_DIV_EQUAL => 5,
|
Chris@17
|
194 T_MINUS_EQUAL => 5,
|
Chris@17
|
195 T_MOD_EQUAL => 5,
|
Chris@17
|
196 T_MUL_EQUAL => 5,
|
Chris@17
|
197 T_OR_EQUAL => 5,
|
Chris@17
|
198 T_PLUS_EQUAL => 5,
|
Chris@17
|
199 T_XOR_EQUAL => 5,
|
Chris@17
|
200
|
Chris@17
|
201 T_BOOLEAN_AND => 5,
|
Chris@17
|
202 T_BOOLEAN_OR => 5,
|
Chris@17
|
203
|
Chris@17
|
204 /*
|
Chris@17
|
205 * Equality.
|
Chris@17
|
206 */
|
Chris@17
|
207
|
Chris@17
|
208 T_IS_EQUAL => 5,
|
Chris@17
|
209 T_IS_NOT_EQUAL => 5,
|
Chris@17
|
210 T_IS_IDENTICAL => 5,
|
Chris@17
|
211 T_IS_NOT_IDENTICAL => 5,
|
Chris@17
|
212 T_IS_SMALLER_OR_EQUAL => 5,
|
Chris@17
|
213 T_IS_GREATER_OR_EQUAL => 5,
|
Chris@17
|
214 ];
|
Chris@17
|
215
|
Chris@17
|
216 /**
|
Chris@17
|
217 * Tokens that represent assignments.
|
Chris@17
|
218 *
|
Chris@17
|
219 * @var array<int, int>
|
Chris@17
|
220 */
|
Chris@17
|
221 public static $assignmentTokens = [
|
Chris@17
|
222 T_EQUAL => T_EQUAL,
|
Chris@17
|
223 T_AND_EQUAL => T_AND_EQUAL,
|
Chris@17
|
224 T_OR_EQUAL => T_OR_EQUAL,
|
Chris@17
|
225 T_CONCAT_EQUAL => T_CONCAT_EQUAL,
|
Chris@17
|
226 T_DIV_EQUAL => T_DIV_EQUAL,
|
Chris@17
|
227 T_MINUS_EQUAL => T_MINUS_EQUAL,
|
Chris@17
|
228 T_POW_EQUAL => T_POW_EQUAL,
|
Chris@17
|
229 T_MOD_EQUAL => T_MOD_EQUAL,
|
Chris@17
|
230 T_MUL_EQUAL => T_MUL_EQUAL,
|
Chris@17
|
231 T_PLUS_EQUAL => T_PLUS_EQUAL,
|
Chris@17
|
232 T_XOR_EQUAL => T_XOR_EQUAL,
|
Chris@17
|
233 T_DOUBLE_ARROW => T_DOUBLE_ARROW,
|
Chris@17
|
234 T_SL_EQUAL => T_SL_EQUAL,
|
Chris@17
|
235 T_SR_EQUAL => T_SR_EQUAL,
|
Chris@17
|
236 T_COALESCE_EQUAL => T_COALESCE_EQUAL,
|
Chris@17
|
237 T_ZSR_EQUAL => T_ZSR_EQUAL,
|
Chris@17
|
238 ];
|
Chris@17
|
239
|
Chris@17
|
240 /**
|
Chris@17
|
241 * Tokens that represent equality comparisons.
|
Chris@17
|
242 *
|
Chris@17
|
243 * @var array<int, int>
|
Chris@17
|
244 */
|
Chris@17
|
245 public static $equalityTokens = [
|
Chris@17
|
246 T_IS_EQUAL => T_IS_EQUAL,
|
Chris@17
|
247 T_IS_NOT_EQUAL => T_IS_NOT_EQUAL,
|
Chris@17
|
248 T_IS_IDENTICAL => T_IS_IDENTICAL,
|
Chris@17
|
249 T_IS_NOT_IDENTICAL => T_IS_NOT_IDENTICAL,
|
Chris@17
|
250 T_IS_SMALLER_OR_EQUAL => T_IS_SMALLER_OR_EQUAL,
|
Chris@17
|
251 T_IS_GREATER_OR_EQUAL => T_IS_GREATER_OR_EQUAL,
|
Chris@17
|
252 ];
|
Chris@17
|
253
|
Chris@17
|
254 /**
|
Chris@17
|
255 * Tokens that represent comparison operator.
|
Chris@17
|
256 *
|
Chris@17
|
257 * @var array<int, int>
|
Chris@17
|
258 */
|
Chris@17
|
259 public static $comparisonTokens = [
|
Chris@17
|
260 T_IS_EQUAL => T_IS_EQUAL,
|
Chris@17
|
261 T_IS_IDENTICAL => T_IS_IDENTICAL,
|
Chris@17
|
262 T_IS_NOT_EQUAL => T_IS_NOT_EQUAL,
|
Chris@17
|
263 T_IS_NOT_IDENTICAL => T_IS_NOT_IDENTICAL,
|
Chris@17
|
264 T_LESS_THAN => T_LESS_THAN,
|
Chris@17
|
265 T_GREATER_THAN => T_GREATER_THAN,
|
Chris@17
|
266 T_IS_SMALLER_OR_EQUAL => T_IS_SMALLER_OR_EQUAL,
|
Chris@17
|
267 T_IS_GREATER_OR_EQUAL => T_IS_GREATER_OR_EQUAL,
|
Chris@17
|
268 T_SPACESHIP => T_SPACESHIP,
|
Chris@17
|
269 T_COALESCE => T_COALESCE,
|
Chris@17
|
270 ];
|
Chris@17
|
271
|
Chris@17
|
272 /**
|
Chris@17
|
273 * Tokens that represent arithmetic operators.
|
Chris@17
|
274 *
|
Chris@17
|
275 * @var array<int, int>
|
Chris@17
|
276 */
|
Chris@17
|
277 public static $arithmeticTokens = [
|
Chris@17
|
278 T_PLUS => T_PLUS,
|
Chris@17
|
279 T_MINUS => T_MINUS,
|
Chris@17
|
280 T_MULTIPLY => T_MULTIPLY,
|
Chris@17
|
281 T_DIVIDE => T_DIVIDE,
|
Chris@17
|
282 T_MODULUS => T_MODULUS,
|
Chris@17
|
283 T_POW => T_POW,
|
Chris@17
|
284 ];
|
Chris@17
|
285
|
Chris@17
|
286 /**
|
Chris@17
|
287 * Tokens that perform operations.
|
Chris@17
|
288 *
|
Chris@17
|
289 * @var array<int, int>
|
Chris@17
|
290 */
|
Chris@17
|
291 public static $operators = [
|
Chris@17
|
292 T_MINUS => T_MINUS,
|
Chris@17
|
293 T_PLUS => T_PLUS,
|
Chris@17
|
294 T_MULTIPLY => T_MULTIPLY,
|
Chris@17
|
295 T_DIVIDE => T_DIVIDE,
|
Chris@17
|
296 T_MODULUS => T_MODULUS,
|
Chris@17
|
297 T_POW => T_POW,
|
Chris@17
|
298 T_SPACESHIP => T_SPACESHIP,
|
Chris@17
|
299 T_COALESCE => T_COALESCE,
|
Chris@17
|
300 T_BITWISE_AND => T_BITWISE_AND,
|
Chris@17
|
301 T_BITWISE_OR => T_BITWISE_OR,
|
Chris@17
|
302 T_BITWISE_XOR => T_BITWISE_XOR,
|
Chris@17
|
303 T_SL => T_SL,
|
Chris@17
|
304 T_SR => T_SR,
|
Chris@17
|
305 ];
|
Chris@17
|
306
|
Chris@17
|
307 /**
|
Chris@17
|
308 * Tokens that perform boolean operations.
|
Chris@17
|
309 *
|
Chris@17
|
310 * @var array<int, int>
|
Chris@17
|
311 */
|
Chris@17
|
312 public static $booleanOperators = [
|
Chris@17
|
313 T_BOOLEAN_AND => T_BOOLEAN_AND,
|
Chris@17
|
314 T_BOOLEAN_OR => T_BOOLEAN_OR,
|
Chris@17
|
315 T_LOGICAL_AND => T_LOGICAL_AND,
|
Chris@17
|
316 T_LOGICAL_OR => T_LOGICAL_OR,
|
Chris@17
|
317 T_LOGICAL_XOR => T_LOGICAL_XOR,
|
Chris@17
|
318 ];
|
Chris@17
|
319
|
Chris@17
|
320 /**
|
Chris@17
|
321 * Tokens that represent casting.
|
Chris@17
|
322 *
|
Chris@17
|
323 * @var array<int, int>
|
Chris@17
|
324 */
|
Chris@17
|
325 public static $castTokens = [
|
Chris@17
|
326 T_INT_CAST => T_INT_CAST,
|
Chris@17
|
327 T_STRING_CAST => T_STRING_CAST,
|
Chris@17
|
328 T_DOUBLE_CAST => T_DOUBLE_CAST,
|
Chris@17
|
329 T_ARRAY_CAST => T_ARRAY_CAST,
|
Chris@17
|
330 T_BOOL_CAST => T_BOOL_CAST,
|
Chris@17
|
331 T_OBJECT_CAST => T_OBJECT_CAST,
|
Chris@17
|
332 T_UNSET_CAST => T_UNSET_CAST,
|
Chris@17
|
333 T_BINARY_CAST => T_BINARY_CAST,
|
Chris@17
|
334 ];
|
Chris@17
|
335
|
Chris@17
|
336 /**
|
Chris@17
|
337 * Token types that open parenthesis.
|
Chris@17
|
338 *
|
Chris@17
|
339 * @var array<int, int>
|
Chris@17
|
340 */
|
Chris@17
|
341 public static $parenthesisOpeners = [
|
Chris@17
|
342 T_ARRAY => T_ARRAY,
|
Chris@17
|
343 T_FUNCTION => T_FUNCTION,
|
Chris@17
|
344 T_CLOSURE => T_CLOSURE,
|
Chris@17
|
345 T_WHILE => T_WHILE,
|
Chris@17
|
346 T_FOR => T_FOR,
|
Chris@17
|
347 T_FOREACH => T_FOREACH,
|
Chris@17
|
348 T_SWITCH => T_SWITCH,
|
Chris@17
|
349 T_IF => T_IF,
|
Chris@17
|
350 T_ELSEIF => T_ELSEIF,
|
Chris@17
|
351 T_CATCH => T_CATCH,
|
Chris@17
|
352 T_DECLARE => T_DECLARE,
|
Chris@17
|
353 ];
|
Chris@17
|
354
|
Chris@17
|
355 /**
|
Chris@17
|
356 * Tokens that are allowed to open scopes.
|
Chris@17
|
357 *
|
Chris@17
|
358 * @var array<int, int>
|
Chris@17
|
359 */
|
Chris@17
|
360 public static $scopeOpeners = [
|
Chris@17
|
361 T_CLASS => T_CLASS,
|
Chris@17
|
362 T_ANON_CLASS => T_ANON_CLASS,
|
Chris@17
|
363 T_INTERFACE => T_INTERFACE,
|
Chris@17
|
364 T_TRAIT => T_TRAIT,
|
Chris@17
|
365 T_NAMESPACE => T_NAMESPACE,
|
Chris@17
|
366 T_FUNCTION => T_FUNCTION,
|
Chris@17
|
367 T_CLOSURE => T_CLOSURE,
|
Chris@17
|
368 T_IF => T_IF,
|
Chris@17
|
369 T_SWITCH => T_SWITCH,
|
Chris@17
|
370 T_CASE => T_CASE,
|
Chris@17
|
371 T_DECLARE => T_DECLARE,
|
Chris@17
|
372 T_DEFAULT => T_DEFAULT,
|
Chris@17
|
373 T_WHILE => T_WHILE,
|
Chris@17
|
374 T_ELSE => T_ELSE,
|
Chris@17
|
375 T_ELSEIF => T_ELSEIF,
|
Chris@17
|
376 T_FOR => T_FOR,
|
Chris@17
|
377 T_FOREACH => T_FOREACH,
|
Chris@17
|
378 T_DO => T_DO,
|
Chris@17
|
379 T_TRY => T_TRY,
|
Chris@17
|
380 T_CATCH => T_CATCH,
|
Chris@17
|
381 T_FINALLY => T_FINALLY,
|
Chris@17
|
382 T_PROPERTY => T_PROPERTY,
|
Chris@17
|
383 T_OBJECT => T_OBJECT,
|
Chris@17
|
384 T_USE => T_USE,
|
Chris@17
|
385 ];
|
Chris@17
|
386
|
Chris@17
|
387 /**
|
Chris@17
|
388 * Tokens that represent scope modifiers.
|
Chris@17
|
389 *
|
Chris@17
|
390 * @var array<int, int>
|
Chris@17
|
391 */
|
Chris@17
|
392 public static $scopeModifiers = [
|
Chris@17
|
393 T_PRIVATE => T_PRIVATE,
|
Chris@17
|
394 T_PUBLIC => T_PUBLIC,
|
Chris@17
|
395 T_PROTECTED => T_PROTECTED,
|
Chris@17
|
396 ];
|
Chris@17
|
397
|
Chris@17
|
398 /**
|
Chris@17
|
399 * Tokens that can prefix a method name
|
Chris@17
|
400 *
|
Chris@17
|
401 * @var array<int, int>
|
Chris@17
|
402 */
|
Chris@17
|
403 public static $methodPrefixes = [
|
Chris@17
|
404 T_PRIVATE => T_PRIVATE,
|
Chris@17
|
405 T_PUBLIC => T_PUBLIC,
|
Chris@17
|
406 T_PROTECTED => T_PROTECTED,
|
Chris@17
|
407 T_ABSTRACT => T_ABSTRACT,
|
Chris@17
|
408 T_STATIC => T_STATIC,
|
Chris@17
|
409 T_FINAL => T_FINAL,
|
Chris@17
|
410 ];
|
Chris@17
|
411
|
Chris@17
|
412 /**
|
Chris@17
|
413 * Tokens that open code blocks.
|
Chris@17
|
414 *
|
Chris@17
|
415 * @var array<int, int>
|
Chris@17
|
416 */
|
Chris@17
|
417 public static $blockOpeners = [
|
Chris@17
|
418 T_OPEN_CURLY_BRACKET => T_OPEN_CURLY_BRACKET,
|
Chris@17
|
419 T_OPEN_SQUARE_BRACKET => T_OPEN_SQUARE_BRACKET,
|
Chris@17
|
420 T_OPEN_PARENTHESIS => T_OPEN_PARENTHESIS,
|
Chris@17
|
421 T_OBJECT => T_OBJECT,
|
Chris@17
|
422 ];
|
Chris@17
|
423
|
Chris@17
|
424 /**
|
Chris@17
|
425 * Tokens that don't represent code.
|
Chris@17
|
426 *
|
Chris@17
|
427 * @var array<int, int>
|
Chris@17
|
428 */
|
Chris@17
|
429 public static $emptyTokens = [
|
Chris@17
|
430 T_WHITESPACE => T_WHITESPACE,
|
Chris@17
|
431 T_COMMENT => T_COMMENT,
|
Chris@17
|
432 T_DOC_COMMENT => T_DOC_COMMENT,
|
Chris@17
|
433 T_DOC_COMMENT_STAR => T_DOC_COMMENT_STAR,
|
Chris@17
|
434 T_DOC_COMMENT_WHITESPACE => T_DOC_COMMENT_WHITESPACE,
|
Chris@17
|
435 T_DOC_COMMENT_TAG => T_DOC_COMMENT_TAG,
|
Chris@17
|
436 T_DOC_COMMENT_OPEN_TAG => T_DOC_COMMENT_OPEN_TAG,
|
Chris@17
|
437 T_DOC_COMMENT_CLOSE_TAG => T_DOC_COMMENT_CLOSE_TAG,
|
Chris@17
|
438 T_DOC_COMMENT_STRING => T_DOC_COMMENT_STRING,
|
Chris@17
|
439 T_PHPCS_ENABLE => T_PHPCS_ENABLE,
|
Chris@17
|
440 T_PHPCS_DISABLE => T_PHPCS_DISABLE,
|
Chris@17
|
441 T_PHPCS_SET => T_PHPCS_SET,
|
Chris@17
|
442 T_PHPCS_IGNORE => T_PHPCS_IGNORE,
|
Chris@17
|
443 T_PHPCS_IGNORE_FILE => T_PHPCS_IGNORE_FILE,
|
Chris@17
|
444 ];
|
Chris@17
|
445
|
Chris@17
|
446 /**
|
Chris@17
|
447 * Tokens that are comments.
|
Chris@17
|
448 *
|
Chris@17
|
449 * @var array<int, int>
|
Chris@17
|
450 */
|
Chris@17
|
451 public static $commentTokens = [
|
Chris@17
|
452 T_COMMENT => T_COMMENT,
|
Chris@17
|
453 T_DOC_COMMENT => T_DOC_COMMENT,
|
Chris@17
|
454 T_DOC_COMMENT_STAR => T_DOC_COMMENT_STAR,
|
Chris@17
|
455 T_DOC_COMMENT_WHITESPACE => T_DOC_COMMENT_WHITESPACE,
|
Chris@17
|
456 T_DOC_COMMENT_TAG => T_DOC_COMMENT_TAG,
|
Chris@17
|
457 T_DOC_COMMENT_OPEN_TAG => T_DOC_COMMENT_OPEN_TAG,
|
Chris@17
|
458 T_DOC_COMMENT_CLOSE_TAG => T_DOC_COMMENT_CLOSE_TAG,
|
Chris@17
|
459 T_DOC_COMMENT_STRING => T_DOC_COMMENT_STRING,
|
Chris@17
|
460 T_PHPCS_ENABLE => T_PHPCS_ENABLE,
|
Chris@17
|
461 T_PHPCS_DISABLE => T_PHPCS_DISABLE,
|
Chris@17
|
462 T_PHPCS_SET => T_PHPCS_SET,
|
Chris@17
|
463 T_PHPCS_IGNORE => T_PHPCS_IGNORE,
|
Chris@17
|
464 T_PHPCS_IGNORE_FILE => T_PHPCS_IGNORE_FILE,
|
Chris@17
|
465 ];
|
Chris@17
|
466
|
Chris@17
|
467 /**
|
Chris@17
|
468 * Tokens that are comments containing PHPCS instructions.
|
Chris@17
|
469 *
|
Chris@17
|
470 * @var array<int, int>
|
Chris@17
|
471 */
|
Chris@17
|
472 public static $phpcsCommentTokens = [
|
Chris@17
|
473 T_PHPCS_ENABLE => T_PHPCS_ENABLE,
|
Chris@17
|
474 T_PHPCS_DISABLE => T_PHPCS_DISABLE,
|
Chris@17
|
475 T_PHPCS_SET => T_PHPCS_SET,
|
Chris@17
|
476 T_PHPCS_IGNORE => T_PHPCS_IGNORE,
|
Chris@17
|
477 T_PHPCS_IGNORE_FILE => T_PHPCS_IGNORE_FILE,
|
Chris@17
|
478 ];
|
Chris@17
|
479
|
Chris@17
|
480 /**
|
Chris@17
|
481 * Tokens that represent strings.
|
Chris@17
|
482 *
|
Chris@17
|
483 * Note that T_STRINGS are NOT represented in this list.
|
Chris@17
|
484 *
|
Chris@17
|
485 * @var array<int, int>
|
Chris@17
|
486 */
|
Chris@17
|
487 public static $stringTokens = [
|
Chris@17
|
488 T_CONSTANT_ENCAPSED_STRING => T_CONSTANT_ENCAPSED_STRING,
|
Chris@17
|
489 T_DOUBLE_QUOTED_STRING => T_DOUBLE_QUOTED_STRING,
|
Chris@17
|
490 ];
|
Chris@17
|
491
|
Chris@17
|
492 /**
|
Chris@17
|
493 * Tokens that represent text strings.
|
Chris@17
|
494 *
|
Chris@17
|
495 * @var array<int, int>
|
Chris@17
|
496 */
|
Chris@17
|
497 public static $textStringTokens = [
|
Chris@17
|
498 T_CONSTANT_ENCAPSED_STRING => T_CONSTANT_ENCAPSED_STRING,
|
Chris@17
|
499 T_DOUBLE_QUOTED_STRING => T_DOUBLE_QUOTED_STRING,
|
Chris@17
|
500 T_INLINE_HTML => T_INLINE_HTML,
|
Chris@17
|
501 T_HEREDOC => T_HEREDOC,
|
Chris@17
|
502 T_NOWDOC => T_NOWDOC,
|
Chris@17
|
503 ];
|
Chris@17
|
504
|
Chris@17
|
505 /**
|
Chris@17
|
506 * Tokens that represent brackets and parenthesis.
|
Chris@17
|
507 *
|
Chris@17
|
508 * @var array<int, int>
|
Chris@17
|
509 */
|
Chris@17
|
510 public static $bracketTokens = [
|
Chris@17
|
511 T_OPEN_CURLY_BRACKET => T_OPEN_CURLY_BRACKET,
|
Chris@17
|
512 T_CLOSE_CURLY_BRACKET => T_CLOSE_CURLY_BRACKET,
|
Chris@17
|
513 T_OPEN_SQUARE_BRACKET => T_OPEN_SQUARE_BRACKET,
|
Chris@17
|
514 T_CLOSE_SQUARE_BRACKET => T_CLOSE_SQUARE_BRACKET,
|
Chris@17
|
515 T_OPEN_PARENTHESIS => T_OPEN_PARENTHESIS,
|
Chris@17
|
516 T_CLOSE_PARENTHESIS => T_CLOSE_PARENTHESIS,
|
Chris@17
|
517 ];
|
Chris@17
|
518
|
Chris@17
|
519 /**
|
Chris@17
|
520 * Tokens that include files.
|
Chris@17
|
521 *
|
Chris@17
|
522 * @var array<int, int>
|
Chris@17
|
523 */
|
Chris@17
|
524 public static $includeTokens = [
|
Chris@17
|
525 T_REQUIRE_ONCE => T_REQUIRE_ONCE,
|
Chris@17
|
526 T_REQUIRE => T_REQUIRE,
|
Chris@17
|
527 T_INCLUDE_ONCE => T_INCLUDE_ONCE,
|
Chris@17
|
528 T_INCLUDE => T_INCLUDE,
|
Chris@17
|
529 ];
|
Chris@17
|
530
|
Chris@17
|
531 /**
|
Chris@17
|
532 * Tokens that make up a heredoc string.
|
Chris@17
|
533 *
|
Chris@17
|
534 * @var array<int, int>
|
Chris@17
|
535 */
|
Chris@17
|
536 public static $heredocTokens = [
|
Chris@17
|
537 T_START_HEREDOC => T_START_HEREDOC,
|
Chris@17
|
538 T_END_HEREDOC => T_END_HEREDOC,
|
Chris@17
|
539 T_HEREDOC => T_HEREDOC,
|
Chris@17
|
540 T_START_NOWDOC => T_START_NOWDOC,
|
Chris@17
|
541 T_END_NOWDOC => T_END_NOWDOC,
|
Chris@17
|
542 T_NOWDOC => T_NOWDOC,
|
Chris@17
|
543 ];
|
Chris@17
|
544
|
Chris@17
|
545 /**
|
Chris@17
|
546 * Tokens that represent the names of called functions.
|
Chris@17
|
547 *
|
Chris@17
|
548 * Mostly, these are just strings. But PHP tokenizes some language
|
Chris@17
|
549 * constructs and functions using their own tokens.
|
Chris@17
|
550 *
|
Chris@17
|
551 * @var array<int, int>
|
Chris@17
|
552 */
|
Chris@17
|
553 public static $functionNameTokens = [
|
Chris@17
|
554 T_STRING => T_STRING,
|
Chris@17
|
555 T_EVAL => T_EVAL,
|
Chris@17
|
556 T_EXIT => T_EXIT,
|
Chris@17
|
557 T_INCLUDE => T_INCLUDE,
|
Chris@17
|
558 T_INCLUDE_ONCE => T_INCLUDE_ONCE,
|
Chris@17
|
559 T_REQUIRE => T_REQUIRE,
|
Chris@17
|
560 T_REQUIRE_ONCE => T_REQUIRE_ONCE,
|
Chris@17
|
561 T_ISSET => T_ISSET,
|
Chris@17
|
562 T_UNSET => T_UNSET,
|
Chris@17
|
563 T_EMPTY => T_EMPTY,
|
Chris@17
|
564 T_SELF => T_SELF,
|
Chris@17
|
565 T_STATIC => T_STATIC,
|
Chris@17
|
566 ];
|
Chris@17
|
567
|
Chris@17
|
568 /**
|
Chris@17
|
569 * Tokens that open class and object scopes.
|
Chris@17
|
570 *
|
Chris@17
|
571 * @var array<int, int>
|
Chris@17
|
572 */
|
Chris@17
|
573 public static $ooScopeTokens = [
|
Chris@17
|
574 T_CLASS => T_CLASS,
|
Chris@17
|
575 T_ANON_CLASS => T_ANON_CLASS,
|
Chris@17
|
576 T_INTERFACE => T_INTERFACE,
|
Chris@17
|
577 T_TRAIT => T_TRAIT,
|
Chris@17
|
578 ];
|
Chris@17
|
579
|
Chris@17
|
580
|
Chris@17
|
581 /**
|
Chris@17
|
582 * Given a token, returns the name of the token.
|
Chris@17
|
583 *
|
Chris@17
|
584 * If passed an integer, the token name is sourced from PHP's token_name()
|
Chris@17
|
585 * function. If passed a string, it is assumed to be a PHPCS-supplied token
|
Chris@17
|
586 * that begins with PHPCS_T_, so the name is sourced from the token value itself.
|
Chris@17
|
587 *
|
Chris@17
|
588 * @param int|string $token The token to get the name for.
|
Chris@17
|
589 *
|
Chris@17
|
590 * @return string
|
Chris@17
|
591 */
|
Chris@17
|
592 public static function tokenName($token)
|
Chris@17
|
593 {
|
Chris@17
|
594 if (is_string($token) === false) {
|
Chris@17
|
595 // PHP-supplied token name.
|
Chris@17
|
596 return token_name($token);
|
Chris@17
|
597 }
|
Chris@17
|
598
|
Chris@17
|
599 return substr($token, 6);
|
Chris@17
|
600
|
Chris@17
|
601 }//end tokenName()
|
Chris@17
|
602
|
Chris@17
|
603
|
Chris@17
|
604 /**
|
Chris@17
|
605 * Returns the highest weighted token type.
|
Chris@17
|
606 *
|
Chris@17
|
607 * Tokens are weighted by their approximate frequency of appearance in code
|
Chris@17
|
608 * - the less frequently they appear in the code, the higher the weighting.
|
Chris@17
|
609 * For example T_CLASS tokens appear very infrequently in a file, and
|
Chris@17
|
610 * therefore have a high weighting.
|
Chris@17
|
611 *
|
Chris@17
|
612 * Returns false if there are no weightings for any of the specified tokens.
|
Chris@17
|
613 *
|
Chris@17
|
614 * @param array<int, int> $tokens The token types to get the highest weighted
|
Chris@17
|
615 * type for.
|
Chris@17
|
616 *
|
Chris@17
|
617 * @return int The highest weighted token.
|
Chris@17
|
618 */
|
Chris@17
|
619 public static function getHighestWeightedToken(array $tokens)
|
Chris@17
|
620 {
|
Chris@17
|
621 $highest = -1;
|
Chris@17
|
622 $highestType = false;
|
Chris@17
|
623
|
Chris@17
|
624 $weights = self::$weightings;
|
Chris@17
|
625
|
Chris@17
|
626 foreach ($tokens as $token) {
|
Chris@17
|
627 if (isset($weights[$token]) === true) {
|
Chris@17
|
628 $weight = $weights[$token];
|
Chris@17
|
629 } else {
|
Chris@17
|
630 $weight = 0;
|
Chris@17
|
631 }
|
Chris@17
|
632
|
Chris@17
|
633 if ($weight > $highest) {
|
Chris@17
|
634 $highest = $weight;
|
Chris@17
|
635 $highestType = $token;
|
Chris@17
|
636 }
|
Chris@17
|
637 }
|
Chris@17
|
638
|
Chris@17
|
639 return $highestType;
|
Chris@17
|
640
|
Chris@17
|
641 }//end getHighestWeightedToken()
|
Chris@17
|
642
|
Chris@17
|
643
|
Chris@17
|
644 }//end class
|