/**
  * {@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, '|'));
 }
Пример #3
0
 /**
  * {@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, '}'));
 }
Пример #6
0
 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, '}'));
 }
Пример #7
0
 /**
  * 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);
         }
     }
 }
Пример #8
0
 /**
  * @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, '&'));
     }
 }