mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-22 06:42:41 +01:00
Stop undeclared variable warning for $obj->{$prop} syntax
Summary: This isn't necessarily a root-cause solution but this syntax is really really bad. If we want to fix the root cause, I'd recommend making its use a lint error? Test Plan: Unit tests failed before patch, passed afterward. Reviewed By: aran Reviewers: jungejason, tuomaspelkonen, aran CC: aran Differential Revision: 270
This commit is contained in:
parent
23afdb99f0
commit
3edd525f83
2 changed files with 13 additions and 3 deletions
|
@ -405,7 +405,7 @@ class ArcanistXHPASTLinter extends ArcanistLinter {
|
||||||
// ($declarations).
|
// ($declarations).
|
||||||
|
|
||||||
foreach ($vars as $var) {
|
foreach ($vars as $var) {
|
||||||
$concrete = $var->getConcreteString();
|
$concrete = $this->getConcreteVariableString($var);
|
||||||
$declarations[$concrete] = min(
|
$declarations[$concrete] = min(
|
||||||
idx($declarations, $concrete, PHP_INT_MAX),
|
idx($declarations, $concrete, PHP_INT_MAX),
|
||||||
$var->getOffset());
|
$var->getOffset());
|
||||||
|
@ -445,7 +445,7 @@ class ArcanistXHPASTLinter extends ArcanistLinter {
|
||||||
// figure out.
|
// figure out.
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$concrete = $var->getConcreteString();
|
$concrete = $this->getConcreteVariableString($var);
|
||||||
if ($var->getOffset() >= idx($declarations, $concrete, PHP_INT_MAX)) {
|
if ($var->getOffset() >= idx($declarations, $concrete, PHP_INT_MAX)) {
|
||||||
// The use appears after the variable is declared, so it's fine.
|
// The use appears after the variable is declared, so it's fine.
|
||||||
continue;
|
continue;
|
||||||
|
@ -466,6 +466,13 @@ class ArcanistXHPASTLinter extends ArcanistLinter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getConcreteVariableString($var) {
|
||||||
|
$concrete = $var->getConcreteString();
|
||||||
|
// Strip off curly braces as in $obj->{$property}.
|
||||||
|
$concrete = trim($concrete, '{}');
|
||||||
|
return $concrete;
|
||||||
|
}
|
||||||
|
|
||||||
protected function lintPHPTagUse($root) {
|
protected function lintPHPTagUse($root) {
|
||||||
$tokens = $root->getTokens();
|
$tokens = $root->getTokens();
|
||||||
foreach ($tokens as $token) {
|
foreach ($tokens as $token) {
|
||||||
|
|
|
@ -155,7 +155,10 @@ class A {
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function arrow($o, $x) {
|
||||||
|
echo $o->{$x->{$x->{$x.$x->{$x}}.$x}};
|
||||||
|
}
|
||||||
|
|
||||||
~~~~~~~~~~
|
~~~~~~~~~~
|
||||||
error:30:3
|
error:30:3
|
||||||
|
|
Loading…
Reference in a new issue