![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/phpcsstandards/phpcsutils/PHPCSUtils/Utils/ |
<?php /** * PHPCSUtils, utility functions and classes for PHP_CodeSniffer sniff developers. * * @package PHPCSUtils * @copyright 2019-2020 PHPCSUtils Contributors * @license https://opensource.org/licenses/LGPL-3.0 LGPL3 * @link https://github.com/PHPCSStandards/PHPCSUtils */ namespace PHPCSUtils\Utils; use PHP_CodeSniffer\Files\File; /** * Utility functions for use when examining token conditions. * * @since 1.0.0 The `Conditions::getCondition()` and `Conditions::hasCondition()` * methods are based on and inspired by the methods of the same name in the * PHPCS native `PHP_CodeSniffer\Files\File` class. * Also see {@see \PHPCSUtils\BackCompat\BCFile}. */ final class Conditions { /** * Retrieve the position of a condition for the passed token. * * If no types are specified, the first condition for the token - or if `$first=false`, * the last condition - will be returned. * * Main differences with the PHPCS version: * - The singular `$type` parameter has become the more flexible `$types` parameter allowing to * search for several types of conditions in one go. * - The `$types` parameter is now optional. * * @see \PHP_CodeSniffer\Files\File::getCondition() Original source. * @see \PHPCSUtils\BackCompat\BCFile::getCondition() Cross-version compatible version of the original. * * @since 1.0.0 * * @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned. * @param int $stackPtr The position of the token we are checking. * @param int|string|array<int|string> $types Optional. The type(s) of tokens to search for. * @param bool $first Optional. Whether to search for the first (outermost) * (`true`) or the last (innermost) condition (`false`) of * the specified type(s). * * @return int|false Integer stack pointer to the condition; or `FALSE` if the token * does not have the condition or has no conditions at all. */ public static function getCondition(File $phpcsFile, $stackPtr, $types = [], $first = true) { $tokens = $phpcsFile->getTokens(); // Check for the existence of the token. if (isset($tokens[$stackPtr]) === false) { return false; } // Make sure the token has conditions. if (empty($tokens[$stackPtr]['conditions'])) { return false; } $types = (array) $types; $conditions = $tokens[$stackPtr]['conditions']; if (empty($types) === true) { // No types specified, just return the first/last condition pointer. if ($first === false) { \end($conditions); } else { \reset($conditions); } return \key($conditions); } if ($first === false) { $conditions = \array_reverse($conditions, true); } foreach ($conditions as $ptr => $type) { if (isset($tokens[$ptr]) === true && \in_array($type, $types, true) === true ) { // We found a token with the required type. return $ptr; } } return false; } /** * Determine if the passed token has a condition of one of the passed types. * * This method is not significantly different from the PHPCS native version. * * @see \PHP_CodeSniffer\Files\File::hasCondition() Original source. * @see \PHPCSUtils\BackCompat\BCFile::hasCondition() Cross-version compatible version of the original. * * @since 1.0.0 * * @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned. * @param int $stackPtr The position of the token we are checking. * @param int|string|array<int|string> $types The type(s) of tokens to search for. * * @return bool */ public static function hasCondition(File $phpcsFile, $stackPtr, $types) { return (self::getCondition($phpcsFile, $stackPtr, $types) !== false); } /** * Return the position of the first (outermost) condition of a certain type for the passed token. * * If no types are specified, the first condition for the token, independently of type, * will be returned. * * @since 1.0.0 * * @param \PHP_CodeSniffer\Files\File $phpcsFile The file where this token was found. * @param int $stackPtr The position of the token we are checking. * @param int|string|array<int|string> $types Optional. The type(s) of tokens to search for. * * @return int|false Integer stack pointer to the condition; or `FALSE` if the token * does not have the condition or has no conditions at all. */ public static function getFirstCondition(File $phpcsFile, $stackPtr, $types = []) { return self::getCondition($phpcsFile, $stackPtr, $types, true); } /** * Return the position of the last (innermost) condition of a certain type for the passed token. * * If no types are specified, the last condition for the token, independently of type, * will be returned. * * @since 1.0.0 * * @param \PHP_CodeSniffer\Files\File $phpcsFile The file where this token was found. * @param int $stackPtr The position of the token we are checking. * @param int|string|array<int|string> $types Optional. The type(s) of tokens to search for. * * @return int|false Integer stack pointer to the condition; or `FALSE` if the token * does not have the condition or has no conditions at all. */ public static function getLastCondition(File $phpcsFile, $stackPtr, $types = []) { return self::getCondition($phpcsFile, $stackPtr, $types, false); } }