PluginProbe
WPIDE – File Manager & Code Editor / 3.5.9
WPIDE – File Manager & Code Editor v3.5.9
3.5.9 3.5.8 3.5.7 2.0.14 2.0.15 2.0.16 2.0.2 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1 2.2 2.3 2.3.1 2.3.2 2.4.0 2.5 2.6 3.0 3.1 3.2 3.3 All 55 releases
wpide / vendor / nikic / php-parser / lib / PhpParser / Error.php

Error.php in WPIDE – File Manager & Code Editor 3.5.9, at vendor/nikic/php-parser/lib/PhpParser/Error.php

181 lines 4.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php declare(strict_types=1);
2
3 namespace PhpParser;
4
5 class Error extends \RuntimeException
6 {
7 protected $rawMessage;
8 protected $attributes;
9
10 /**
11 * Creates an Exception signifying a parse error.
12 *
13 * @param string $message Error message
14 * @param array|int $attributes Attributes of node/token where error occurred
15 * (or start line of error -- deprecated)
16 */
17 public function __construct(string $message, $attributes = []) {
18 $this->rawMessage = $message;
19 if (is_array($attributes)) {
20 $this->attributes = $attributes;
21 } else {
22 $this->attributes = ['startLine' => $attributes];
23 }
24 $this->updateMessage();
25 }
26
27 /**
28 * Gets the error message
29 *
30 * @return string Error message
31 */
32 public function getRawMessage() : string {
33 return $this->rawMessage;
34 }
35
36 /**
37 * Gets the line the error starts in.
38 *
39 * @return int Error start line
40 */
41 public function getStartLine() : int {
42 return $this->attributes['startLine'] ?? -1;
43 }
44
45 /**
46 * Gets the line the error ends in.
47 *
48 * @return int Error end line
49 */
50 public function getEndLine() : int {
51 return $this->attributes['endLine'] ?? -1;
52 }
53
54 /**
55 * Gets the attributes of the node/token the error occurred at.
56 *
57 * @return array
58 */
59 public function getAttributes() : array {
60 return $this->attributes;
61 }
62
63 /**
64 * Sets the attributes of the node/token the error occurred at.
65 *
66 * @param array $attributes
67 */
68 public function setAttributes(array $attributes) {
69 $this->attributes = $attributes;
70 $this->updateMessage();
71 }
72
73 /**
74 * Sets the line of the PHP file the error occurred in.
75 *
76 * @param string $message Error message
77 */
78 public function setRawMessage(string $message) {
79 $this->rawMessage = $message;
80 $this->updateMessage();
81 }
82
83 /**
84 * Sets the line the error starts in.
85 *
86 * @param int $line Error start line
87 */
88 public function setStartLine(int $line) {
89 $this->attributes['startLine'] = $line;
90 $this->updateMessage();
91 }
92
93 /**
94 * Returns whether the error has start and end column information.
95 *
96 * For column information enable the startFilePos and endFilePos in the lexer options.
97 *
98 * @return bool
99 */
100 public function hasColumnInfo() : bool {
101 return isset($this->attributes['startFilePos'], $this->attributes['endFilePos']);
102 }
103
104 /**
105 * Gets the start column (1-based) into the line where the error started.
106 *
107 * @param string $code Source code of the file
108 * @return int
109 */
110 public function getStartColumn(string $code) : int {
111 if (!$this->hasColumnInfo()) {
112 throw new \RuntimeException('Error does not have column information');
113 }
114
115 return $this->toColumn($code, $this->attributes['startFilePos']);
116 }
117
118 /**
119 * Gets the end column (1-based) into the line where the error ended.
120 *
121 * @param string $code Source code of the file
122 * @return int
123 */
124 public function getEndColumn(string $code) : int {
125 if (!$this->hasColumnInfo()) {
126 throw new \RuntimeException('Error does not have column information');
127 }
128
129 return $this->toColumn($code, $this->attributes['endFilePos']);
130 }
131
132 /**
133 * Formats message including line and column information.
134 *
135 * @param string $code Source code associated with the error, for calculation of the columns
136 *
137 * @return string Formatted message
138 */
139 public function getMessageWithColumnInfo(string $code) : string {
140 return sprintf(
141 '%s from %d:%d to %d:%d', $this->getRawMessage(),
142 $this->getStartLine(), $this->getStartColumn($code),
143 $this->getEndLine(), $this->getEndColumn($code)
144 );
145 }
146
147 /**
148 * Converts a file offset into a column.
149 *
150 * @param string $code Source code that $pos indexes into
151 * @param int $pos 0-based position in $code
152 *
153 * @return int 1-based column (relative to start of line)
154 */
155 private function toColumn(string $code, int $pos) : int {
156 if ($pos > strlen($code)) {
157 throw new \RuntimeException('Invalid position information');
158 }
159
160 $lineStartPos = strrpos($code, "\n", $pos - strlen($code));
161 if (false === $lineStartPos) {
162 $lineStartPos = -1;
163 }
164
165 return $pos - $lineStartPos;
166 }
167
168 /**
169 * Updates the exception message after a change to rawMessage or rawLine.
170 */
171 protected function updateMessage() {
172 $this->message = $this->rawMessage;
173
174 if (-1 === $this->getStartLine()) {
175 $this->message .= ' on unknown line';
176 } else {
177 $this->message .= ' on line ' . $this->getStartLine();
178 }
179 }
180 }
181