comparison vendor/squizlabs/php_codesniffer/src/Util/Tokens.php @ 17:129ea1e6d783

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