/** * {@inheritdoc} */ public function process(Tokens $tokens, Token $token, $index) { if (!$token->equals('?')) { return; } $prevIndex = $tokens->getPrevMeaningfulToken($index); $prevToken = $tokens[$prevIndex]; if ($prevToken->equalsAny(array('(', ',', array(CT::T_TYPE_COLON)))) { $token->override(array(CT::T_NULLABLE_TYPE, '?')); } }
/** * {@inheritdoc} */ public function process(Tokens $tokens, Token $token, $index) { if (!$token->equals('|')) { return; } $prevIndex = $tokens->getPrevMeaningfulToken($index); $prevToken = $tokens[$prevIndex]; if (!$prevToken->isGivenKind(T_STRING)) { return; } $prevIndex = $tokens->getPrevMeaningfulToken($prevIndex); $prevToken = $tokens[$prevIndex]; if (!$prevToken->equalsAny(array('(', array(CT::T_TYPE_ALTERNATION)))) { return; } $token->override(array(CT::T_TYPE_ALTERNATION, '|')); }
/** * {@inheritdoc} */ public function process(Tokens $tokens, Token $token, $index) { if (!$token->equals(':')) { return; } $endIndex = $tokens->getPrevMeaningfulToken($index); if (!$tokens[$endIndex]->equals(')')) { return; } $startIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $endIndex, false); $prevIndex = $tokens->getPrevMeaningfulToken($startIndex); $prevToken = $tokens[$prevIndex]; // if this could be a function name we need to take one more step if ($prevToken->isGivenKind(T_STRING)) { $prevIndex = $tokens->getPrevMeaningfulToken($prevIndex); $prevToken = $tokens[$prevIndex]; } if ($prevToken->isGivenKind(array(T_FUNCTION, CT::T_RETURN_REF, CT::T_USE_LAMBDA))) { $token->override(array(CT::T_TYPE_COLON, ':')); } }
private function fixByToken(Token $token, $index) { foreach ($this->tokenKindCallbackMap as $kind => $callback) { if (!$token->isGivenKind($kind)) { continue; } $this->{$callback}($index); return; } foreach ($this->tokenEqualsMap as $equals => $callback) { if (!$token->equals($equals)) { continue; } $this->{$callback}($index); } }
private function transformIntoDynamicVarBraces(Tokens $tokens, Token $token, $index) { if (!$token->equals('$')) { return; } $openIndex = $tokens->getNextMeaningfulToken($index); if (null === $openIndex) { return; } $openToken = $tokens[$openIndex]; if (!$openToken->equals('{')) { return; } $closeIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $openIndex); $closeToken = $tokens[$closeIndex]; $openToken->override(array(CT_DYNAMIC_VAR_BRACE_OPEN, '{')); $closeToken->override(array(CT_DYNAMIC_VAR_BRACE_CLOSE, '}')); }
private function transformIntoGroupUseBraces(Tokens $tokens, Token $token, $index) { if (!$token->equals('{')) { return; } $prevIndex = $tokens->getPrevMeaningfulToken($index); if (!$tokens[$prevIndex]->isGivenKind(T_NS_SEPARATOR)) { return; } $closeIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); $closeToken = $tokens[$closeIndex]; $token->override(array(CT::T_GROUP_IMPORT_BRACE_OPEN, '{')); $closeToken->override(array(CT::T_GROUP_IMPORT_BRACE_CLOSE, '}')); }
/** * Detect type of block. * * @param Token $token token * * @return null|array array with 'type' and 'isStart' keys or null if not found */ public static function detectBlockType(Token $token) { foreach (self::getBlockEdgeDefinitions() as $type => $definition) { if ($token->equals($definition['start'])) { return array('type' => $type, 'isStart' => true); } if ($token->equals($definition['end'])) { return array('type' => $type, 'isStart' => false); } } }
/** * @dataProvider provideEquals */ public function testEquals(Token $token, $equals, $other, $caseSensitive = true) { $this->assertSame($equals, $token->equals($other, $caseSensitive)); }
private function transformIntoCurlyIndexBraces(Tokens $tokens, Token $token, $index) { if (!$token->equals('{')) { return; } $prevIndex = $tokens->getPrevMeaningfulToken($index); if (!$tokens[$prevIndex]->equalsAny(array(array(T_STRING), array(T_VARIABLE), array(CT_ARRAY_INDEX_CURLY_BRACE_CLOSE), array(CT_ARRAY_SQUARE_BRACE_CLOSE), ']', ')'))) { return; } if ($tokens[$prevIndex]->isGivenKind(T_STRING) && !$tokens[$tokens->getPrevMeaningfulToken($prevIndex)]->isGivenKind(T_OBJECT_OPERATOR)) { return; } if ($tokens[$prevIndex]->equals(')') && !$tokens[$tokens->getPrevMeaningfulToken($tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $prevIndex, false))]->isGivenKind(T_ARRAY)) { return; } $closeIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); $closeToken = $tokens[$closeIndex]; $token->override(array(CT_ARRAY_INDEX_CURLY_BRACE_OPEN, '{')); $closeToken->override(array(CT_ARRAY_INDEX_CURLY_BRACE_CLOSE, '}')); }
/** * {@inheritdoc} */ public function process(Tokens $tokens, Token $token, $index) { if ($token->equals('&') && $tokens[$tokens->getPrevMeaningfulToken($index)]->isGivenKind(T_FUNCTION)) { $token->override(array(CT_RETURN_REF, '&')); } }