-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathSyntaxError.php
124 lines (109 loc) · 3.41 KB
/
SyntaxError.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?php
namespace PHP_Parallel_Lint\PhpParallelLint\Errors;
use PHP_Parallel_Lint\PhpParallelLint\Blame;
class SyntaxError extends ParallelLintError
{
/** @var Blame */
private $blame;
/**
* @return int|null
*/
public function getLine()
{
preg_match('~on line ([0-9]+)$~', $this->message, $matches);
if ($matches && isset($matches[1])) {
return (int) $matches[1];
}
return null;
}
/**
* @param bool $translateTokens
* @return mixed|string
*/
public function getNormalizedMessage($translateTokens = false)
{
$message = preg_replace('~^(Parse|Fatal) error: (syntax error, )?~', '', $this->message);
$message = preg_replace('~ in ' . preg_quote(basename($this->filePath)) . ' on line [0-9]+$~', '', $message);
$message = ucfirst($message);
if ($translateTokens) {
$message = $this->translateTokens($message);
}
return $message;
}
/**
* @param Blame $blame
*/
public function setBlame(Blame $blame)
{
$this->blame = $blame;
}
/**
* @return Blame
*/
public function getBlame()
{
return $this->blame;
}
/**
* @param string $message
* @return string
*/
protected function translateTokens($message)
{
static $translateTokens = array(
'T_FILE' => '__FILE__',
'T_FUNC_C' => '__FUNCTION__',
'T_HALT_COMPILER' => '__halt_compiler()',
'T_INC' => '++',
'T_IS_EQUAL' => '==',
'T_IS_GREATER_OR_EQUAL' => '>=',
'T_IS_IDENTICAL' => '===',
'T_IS_NOT_IDENTICAL' => '!==',
'T_IS_SMALLER_OR_EQUAL' => '<=',
'T_LINE' => '__LINE__',
'T_METHOD_C' => '__METHOD__',
'T_MINUS_EQUAL' => '-=',
'T_MOD_EQUAL' => '%=',
'T_MUL_EQUAL' => '*=',
'T_NS_C' => '__NAMESPACE__',
'T_NS_SEPARATOR' => '\\',
'T_OBJECT_OPERATOR' => '->',
'T_OR_EQUAL' => '|=',
'T_PAAMAYIM_NEKUDOTAYIM' => '::',
'T_PLUS_EQUAL' => '+=',
'T_SL' => '<<',
'T_SL_EQUAL' => '<<=',
'T_SR' => '>>',
'T_SR_EQUAL' => '>>=',
'T_START_HEREDOC' => '<<<',
'T_XOR_EQUAL' => '^=',
'T_ECHO' => 'echo'
);
return preg_replace_callback('~(?<!\()T_([A-Z_]*)(?!\))~', function ($matches) use ($translateTokens) {
list($tokenName) = $matches;
if (isset($translateTokens[$tokenName])) {
$operator = $translateTokens[$tokenName];
return "$operator ($tokenName)";
}
return $tokenName;
}, $message);
}
/**
* (PHP 5 >= 5.4.0)<br/>
* Specify data which should be serialized to JSON
* @link http://php.net/manual/en/jsonserializable.jsonserialize.php
* @return mixed data which can be serialized by <b>json_encode</b>,
* which is a value of any type other than a resource.
*/
public function jsonSerialize()
{
return array(
'type' => 'syntaxError',
'file' => $this->getFilePath(),
'line' => $this->getLine(),
'message' => $this->getMessage(),
'normalizeMessage' => $this->getNormalizedMessage(),
'blame' => $this->blame,
);
}
}