/** * {@inheritdoc} */ public function process(Tokens $tokens, Token $token, $index) { if ($token->isGivenKind(T_USE) && $this->isUseForLambda($tokens, $index)) { $token->override(array(CT_USE_LAMBDA, $token->getContent())); } if (!$token->isClassy()) { return; } $prevTokenIndex = $tokens->getPrevMeaningfulToken($index); $prevToken = $prevTokenIndex === null ? null : $tokens[$prevTokenIndex]; if ($prevToken->isGivenKind(T_DOUBLE_COLON)) { return; } // Skip whole class braces content. // That way we can skip whole tokens in class declaration, therefore skip `T_USE` for traits. $index = $tokens->getNextTokenOfKind($index, array('{')); $innerLimit = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); while ($index < $innerLimit) { $token = $tokens[++$index]; if (!$token->isGivenKind(T_USE)) { continue; } if ($this->isUseForLambda($tokens, $index)) { $token->override(array(CT_USE_LAMBDA, $token->getContent())); } else { $token->override(array(CT_USE_TRAIT, $token->getContent())); } } }
/** * Cleanup a whitespace token. * * @param Token $token */ private function fixWhitespace(Token $token) { $content = $token->getContent(); // if there is more than one new line in the whitespace, then we need to fix it if (substr_count($content, "\n") > 1) { // the final bit of the whitespace must be the next statement's indentation $lines = Utils::splitLines($content); $token->setContent("\n" . end($lines)); } }
/** * {@inheritdoc} */ public function process(Tokens $tokens, Token $token, $index) { if (!$token->isGivenKind(array(T_CONST, T_FUNCTION))) { return; } $prevToken = $tokens[$tokens->getPrevMeaningfulToken($index)]; if ($prevToken->isGivenKind(T_USE)) { $token->override(array($token->isGivenKind(T_FUNCTION) ? CT_FUNCTION_IMPORT : CT_CONST_IMPORT, $token->getContent())); } }
/** * {@inheritdoc} */ public function process(Tokens $tokens, Token $token, $index) { if (!$token->isGivenKind(T_ARRAY)) { return; } $nextIndex = $tokens->getNextMeaningfulToken($index); $nextToken = $tokens[$nextIndex]; if (!$nextToken->equals('(')) { $token->override(array(CT_ARRAY_TYPEHINT, $token->getContent())); } }
/** * {@inheritdoc} */ public function process(Tokens $tokens, Token $token, $index) { if (!$token->equalsAny(array(array(T_CLASS, 'class'), array(T_STRING, 'class')), false)) { return; } $prevIndex = $tokens->getPrevMeaningfulToken($index); $prevToken = $tokens[$prevIndex]; if ($prevToken->isGivenKind(T_DOUBLE_COLON)) { $token->override(array(CT::T_CLASS_CONSTANT, $token->getContent())); } }
/** * {@inheritdoc} */ public function process(Tokens $tokens, Token $token, $index) { if (!$token->isGivenKind(T_NAMESPACE)) { return; } $nextIndex = $tokens->getNextMeaningfulToken($index); $nextToken = $tokens[$nextIndex]; if ($nextToken->isGivenKind(T_NS_SEPARATOR)) { $token->override(array(CT::T_NAMESPACE_OPERATOR, $token->getContent())); } }
/** * {@inheritdoc} */ public function process(Tokens $tokens, Token $token, $index) { if (!$token->isGivenKind(T_CLASS)) { return; } $prevIndex = $tokens->getPrevMeaningfulToken($index); $prevToken = $tokens[$prevIndex]; if ($prevToken->isGivenKind(T_DOUBLE_COLON)) { $token->override(array(CT_CLASS_CONSTANT, $token->getContent())); } }
/** * {@inheritdoc} */ public function process(Tokens $tokens, Token $token, $index) { if (!$token->isComment()) { return; } $content = $token->getContent(); $trimmedContent = rtrim($content); // nothing trimmed, nothing to do if ($content === $trimmedContent) { return; } $whitespaces = substr($content, strlen($trimmedContent)); $token->setContent($trimmedContent); if (isset($tokens[$index + 1]) && $tokens[$index + 1]->isWhitespace()) { $tokens[$index + 1]->setContent($whitespaces . $tokens[$index + 1]->getContent()); } else { $tokens->insertAt($index + 1, new Token(array(T_WHITESPACE, $whitespaces))); } }
/** * Transforms the heredoc start token to nowdoc notation. * * @param Token $token */ private function convertToNowdoc(Token $token) { $token->setContent(preg_replace('/(?<=^<<<)"?(.*?)"?$/', '\'$1\'', $token->getContent())); }
/** * Checks variable assignments through `list()` calls for correct docblock usage. * * @param Tokens $tokens * @param Token $docsToken docs Token * @param int $listIndex index of variable Token * * @return bool */ private function isValidList(Tokens $tokens, Token $docsToken, $listIndex) { $endIndex = $tokens->getNextTokenOfKind($listIndex, array(')')); $docsContent = $docsToken->getContent(); for ($index = $listIndex + 1; $index < $endIndex; ++$index) { $token = $tokens[$index]; if ($token->isGivenKind(T_VARIABLE) && false !== strpos($docsContent, $token->getContent())) { return true; } } return false; }
private function fixWhitespace(Token $token) { if ($token->isWhitespace() && !$token->isWhitespace(" \t")) { $token->setContent(rtrim($token->getContent()) . ' '); } }
/** * Calculate the trailing whitespace no_tab_indentation. * * What we're doing here is grabbing everything after the final newline. * * @param Token $token * * @return string */ public static function calculateTrailingWhitespaceIndent(Token $token) { if (!$token->isWhitespace()) { throw new \InvalidArgumentException(sprintf('The given token must be whitespace, got "%s".', $token->getName())); } return ltrim(strrchr(str_replace(array("\r\n", "\r"), "\n", $token->getContent()), 10), "\n"); }
/** * Register token as found. * * @param Token|array|string $token token prototype */ private function registerFoundToken($token) { $tokenKind = $token instanceof Token ? $token->isArray() ? $token->getId() : $token->getContent() : (is_array($token) ? $token[0] : $token); $this->foundTokenKinds[$tokenKind] = true; }
/** * Checks variable assignments for correct docblock usage. * * @param Tokens $tokens * @param Token $docsToken docs Token * @param int $variableIndex index of variable Token * * @return bool */ private function isValidVariable(Tokens $tokens, Token $docsToken, $variableIndex) { $nextIndex = $tokens->getNextMeaningfulToken($variableIndex); if (!$tokens[$nextIndex]->equals('=')) { return false; } return false !== strpos($docsToken->getContent(), $tokens[$variableIndex]->getContent()); }
/** * Remove spaces from token at a given index. * * @param Token $token */ private function removeSpaceAroundToken(Token $token) { if ($token->isWhitespace() && false === strpos($token->getContent(), "\n")) { $token->clear(); } }