Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/nikic/php-parser/lib/PhpParser/Error.php
<?php declare(strict_types=1);

namespace
PhpParser;

class
Error extends \RuntimeException
{
    protected
$rawMessage;
    protected
$attributes;

   
/**
     * Creates an Exception signifying a parse error.
     *
     * @param string    $message    Error message
     * @param array|int $attributes Attributes of node/token where error occurred
     *                              (or start line of error -- deprecated)
     */
   
public function __construct(string $message, $attributes = []) {
       
$this->rawMessage = $message;
        if (
is_array($attributes)) {
           
$this->attributes = $attributes;
        } else {
           
$this->attributes = ['startLine' => $attributes];
        }
       
$this->updateMessage();
    }

   
/**
     * Gets the error message
     *
     * @return string Error message
     */
   
public function getRawMessage() : string {
        return
$this->rawMessage;
    }

   
/**
     * Gets the line the error starts in.
     *
     * @return int Error start line
     */
   
public function getStartLine() : int {
        return
$this->attributes['startLine'] ?? -1;
    }

   
/**
     * Gets the line the error ends in.
     *
     * @return int Error end line
     */
   
public function getEndLine() : int {
        return
$this->attributes['endLine'] ?? -1;
    }

   
/**
     * Gets the attributes of the node/token the error occurred at.
     *
     * @return array
     */
   
public function getAttributes() : array {
        return
$this->attributes;
    }

   
/**
     * Sets the attributes of the node/token the error occurred at.
     *
     * @param array $attributes
     */
   
public function setAttributes(array $attributes) {
       
$this->attributes = $attributes;
       
$this->updateMessage();
    }

   
/**
     * Sets the line of the PHP file the error occurred in.
     *
     * @param string $message Error message
     */
   
public function setRawMessage(string $message) {
       
$this->rawMessage = $message;
       
$this->updateMessage();
    }

   
/**
     * Sets the line the error starts in.
     *
     * @param int $line Error start line
     */
   
public function setStartLine(int $line) {
       
$this->attributes['startLine'] = $line;
       
$this->updateMessage();
    }

   
/**
     * Returns whether the error has start and end column information.
     *
     * For column information enable the startFilePos and endFilePos in the lexer options.
     *
     * @return bool
     */
   
public function hasColumnInfo() : bool {
        return isset(
$this->attributes['startFilePos'], $this->attributes['endFilePos']);
    }

   
/**
     * Gets the start column (1-based) into the line where the error started.
     *
     * @param string $code Source code of the file
     * @return int
     */
   
public function getStartColumn(string $code) : int {
        if (!
$this->hasColumnInfo()) {
            throw new \
RuntimeException('Error does not have column information');
        }

        return
$this->toColumn($code, $this->attributes['startFilePos']);
    }

   
/**
     * Gets the end column (1-based) into the line where the error ended.
     *
     * @param string $code Source code of the file
     * @return int
     */
   
public function getEndColumn(string $code) : int {
        if (!
$this->hasColumnInfo()) {
            throw new \
RuntimeException('Error does not have column information');
        }

        return
$this->toColumn($code, $this->attributes['endFilePos']);
    }

   
/**
     * Formats message including line and column information.
     *
     * @param string $code Source code associated with the error, for calculation of the columns
     *
     * @return string Formatted message
     */
   
public function getMessageWithColumnInfo(string $code) : string {
        return
sprintf(
           
'%s from %d:%d to %d:%d', $this->getRawMessage(),
           
$this->getStartLine(), $this->getStartColumn($code),
           
$this->getEndLine(), $this->getEndColumn($code)
        );
    }

   
/**
     * Converts a file offset into a column.
     *
     * @param string $code Source code that $pos indexes into
     * @param int    $pos  0-based position in $code
     *
     * @return int 1-based column (relative to start of line)
     */
   
private function toColumn(string $code, int $pos) : int {
        if (
$pos > strlen($code)) {
            throw new \
RuntimeException('Invalid position information');
        }

       
$lineStartPos = strrpos($code, "\n", $pos - strlen($code));
        if (
false === $lineStartPos) {
           
$lineStartPos = -1;
        }

        return
$pos - $lineStartPos;
    }

   
/**
     * Updates the exception message after a change to rawMessage or rawLine.
     */
   
protected function updateMessage() {
       
$this->message = $this->rawMessage;

        if (-
1 === $this->getStartLine()) {
           
$this->message .= ' on unknown line';
        } else {
           
$this->message .= ' on line ' . $this->getStartLine();
        }
    }
}