findPreviousEffective() public static method

public static findPreviousEffective ( PHP_CodeSniffer_File $phpcsFile, integer $startPointer, integer | null $endPointer = null ) : integer | null
$phpcsFile PHP_CodeSniffer_File
$startPointer integer search starts at this token, inclusive
$endPointer integer | null search ends at this token, exclusive
return integer | null
 /**
  * @param \PHP_CodeSniffer_File $phpcsFile
  * @param integer $stackPointer
  */
 public function process(PHP_CodeSniffer_File $phpcsFile, $stackPointer)
 {
     $tokens = $phpcsFile->getTokens();
     $arrayToken = $tokens[$stackPointer];
     $closeParenthesisPointer = $arrayToken['bracket_closer'];
     $openParenthesisToken = $tokens[$arrayToken['bracket_opener']];
     $closeParenthesisToken = $tokens[$closeParenthesisPointer];
     if ($openParenthesisToken['line'] === $closeParenthesisToken['line']) {
         return;
     }
     $previousToCloseParenthesisPointer = TokenHelper::findPreviousEffective($phpcsFile, $closeParenthesisPointer - 1);
     $previousToCloseParenthesisToken = $tokens[$previousToCloseParenthesisPointer];
     if ($previousToCloseParenthesisToken['code'] !== T_COMMA && $closeParenthesisToken['line'] !== $previousToCloseParenthesisToken['line']) {
         $fix = $phpcsFile->addFixableError('Multiline arrays must have a trailing comma after the last element', $previousToCloseParenthesisPointer, self::CODE_MISSING_TRAILING_COMMA);
         if ($fix) {
             $phpcsFile->fixer->beginChangeset();
             $phpcsFile->fixer->addContent($previousToCloseParenthesisPointer, ',');
             $phpcsFile->fixer->endChangeset();
         }
     }
 }
 /**
  * @param \PHP_CodeSniffer_File $phpcsFile
  * @param integer $startPointer
  * @return boolean
  */
 private static function isReferencedName(PHP_CodeSniffer_File $phpcsFile, $startPointer)
 {
     $tokens = $phpcsFile->getTokens();
     $previousPointer = TokenHelper::findPreviousEffective($phpcsFile, $startPointer - 1);
     $previousToken = $tokens[$previousPointer];
     $skipTokenCodes = [T_FUNCTION, T_AS, T_DOUBLE_COLON, T_OBJECT_OPERATOR, T_NAMESPACE, T_CONST];
     if ($previousToken['code'] === T_USE) {
         $classPointer = $phpcsFile->findPrevious(T_CLASS, $startPointer - 1);
         if ($classPointer !== false) {
             $tokens = $phpcsFile->getTokens();
             $classToken = $tokens[$classPointer];
             return $startPointer > $classToken['scope_opener'] && $startPointer < $classToken['scope_closer'];
         }
         return false;
     }
     return !in_array($previousToken['code'], array_merge($skipTokenCodes, TokenHelper::$typeKeywordTokenCodes), true);
 }
 /**
  * @param PHP_CodeSniffer_File $phpcsFile
  * @param mixed[] $tokens
  * @param integer $methodTokenPointer
  * @return integer|null
  */
 private function findVisibilityModifier(PHP_CodeSniffer_File $phpcsFile, array $tokens, $methodTokenPointer)
 {
     $visibilityModifiedTokenPointer = TokenHelper::findPreviousEffective($phpcsFile, $methodTokenPointer - 1);
     $visibilityModifiedToken = $tokens[$visibilityModifiedTokenPointer];
     if (in_array($visibilityModifiedToken['code'], [T_PUBLIC, T_PROTECTED, T_PRIVATE], true)) {
         return $visibilityModifiedToken['code'];
     } elseif (in_array($visibilityModifiedToken['code'], [T_ABSTRACT, T_STATIC], true)) {
         return $this->findVisibilityModifier($phpcsFile, $tokens, $visibilityModifiedTokenPointer);
     }
     return null;
 }