Chris@0: Chris@0: * @author Marc McIntyre Chris@0: * @copyright 2006-2014 Squiz Pty Ltd (ABN 77 084 670 600) Chris@0: * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence Chris@0: * @link http://pear.php.net/package/PHP_CodeSniffer Chris@0: */ Chris@0: Chris@0: define('T_NONE', 'PHPCS_T_NONE'); Chris@0: define('T_OPEN_CURLY_BRACKET', 'PHPCS_T_OPEN_CURLY_BRACKET'); Chris@0: define('T_CLOSE_CURLY_BRACKET', 'PHPCS_T_CLOSE_CURLY_BRACKET'); Chris@0: define('T_OPEN_SQUARE_BRACKET', 'PHPCS_T_OPEN_SQUARE_BRACKET'); Chris@0: define('T_CLOSE_SQUARE_BRACKET', 'PHPCS_T_CLOSE_SQUARE_BRACKET'); Chris@0: define('T_OPEN_PARENTHESIS', 'PHPCS_T_OPEN_PARENTHESIS'); Chris@0: define('T_CLOSE_PARENTHESIS', 'PHPCS_T_CLOSE_PARENTHESIS'); Chris@0: define('T_COLON', 'PHPCS_T_COLON'); Chris@0: define('T_NULLABLE', 'PHPCS_T_NULLABLE'); Chris@0: define('T_STRING_CONCAT', 'PHPCS_T_STRING_CONCAT'); Chris@0: define('T_INLINE_THEN', 'PHPCS_T_INLINE_THEN'); Chris@0: define('T_INLINE_ELSE', 'PHPCS_T_INLINE_ELSE'); Chris@0: define('T_NULL', 'PHPCS_T_NULL'); Chris@0: define('T_FALSE', 'PHPCS_T_FALSE'); Chris@0: define('T_TRUE', 'PHPCS_T_TRUE'); Chris@0: define('T_SEMICOLON', 'PHPCS_T_SEMICOLON'); Chris@0: define('T_EQUAL', 'PHPCS_T_EQUAL'); Chris@0: define('T_MULTIPLY', 'PHPCS_T_MULTIPLY'); Chris@0: define('T_DIVIDE', 'PHPCS_T_DIVIDE'); Chris@0: define('T_PLUS', 'PHPCS_T_PLUS'); Chris@0: define('T_MINUS', 'PHPCS_T_MINUS'); Chris@0: define('T_MODULUS', 'PHPCS_T_MODULUS'); Chris@0: define('T_BITWISE_AND', 'PHPCS_T_BITWISE_AND'); Chris@0: define('T_BITWISE_OR', 'PHPCS_T_BITWISE_OR'); Chris@0: define('T_BITWISE_XOR', 'PHPCS_T_BITWISE_XOR'); Chris@0: define('T_ARRAY_HINT', 'PHPCS_T_ARRAY_HINT'); Chris@0: define('T_GREATER_THAN', 'PHPCS_T_GREATER_THAN'); Chris@0: define('T_LESS_THAN', 'PHPCS_T_LESS_THAN'); Chris@0: define('T_BOOLEAN_NOT', 'PHPCS_T_BOOLEAN_NOT'); Chris@0: define('T_SELF', 'PHPCS_T_SELF'); Chris@0: define('T_PARENT', 'PHPCS_T_PARENT'); Chris@0: define('T_DOUBLE_QUOTED_STRING', 'PHPCS_T_DOUBLE_QUOTED_STRING'); Chris@0: define('T_COMMA', 'PHPCS_T_COMMA'); Chris@0: define('T_HEREDOC', 'PHPCS_T_HEREDOC'); Chris@0: define('T_PROTOTYPE', 'PHPCS_T_PROTOTYPE'); Chris@0: define('T_THIS', 'PHPCS_T_THIS'); Chris@0: define('T_REGULAR_EXPRESSION', 'PHPCS_T_REGULAR_EXPRESSION'); Chris@0: define('T_PROPERTY', 'PHPCS_T_PROPERTY'); Chris@0: define('T_LABEL', 'PHPCS_T_LABEL'); Chris@0: define('T_OBJECT', 'PHPCS_T_OBJECT'); Chris@0: define('T_CLOSE_OBJECT', 'PHPCS_T_CLOSE_OBJECT'); Chris@0: define('T_COLOUR', 'PHPCS_T_COLOUR'); Chris@0: define('T_HASH', 'PHPCS_T_HASH'); Chris@0: define('T_URL', 'PHPCS_T_URL'); Chris@0: define('T_STYLE', 'PHPCS_T_STYLE'); Chris@0: define('T_ASPERAND', 'PHPCS_T_ASPERAND'); Chris@0: define('T_DOLLAR', 'PHPCS_T_DOLLAR'); Chris@0: define('T_TYPEOF', 'PHPCS_T_TYPEOF'); Chris@0: define('T_CLOSURE', 'PHPCS_T_CLOSURE'); Chris@0: define('T_ANON_CLASS', 'PHPCS_T_ANON_CLASS'); Chris@0: define('T_BACKTICK', 'PHPCS_T_BACKTICK'); Chris@0: define('T_START_NOWDOC', 'PHPCS_T_START_NOWDOC'); Chris@0: define('T_NOWDOC', 'PHPCS_T_NOWDOC'); Chris@0: define('T_END_NOWDOC', 'PHPCS_T_END_NOWDOC'); Chris@0: define('T_OPEN_SHORT_ARRAY', 'PHPCS_T_OPEN_SHORT_ARRAY'); Chris@0: define('T_CLOSE_SHORT_ARRAY', 'PHPCS_T_CLOSE_SHORT_ARRAY'); Chris@0: define('T_GOTO_LABEL', 'PHPCS_T_GOTO_LABEL'); Chris@0: define('T_BINARY_CAST', 'PHPCS_T_BINARY_CAST'); Chris@0: define('T_EMBEDDED_PHP', 'PHPCS_T_EMBEDDED_PHP'); Chris@0: define('T_RETURN_TYPE', 'PHPCS_T_RETURN_TYPE'); Chris@0: define('T_OPEN_USE_GROUP', 'PHPCS_T_OPEN_USE_GROUP'); Chris@0: define('T_CLOSE_USE_GROUP', 'PHPCS_T_CLOSE_USE_GROUP'); Chris@0: define('T_ZSR', 'PHPCS_T_ZSR'); Chris@0: define('T_ZSR_EQUAL', 'PHPCS_T_ZSR_EQUAL'); Chris@0: Chris@0: // Some PHP 5.3 tokens, replicated for lower versions. Chris@0: if (defined('T_NAMESPACE') === false) { Chris@0: define('T_NAMESPACE', 'PHPCS_T_NAMESPACE'); Chris@0: } Chris@0: Chris@0: if (defined('T_NS_C') === false) { Chris@0: define('T_NS_C', 'PHPCS_T_NS_C'); Chris@0: } Chris@0: Chris@0: if (defined('T_NS_SEPARATOR') === false) { Chris@0: define('T_NS_SEPARATOR', 'PHPCS_T_NS_SEPARATOR'); Chris@0: } Chris@0: Chris@0: if (defined('T_GOTO') === false) { Chris@0: define('T_GOTO', 'PHPCS_T_GOTO'); Chris@0: } Chris@0: Chris@0: if (defined('T_DIR') === false) { Chris@0: define('T_DIR', 'PHPCS_T_DIR'); Chris@0: } Chris@0: Chris@0: // Some PHP 5.4 tokens, replicated for lower versions. Chris@0: if (defined('T_TRAIT') === false) { Chris@0: define('T_TRAIT', 'PHPCS_T_TRAIT'); Chris@0: } Chris@0: Chris@0: if (defined('T_TRAIT_C') === false) { Chris@0: define('T_TRAIT_C', 'PHPCS_T_TRAIT_C'); Chris@0: } Chris@0: Chris@0: if (defined('T_INSTEADOF') === false) { Chris@0: define('T_INSTEADOF', 'PHPCS_T_INSTEADOF'); Chris@0: } Chris@0: Chris@0: if (defined('T_CALLABLE') === false) { Chris@0: define('T_CALLABLE', 'PHPCS_T_CALLABLE'); Chris@0: } Chris@0: Chris@0: // Some PHP 5.5 tokens, replicated for lower versions. Chris@0: if (defined('T_FINALLY') === false) { Chris@0: define('T_FINALLY', 'PHPCS_T_FINALLY'); Chris@0: } Chris@0: Chris@0: if (defined('T_YIELD') === false) { Chris@0: define('T_YIELD', 'PHPCS_T_YIELD'); Chris@0: } Chris@0: Chris@0: // Some PHP 5.6 tokens, replicated for lower versions. Chris@0: if (defined('T_ELLIPSIS') === false) { Chris@0: define('T_ELLIPSIS', 'PHPCS_T_ELLIPSIS'); Chris@0: } Chris@0: Chris@0: if (defined('T_POW') === false) { Chris@0: define('T_POW', 'PHPCS_T_POW'); Chris@0: } Chris@0: Chris@0: if (defined('T_POW_EQUAL') === false) { Chris@0: define('T_POW_EQUAL', 'PHPCS_T_POW_EQUAL'); Chris@0: } Chris@0: Chris@0: // Some PHP 7 tokens, replicated for lower versions. Chris@0: if (defined('T_SPACESHIP') === false) { Chris@0: define('T_SPACESHIP', 'PHPCS_T_SPACESHIP'); Chris@0: } Chris@0: Chris@0: if (defined('T_COALESCE') === false) { Chris@0: define('T_COALESCE', 'PHPCS_T_COALESCE'); Chris@0: } Chris@0: Chris@0: if (defined('T_COALESCE_EQUAL') === false) { Chris@0: define('T_COALESCE_EQUAL', 'PHPCS_T_COALESCE_EQUAL'); Chris@0: } Chris@0: Chris@0: // Tokens used for parsing doc blocks. Chris@0: define('T_DOC_COMMENT_STAR', 'PHPCS_T_DOC_COMMENT_STAR'); Chris@0: define('T_DOC_COMMENT_WHITESPACE', 'PHPCS_T_DOC_COMMENT_WHITESPACE'); Chris@0: define('T_DOC_COMMENT_TAG', 'PHPCS_T_DOC_COMMENT_TAG'); Chris@0: define('T_DOC_COMMENT_OPEN_TAG', 'PHPCS_T_DOC_COMMENT_OPEN_TAG'); Chris@0: define('T_DOC_COMMENT_CLOSE_TAG', 'PHPCS_T_DOC_COMMENT_CLOSE_TAG'); Chris@0: define('T_DOC_COMMENT_STRING', 'PHPCS_T_DOC_COMMENT_STRING'); Chris@0: Chris@0: /** Chris@0: * The Tokens class contains weightings for tokens based on their Chris@0: * probability of occurrence in a file. Chris@0: * Chris@0: * The less the chance of a high occurrence of an arbitrary token, the higher Chris@0: * the weighting. Chris@0: * Chris@0: * @category PHP Chris@0: * @package PHP_CodeSniffer Chris@0: * @author Greg Sherwood Chris@0: * @author Marc McIntyre Chris@0: * @copyright 2006-2014 Squiz Pty Ltd (ABN 77 084 670 600) Chris@0: * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence Chris@0: * @version Release: @package_version@ Chris@0: * @link http://pear.php.net/package/PHP_CodeSniffer Chris@0: */ Chris@0: final class PHP_CodeSniffer_Tokens Chris@0: { Chris@0: Chris@0: /** Chris@0: * The token weightings. Chris@0: * Chris@0: * @var array(int => int) Chris@0: */ Chris@0: public static $weightings = array( Chris@0: T_CLASS => 1000, Chris@0: T_INTERFACE => 1000, Chris@0: T_TRAIT => 1000, Chris@0: T_NAMESPACE => 1000, Chris@0: T_FUNCTION => 100, Chris@0: T_CLOSURE => 100, Chris@0: Chris@0: /* Chris@0: Conditions. Chris@0: */ Chris@0: Chris@0: T_WHILE => 50, Chris@0: T_FOR => 50, Chris@0: T_FOREACH => 50, Chris@0: T_IF => 50, Chris@0: T_ELSE => 50, Chris@0: T_ELSEIF => 50, Chris@0: T_DO => 50, Chris@0: T_TRY => 50, Chris@0: T_CATCH => 50, Chris@0: T_FINALLY => 50, Chris@0: T_SWITCH => 50, Chris@0: Chris@0: T_SELF => 25, Chris@0: T_PARENT => 25, Chris@0: Chris@0: /* Chris@0: Operators and arithmetic. Chris@0: */ Chris@0: Chris@0: T_BITWISE_AND => 8, Chris@0: T_BITWISE_OR => 8, Chris@0: T_BITWISE_XOR => 8, Chris@0: Chris@0: T_MULTIPLY => 5, Chris@0: T_DIVIDE => 5, Chris@0: T_PLUS => 5, Chris@0: T_MINUS => 5, Chris@0: T_MODULUS => 5, Chris@0: T_POW => 5, Chris@0: T_SPACESHIP => 5, Chris@0: T_COALESCE => 5, Chris@0: T_COALESCE_EQUAL => 5, Chris@0: Chris@0: T_SL => 5, Chris@0: T_SR => 5, Chris@0: T_SL_EQUAL => 5, Chris@0: T_SR_EQUAL => 5, Chris@0: Chris@0: T_EQUAL => 5, Chris@0: T_AND_EQUAL => 5, Chris@0: T_CONCAT_EQUAL => 5, Chris@0: T_DIV_EQUAL => 5, Chris@0: T_MINUS_EQUAL => 5, Chris@0: T_MOD_EQUAL => 5, Chris@0: T_MUL_EQUAL => 5, Chris@0: T_OR_EQUAL => 5, Chris@0: T_PLUS_EQUAL => 5, Chris@0: T_XOR_EQUAL => 5, Chris@0: Chris@0: T_BOOLEAN_AND => 5, Chris@0: T_BOOLEAN_OR => 5, Chris@0: Chris@0: /* Chris@0: Equality. Chris@0: */ Chris@0: Chris@0: T_IS_EQUAL => 5, Chris@0: T_IS_NOT_EQUAL => 5, Chris@0: T_IS_IDENTICAL => 5, Chris@0: T_IS_NOT_IDENTICAL => 5, Chris@0: T_IS_SMALLER_OR_EQUAL => 5, Chris@0: T_IS_GREATER_OR_EQUAL => 5, Chris@0: ); Chris@0: Chris@0: /** Chris@0: * The token weightings. Chris@0: * Chris@0: * @var array(int => int) Chris@0: */ Chris@0: public static $knownLengths = array( Chris@0: T_ABSTRACT => 8, Chris@0: T_AND_EQUAL => 2, Chris@0: T_ARRAY => 5, Chris@0: T_AS => 2, Chris@0: T_BOOLEAN_AND => 2, Chris@0: T_BOOLEAN_OR => 2, Chris@0: T_BREAK => 5, Chris@0: T_CALLABLE => 8, Chris@0: T_CASE => 4, Chris@0: T_CATCH => 5, Chris@0: T_CLASS => 5, Chris@0: T_CLASS_C => 9, Chris@0: T_CLONE => 5, Chris@0: T_CONCAT_EQUAL => 2, Chris@0: T_CONST => 5, Chris@0: T_CONTINUE => 8, Chris@0: T_CURLY_OPEN => 2, Chris@0: T_DEC => 2, Chris@0: T_DECLARE => 7, Chris@0: T_DEFAULT => 7, Chris@0: T_DIR => 7, Chris@0: T_DIV_EQUAL => 2, Chris@0: T_DO => 2, Chris@0: T_DOLLAR_OPEN_CURLY_BRACES => 2, Chris@0: T_DOUBLE_ARROW => 2, Chris@0: T_DOUBLE_COLON => 2, Chris@0: T_ECHO => 4, Chris@0: T_ELSE => 4, Chris@0: T_ELSEIF => 6, Chris@0: T_EMPTY => 5, Chris@0: T_ENDDECLARE => 10, Chris@0: T_ENDFOR => 6, Chris@0: T_ENDFOREACH => 10, Chris@0: T_ENDIF => 5, Chris@0: T_ENDSWITCH => 9, Chris@0: T_ENDWHILE => 8, Chris@0: T_EVAL => 4, Chris@0: T_EXTENDS => 7, Chris@0: T_FILE => 8, Chris@0: T_FINAL => 5, Chris@0: T_FINALLY => 7, Chris@0: T_FOR => 3, Chris@0: T_FOREACH => 7, Chris@0: T_FUNCTION => 8, Chris@0: T_FUNC_C => 12, Chris@0: T_GLOBAL => 6, Chris@0: T_GOTO => 4, Chris@0: T_HALT_COMPILER => 15, Chris@0: T_IF => 2, Chris@0: T_IMPLEMENTS => 10, Chris@0: T_INC => 2, Chris@0: T_INCLUDE => 7, Chris@0: T_INCLUDE_ONCE => 12, Chris@0: T_INSTANCEOF => 10, Chris@0: T_INSTEADOF => 9, Chris@0: T_INTERFACE => 9, Chris@0: T_ISSET => 5, Chris@0: T_IS_EQUAL => 2, Chris@0: T_IS_GREATER_OR_EQUAL => 2, Chris@0: T_IS_IDENTICAL => 3, Chris@0: T_IS_NOT_EQUAL => 2, Chris@0: T_IS_NOT_IDENTICAL => 3, Chris@0: T_IS_SMALLER_OR_EQUAL => 2, Chris@0: T_LINE => 8, Chris@0: T_LIST => 4, Chris@0: T_LOGICAL_AND => 3, Chris@0: T_LOGICAL_OR => 2, Chris@0: T_LOGICAL_XOR => 3, Chris@0: T_METHOD_C => 10, Chris@0: T_MINUS_EQUAL => 2, Chris@0: T_POW_EQUAL => 3, Chris@0: T_MOD_EQUAL => 2, Chris@0: T_MUL_EQUAL => 2, Chris@0: T_NAMESPACE => 9, Chris@0: T_NS_C => 13, Chris@0: T_NS_SEPARATOR => 1, Chris@0: T_NEW => 3, Chris@0: T_OBJECT_OPERATOR => 2, Chris@0: T_OPEN_TAG_WITH_ECHO => 3, Chris@0: T_OR_EQUAL => 2, Chris@0: T_PLUS_EQUAL => 2, Chris@0: T_PRINT => 5, Chris@0: T_PRIVATE => 7, Chris@0: T_PUBLIC => 6, Chris@0: T_PROTECTED => 9, Chris@0: T_REQUIRE => 7, Chris@0: T_REQUIRE_ONCE => 12, Chris@0: T_RETURN => 6, Chris@0: T_STATIC => 6, Chris@0: T_SWITCH => 6, Chris@0: T_THROW => 5, Chris@0: T_TRAIT => 5, Chris@0: T_TRAIT_C => 9, Chris@0: T_TRY => 3, Chris@0: T_UNSET => 5, Chris@0: T_USE => 3, Chris@0: T_VAR => 3, Chris@0: T_WHILE => 5, Chris@0: T_XOR_EQUAL => 2, Chris@0: T_YIELD => 5, Chris@0: T_OPEN_CURLY_BRACKET => 1, Chris@0: T_CLOSE_CURLY_BRACKET => 1, Chris@0: T_OPEN_SQUARE_BRACKET => 1, Chris@0: T_CLOSE_SQUARE_BRACKET => 1, Chris@0: T_OPEN_PARENTHESIS => 1, Chris@0: T_CLOSE_PARENTHESIS => 1, Chris@0: T_COLON => 1, Chris@0: T_NULLABLE => 1, Chris@0: T_STRING_CONCAT => 1, Chris@0: T_INLINE_THEN => 1, Chris@0: T_INLINE_ELSE => 1, Chris@0: T_NULL => 4, Chris@0: T_FALSE => 5, Chris@0: T_TRUE => 4, Chris@0: T_SEMICOLON => 1, Chris@0: T_EQUAL => 1, Chris@0: T_MULTIPLY => 1, Chris@0: T_DIVIDE => 1, Chris@0: T_PLUS => 1, Chris@0: T_MINUS => 1, Chris@0: T_MODULUS => 1, Chris@0: T_POW => 2, Chris@0: T_SPACESHIP => 3, Chris@0: T_COALESCE => 2, Chris@0: T_COALESCE_EQUAL => 3, Chris@0: T_BITWISE_AND => 1, Chris@0: T_BITWISE_OR => 1, Chris@0: T_BITWISE_XOR => 1, Chris@0: T_SL => 2, Chris@0: T_SR => 2, Chris@0: T_SL_EQUAL => 3, Chris@0: T_SR_EQUAL => 3, Chris@0: T_ARRAY_HINT => 5, Chris@0: T_GREATER_THAN => 1, Chris@0: T_LESS_THAN => 1, Chris@0: T_BOOLEAN_NOT => 1, Chris@0: T_SELF => 4, Chris@0: T_PARENT => 6, Chris@0: T_COMMA => 1, Chris@0: T_THIS => 4, Chris@0: T_CLOSURE => 8, Chris@0: T_BACKTICK => 1, Chris@0: T_OPEN_SHORT_ARRAY => 1, Chris@0: T_CLOSE_SHORT_ARRAY => 1, Chris@0: ); Chris@0: Chris@0: /** Chris@0: * Tokens that represent assignments. Chris@0: * Chris@0: * @var array(int) Chris@0: */ Chris@0: public static $assignmentTokens = array( Chris@0: T_EQUAL => T_EQUAL, Chris@0: T_AND_EQUAL => T_AND_EQUAL, Chris@0: T_OR_EQUAL => T_OR_EQUAL, Chris@0: T_CONCAT_EQUAL => T_CONCAT_EQUAL, Chris@0: T_DIV_EQUAL => T_DIV_EQUAL, Chris@0: T_MINUS_EQUAL => T_MINUS_EQUAL, Chris@0: T_POW_EQUAL => T_POW_EQUAL, Chris@0: T_MOD_EQUAL => T_MOD_EQUAL, Chris@0: T_MUL_EQUAL => T_MUL_EQUAL, Chris@0: T_PLUS_EQUAL => T_PLUS_EQUAL, Chris@0: T_XOR_EQUAL => T_XOR_EQUAL, Chris@0: T_DOUBLE_ARROW => T_DOUBLE_ARROW, Chris@0: T_SL_EQUAL => T_SL_EQUAL, Chris@0: T_SR_EQUAL => T_SR_EQUAL, Chris@0: ); Chris@0: Chris@0: /** Chris@0: * Tokens that represent equality comparisons. Chris@0: * Chris@0: * @var array(int) Chris@0: */ Chris@0: public static $equalityTokens = array( Chris@0: T_IS_EQUAL => T_IS_EQUAL, Chris@0: T_IS_NOT_EQUAL => T_IS_NOT_EQUAL, Chris@0: T_IS_IDENTICAL => T_IS_IDENTICAL, Chris@0: T_IS_NOT_IDENTICAL => T_IS_NOT_IDENTICAL, Chris@0: T_IS_SMALLER_OR_EQUAL => T_IS_SMALLER_OR_EQUAL, Chris@0: T_IS_GREATER_OR_EQUAL => T_IS_GREATER_OR_EQUAL, Chris@0: ); Chris@0: Chris@0: /** Chris@0: * Tokens that represent comparison operator. Chris@0: * Chris@0: * @var array(int) Chris@0: */ Chris@0: public static $comparisonTokens = array( Chris@0: T_IS_EQUAL => T_IS_EQUAL, Chris@0: T_IS_IDENTICAL => T_IS_IDENTICAL, Chris@0: T_IS_NOT_EQUAL => T_IS_NOT_EQUAL, Chris@0: T_IS_NOT_IDENTICAL => T_IS_NOT_IDENTICAL, Chris@0: T_LESS_THAN => T_LESS_THAN, Chris@0: T_GREATER_THAN => T_GREATER_THAN, Chris@0: T_IS_SMALLER_OR_EQUAL => T_IS_SMALLER_OR_EQUAL, Chris@0: T_IS_GREATER_OR_EQUAL => T_IS_GREATER_OR_EQUAL, Chris@0: ); Chris@0: Chris@0: /** Chris@0: * Tokens that represent arithmetic operators. Chris@0: * Chris@0: * @var array(int) Chris@0: */ Chris@0: public static $arithmeticTokens = array( Chris@0: T_PLUS => T_PLUS, Chris@0: T_MINUS => T_MINUS, Chris@0: T_MULTIPLY => T_MULTIPLY, Chris@0: T_DIVIDE => T_DIVIDE, Chris@0: T_MODULUS => T_MODULUS, Chris@0: ); Chris@0: Chris@0: /** Chris@0: * Tokens that represent casting. Chris@0: * Chris@0: * @var array(int) Chris@0: */ Chris@0: public static $castTokens = array( Chris@0: T_INT_CAST => T_INT_CAST, Chris@0: T_STRING_CAST => T_STRING_CAST, Chris@0: T_DOUBLE_CAST => T_DOUBLE_CAST, Chris@0: T_ARRAY_CAST => T_ARRAY_CAST, Chris@0: T_BOOL_CAST => T_BOOL_CAST, Chris@0: T_OBJECT_CAST => T_OBJECT_CAST, Chris@0: T_UNSET_CAST => T_UNSET_CAST, Chris@0: T_BINARY_CAST => T_BINARY_CAST, Chris@0: ); Chris@0: Chris@0: /** Chris@0: * Token types that open parenthesis. Chris@0: * Chris@0: * @var array(int) Chris@0: */ Chris@0: public static $parenthesisOpeners = array( Chris@0: T_ARRAY => T_ARRAY, Chris@0: T_FUNCTION => T_FUNCTION, Chris@0: T_CLOSURE => T_CLOSURE, Chris@0: T_WHILE => T_WHILE, Chris@0: T_FOR => T_FOR, Chris@0: T_FOREACH => T_FOREACH, Chris@0: T_SWITCH => T_SWITCH, Chris@0: T_IF => T_IF, Chris@0: T_ELSEIF => T_ELSEIF, Chris@0: T_CATCH => T_CATCH, Chris@0: T_DECLARE => T_DECLARE, Chris@0: ); Chris@0: Chris@0: /** Chris@0: * Tokens that are allowed to open scopes. Chris@0: * Chris@0: * @var array(int) Chris@0: */ Chris@0: public static $scopeOpeners = array( Chris@0: T_CLASS => T_CLASS, Chris@0: T_ANON_CLASS => T_ANON_CLASS, Chris@0: T_INTERFACE => T_INTERFACE, Chris@0: T_TRAIT => T_TRAIT, Chris@0: T_NAMESPACE => T_NAMESPACE, Chris@0: T_FUNCTION => T_FUNCTION, Chris@0: T_CLOSURE => T_CLOSURE, Chris@0: T_IF => T_IF, Chris@0: T_SWITCH => T_SWITCH, Chris@0: T_CASE => T_CASE, Chris@0: T_DECLARE => T_DECLARE, Chris@0: T_DEFAULT => T_DEFAULT, Chris@0: T_WHILE => T_WHILE, Chris@0: T_ELSE => T_ELSE, Chris@0: T_ELSEIF => T_ELSEIF, Chris@0: T_FOR => T_FOR, Chris@0: T_FOREACH => T_FOREACH, Chris@0: T_DO => T_DO, Chris@0: T_TRY => T_TRY, Chris@0: T_CATCH => T_CATCH, Chris@0: T_FINALLY => T_FINALLY, Chris@0: T_PROPERTY => T_PROPERTY, Chris@0: T_OBJECT => T_OBJECT, Chris@0: T_USE => T_USE, Chris@0: ); Chris@0: Chris@0: /** Chris@0: * Tokens that represent scope modifiers. Chris@0: * Chris@0: * @var array(int) Chris@0: */ Chris@0: public static $scopeModifiers = array( Chris@0: T_PRIVATE => T_PRIVATE, Chris@0: T_PUBLIC => T_PUBLIC, Chris@0: T_PROTECTED => T_PROTECTED, Chris@0: ); Chris@0: Chris@0: /** Chris@0: * Tokens that can prefix a method name Chris@0: * Chris@0: * @var array(int) Chris@0: */ Chris@0: public static $methodPrefixes = array( Chris@0: T_PRIVATE => T_PRIVATE, Chris@0: T_PUBLIC => T_PUBLIC, Chris@0: T_PROTECTED => T_PROTECTED, Chris@0: T_ABSTRACT => T_ABSTRACT, Chris@0: T_STATIC => T_STATIC, Chris@0: T_FINAL => T_FINAL, Chris@0: ); Chris@0: Chris@0: /** Chris@0: * Tokens that perform operations. Chris@0: * Chris@0: * @var array(int) Chris@0: */ Chris@0: public static $operators = array( Chris@0: T_MINUS => T_MINUS, Chris@0: T_PLUS => T_PLUS, Chris@0: T_MULTIPLY => T_MULTIPLY, Chris@0: T_DIVIDE => T_DIVIDE, Chris@0: T_MODULUS => T_MODULUS, Chris@0: T_POW => T_POW, Chris@0: T_SPACESHIP => T_SPACESHIP, Chris@0: T_COALESCE => T_COALESCE, Chris@0: T_COALESCE_EQUAL => T_COALESCE_EQUAL, Chris@0: T_BITWISE_AND => T_BITWISE_AND, Chris@0: T_BITWISE_OR => T_BITWISE_OR, Chris@0: T_BITWISE_XOR => T_BITWISE_XOR, Chris@0: T_SL => T_SL, Chris@0: T_SR => T_SR, Chris@0: ); Chris@0: Chris@0: /** Chris@0: * Tokens that perform boolean operations. Chris@0: * Chris@0: * @var array(int) Chris@0: */ Chris@0: public static $booleanOperators = array( Chris@0: T_BOOLEAN_AND => T_BOOLEAN_AND, Chris@0: T_BOOLEAN_OR => T_BOOLEAN_OR, Chris@0: T_LOGICAL_AND => T_LOGICAL_AND, Chris@0: T_LOGICAL_OR => T_LOGICAL_OR, Chris@0: T_LOGICAL_XOR => T_LOGICAL_XOR, Chris@0: ); Chris@0: Chris@0: /** Chris@0: * Tokens that open code blocks. Chris@0: * Chris@0: * @var array(int) Chris@0: */ Chris@0: public static $blockOpeners = array( Chris@0: T_OPEN_CURLY_BRACKET => T_OPEN_CURLY_BRACKET, Chris@0: T_OPEN_SQUARE_BRACKET => T_OPEN_SQUARE_BRACKET, Chris@0: T_OPEN_PARENTHESIS => T_OPEN_PARENTHESIS, Chris@0: T_OBJECT => T_OBJECT, Chris@0: ); Chris@0: Chris@0: /** Chris@0: * Tokens that don't represent code. Chris@0: * Chris@0: * @var array(int) Chris@0: */ Chris@0: public static $emptyTokens = array( Chris@0: T_WHITESPACE => T_WHITESPACE, Chris@0: T_COMMENT => T_COMMENT, Chris@0: T_DOC_COMMENT => T_DOC_COMMENT, Chris@0: T_DOC_COMMENT_STAR => T_DOC_COMMENT_STAR, Chris@0: T_DOC_COMMENT_WHITESPACE => T_DOC_COMMENT_WHITESPACE, Chris@0: T_DOC_COMMENT_TAG => T_DOC_COMMENT_TAG, Chris@0: T_DOC_COMMENT_OPEN_TAG => T_DOC_COMMENT_OPEN_TAG, Chris@0: T_DOC_COMMENT_CLOSE_TAG => T_DOC_COMMENT_CLOSE_TAG, Chris@0: T_DOC_COMMENT_STRING => T_DOC_COMMENT_STRING, Chris@0: ); Chris@0: Chris@0: /** Chris@0: * Tokens that are comments. Chris@0: * Chris@0: * @var array(int) Chris@0: */ Chris@0: public static $commentTokens = array( Chris@0: T_COMMENT => T_COMMENT, Chris@0: T_DOC_COMMENT => T_DOC_COMMENT, Chris@0: T_DOC_COMMENT_STAR => T_DOC_COMMENT_STAR, Chris@0: T_DOC_COMMENT_WHITESPACE => T_DOC_COMMENT_WHITESPACE, Chris@0: T_DOC_COMMENT_TAG => T_DOC_COMMENT_TAG, Chris@0: T_DOC_COMMENT_OPEN_TAG => T_DOC_COMMENT_OPEN_TAG, Chris@0: T_DOC_COMMENT_CLOSE_TAG => T_DOC_COMMENT_CLOSE_TAG, Chris@0: T_DOC_COMMENT_STRING => T_DOC_COMMENT_STRING, Chris@0: ); Chris@0: Chris@0: /** Chris@0: * Tokens that represent strings. Chris@0: * Chris@0: * Note that T_STRINGS are NOT represented in this list. Chris@0: * Chris@0: * @var array(int) Chris@0: */ Chris@0: public static $stringTokens = array( Chris@0: T_CONSTANT_ENCAPSED_STRING => T_CONSTANT_ENCAPSED_STRING, Chris@0: T_DOUBLE_QUOTED_STRING => T_DOUBLE_QUOTED_STRING, Chris@0: ); Chris@0: Chris@0: /** Chris@0: * Tokens that represent brackets and parenthesis. Chris@0: * Chris@0: * @var array(int) Chris@0: */ Chris@0: public static $bracketTokens = array( Chris@0: T_OPEN_CURLY_BRACKET => T_OPEN_CURLY_BRACKET, Chris@0: T_CLOSE_CURLY_BRACKET => T_CLOSE_CURLY_BRACKET, Chris@0: T_OPEN_SQUARE_BRACKET => T_OPEN_SQUARE_BRACKET, Chris@0: T_CLOSE_SQUARE_BRACKET => T_CLOSE_SQUARE_BRACKET, Chris@0: T_OPEN_PARENTHESIS => T_OPEN_PARENTHESIS, Chris@0: T_CLOSE_PARENTHESIS => T_CLOSE_PARENTHESIS, Chris@0: ); Chris@0: Chris@0: /** Chris@0: * Tokens that include files. Chris@0: * Chris@0: * @var array(int) Chris@0: */ Chris@0: public static $includeTokens = array( Chris@0: T_REQUIRE_ONCE => T_REQUIRE_ONCE, Chris@0: T_REQUIRE => T_REQUIRE, Chris@0: T_INCLUDE_ONCE => T_INCLUDE_ONCE, Chris@0: T_INCLUDE => T_INCLUDE, Chris@0: ); Chris@0: Chris@0: /** Chris@0: * Tokens that make up a heredoc string. Chris@0: * Chris@0: * @var array(int) Chris@0: */ Chris@0: public static $heredocTokens = array( Chris@0: T_START_HEREDOC => T_START_HEREDOC, Chris@0: T_END_HEREDOC => T_END_HEREDOC, Chris@0: T_HEREDOC => T_HEREDOC, Chris@0: T_START_NOWDOC => T_START_NOWDOC, Chris@0: T_END_NOWDOC => T_END_NOWDOC, Chris@0: T_NOWDOC => T_NOWDOC, Chris@0: ); Chris@0: Chris@0: /** Chris@0: * Tokens that represent the names of called functions. Chris@0: * Chris@0: * Mostly, these are just strings. But PHP tokeizes some language Chris@0: * constructs and functions using their own tokens. Chris@0: * Chris@0: * @var array(int) Chris@0: */ Chris@0: public static $functionNameTokens = array( Chris@0: T_STRING => T_STRING, Chris@0: T_EVAL => T_EVAL, Chris@0: T_EXIT => T_EXIT, Chris@0: T_INCLUDE => T_INCLUDE, Chris@0: T_INCLUDE_ONCE => T_INCLUDE_ONCE, Chris@0: T_REQUIRE => T_REQUIRE, Chris@0: T_REQUIRE_ONCE => T_REQUIRE_ONCE, Chris@0: T_ISSET => T_ISSET, Chris@0: T_UNSET => T_UNSET, Chris@0: T_EMPTY => T_EMPTY, Chris@0: ); Chris@0: Chris@0: Chris@0: /** Chris@0: * A PHP_CodeSniffer_Tokens class cannot be constructed. Chris@0: * Chris@0: * Only static calls are allowed. Chris@0: */ Chris@0: private function __construct() Chris@0: { Chris@0: Chris@0: }//end __construct() Chris@0: Chris@0: Chris@0: /** Chris@0: * Returns the highest weighted token type. Chris@0: * Chris@0: * Tokens are weighted by their approximate frequency of appearance in code Chris@0: * - the less frequently they appear in the code, the higher the weighting. Chris@0: * For example T_CLASS tokens appear very infrequently in a file, and Chris@0: * therefore have a high weighting. Chris@0: * Chris@0: * Returns false if there are no weightings for any of the specified tokens. Chris@0: * Chris@0: * @param array(int) $tokens The token types to get the highest weighted Chris@0: * type for. Chris@0: * Chris@0: * @return int The highest weighted token. Chris@0: */ Chris@0: public static function getHighestWeightedToken(array $tokens) Chris@0: { Chris@0: $highest = -1; Chris@0: $highestType = false; Chris@0: Chris@0: $weights = self::$weightings; Chris@0: Chris@0: foreach ($tokens as $token) { Chris@0: if (isset($weights[$token]) === true) { Chris@0: $weight = $weights[$token]; Chris@0: } else { Chris@0: $weight = 0; Chris@0: } Chris@0: Chris@0: if ($weight > $highest) { Chris@0: $highest = $weight; Chris@0: $highestType = $token; Chris@0: } Chris@0: } Chris@0: Chris@0: return $highestType; Chris@0: Chris@0: }//end getHighestWeightedToken() Chris@0: Chris@0: Chris@0: }//end class