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; }