You are here

abstract class PHP_TokenWithScope in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/phpunit/php-token-stream/src/Token.php \PHP_TokenWithScope

Hierarchy

Expanded class hierarchy of PHP_TokenWithScope

File

vendor/phpunit/php-token-stream/src/Token.php, line 75

View source
abstract class PHP_TokenWithScope extends PHP_Token {

  /**
   * @var integer
   */
  protected $endTokenId;

  /**
   * Get the docblock for this token
   *
   * This method will fetch the docblock belonging to the current token. The
   * docblock must be placed on the line directly above the token to be
   * recognized.
   *
   * @return string|null Returns the docblock as a string if found
   */
  public function getDocblock() {
    $tokens = $this->tokenStream
      ->tokens();
    $currentLineNumber = $tokens[$this->id]
      ->getLine();
    $prevLineNumber = $currentLineNumber - 1;
    for ($i = $this->id - 1; $i; $i--) {
      if (!isset($tokens[$i])) {
        return;
      }
      if ($tokens[$i] instanceof PHP_Token_FUNCTION || $tokens[$i] instanceof PHP_Token_CLASS || $tokens[$i] instanceof PHP_Token_TRAIT) {

        // Some other trait, class or function, no docblock can be
        // used for the current token
        break;
      }
      $line = $tokens[$i]
        ->getLine();
      if ($line == $currentLineNumber || $line == $prevLineNumber && $tokens[$i] instanceof PHP_Token_WHITESPACE) {
        continue;
      }
      if ($line < $currentLineNumber && !$tokens[$i] instanceof PHP_Token_DOC_COMMENT) {
        break;
      }
      return (string) $tokens[$i];
    }
  }

  /**
   * @return integer
   */
  public function getEndTokenId() {
    $block = 0;
    $i = $this->id;
    $tokens = $this->tokenStream
      ->tokens();
    while ($this->endTokenId === null && isset($tokens[$i])) {
      if ($tokens[$i] instanceof PHP_Token_OPEN_CURLY || $tokens[$i] instanceof PHP_Token_CURLY_OPEN) {
        $block++;
      }
      elseif ($tokens[$i] instanceof PHP_Token_CLOSE_CURLY) {
        $block--;
        if ($block === 0) {
          $this->endTokenId = $i;
        }
      }
      elseif (($this instanceof PHP_Token_FUNCTION || $this instanceof PHP_Token_NAMESPACE) && $tokens[$i] instanceof PHP_Token_SEMICOLON) {
        if ($block === 0) {
          $this->endTokenId = $i;
        }
      }
      $i++;
    }
    if ($this->endTokenId === null) {
      $this->endTokenId = $this->id;
    }
    return $this->endTokenId;
  }

  /**
   * @return integer
   */
  public function getEndLine() {
    return $this->tokenStream[$this
      ->getEndTokenId()]
      ->getLine();
  }

}

Members

Namesort descending Modifiers Type Description Overrides
PHP_Token::$id protected property
PHP_Token::$line protected property
PHP_Token::$text protected property
PHP_Token::$tokenStream protected property
PHP_Token::getLine public function
PHP_Token::__construct public function Constructor.
PHP_Token::__toString public function
PHP_TokenWithScope::$endTokenId protected property
PHP_TokenWithScope::getDocblock public function Get the docblock for this token
PHP_TokenWithScope::getEndLine public function
PHP_TokenWithScope::getEndTokenId public function