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).
|
||||
|
||||
foreach ($vars as $var) {
|
||||
$concrete = $var->getConcreteString();
|
||||
$concrete = $this->getConcreteVariableString($var);
|
||||
$declarations[$concrete] = min(
|
||||
idx($declarations, $concrete, PHP_INT_MAX),
|
||||
$var->getOffset());
|
||||
|
@ -445,7 +445,7 @@ class ArcanistXHPASTLinter extends ArcanistLinter {
|
|||
// figure out.
|
||||
continue;
|
||||
}
|
||||
$concrete = $var->getConcreteString();
|
||||
$concrete = $this->getConcreteVariableString($var);
|
||||
if ($var->getOffset() >= idx($declarations, $concrete, PHP_INT_MAX)) {
|
||||
// The use appears after the variable is declared, so it's fine.
|
||||
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) {
|
||||
$tokens = $root->getTokens();
|
||||
foreach ($tokens as $token) {
|
||||
|
|
|
@ -156,6 +156,9 @@ class A {
|
|||
}
|
||||
}
|
||||
|
||||
function arrow($o, $x) {
|
||||
echo $o->{$x->{$x->{$x.$x->{$x}}.$x}};
|
||||
}
|
||||
|
||||
~~~~~~~~~~
|
||||
error:30:3
|
||||
|
|
Loading…
Reference in a new issue