diff --git a/src/lint/linter/ArcanistXHPASTLinter.php b/src/lint/linter/ArcanistXHPASTLinter.php index 04df53c0..1b65f6cf 100644 --- a/src/lint/linter/ArcanistXHPASTLinter.php +++ b/src/lint/linter/ArcanistXHPASTLinter.php @@ -384,9 +384,15 @@ final class ArcanistXHPASTLinter extends ArcanistBaseXHPASTLinter { continue; } - $function_name = $function - ->getChildOfType(0, 'n_SYMBOL_NAME') - ->getConcreteString(); + $function_token = $function + ->getChildByIndex(0); + + if ($function_token->getTypeName() != 'n_SYMBOL_NAME') { + // This may be `Class::method(...)` or `$var(...)`. + continue; + } + + $function_name = $function_token->getConcreteString(); switch ($function_name) { case 'class_exists': diff --git a/src/lint/linter/__tests__/xhpast/conditional-usage.lint-test b/src/lint/linter/__tests__/xhpast/conditional-usage.lint-test index 567d8dad..32dc71d9 100644 --- a/src/lint/linter/__tests__/xhpast/conditional-usage.lint-test +++ b/src/lint/linter/__tests__/xhpast/conditional-usage.lint-test @@ -11,6 +11,11 @@ if (class_exists('CURLFile')) { new CURLFile(''); new DateTimeImmutable(); } + +// These shouldn't fatal. +if (SomeClass::someStaticMethod($param)) {} +$var = 'some_func'; +if ($var()) {} ~~~~~~~~~~ error:5:3 error:7:3