From 26c4f12a21170f3001c228f4394b16411a4b4ac1 Mon Sep 17 00:00:00 2001 From: Joshua Spence Date: Thu, 21 May 2015 15:06:04 +1000 Subject: [PATCH] Allow getXHPASTTreeForPath to return the tree for an arbitrary path Summary: This allows `ArcanistBaseXHPASTLinter::getXHPASTTreeForPath` to return the parse tree for a file that wasn't explicitly linted. In my particular use case, I am writing a linter rule to determine if it is necessary to import a PHP file with `require_once` (i.e. the file consists only of class/interface definitions which are autoloadable). Test Plan: Tested externally using a custom linter. Reviewers: #blessed_reviewers, epriestley Reviewed By: #blessed_reviewers, epriestley Subscribers: Korvin, epriestley Differential Revision: https://secure.phabricator.com/D12271 --- src/lint/linter/ArcanistBaseXHPASTLinter.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lint/linter/ArcanistBaseXHPASTLinter.php b/src/lint/linter/ArcanistBaseXHPASTLinter.php index 47aa74cc..c420738e 100644 --- a/src/lint/linter/ArcanistBaseXHPASTLinter.php +++ b/src/lint/linter/ArcanistBaseXHPASTLinter.php @@ -157,7 +157,6 @@ abstract class ArcanistBaseXHPASTLinter extends ArcanistFutureLinter { * @task sharing */ final protected function getXHPASTTreeForPath($path) { - // If we aren't the linter responsible for actually building the parse // trees, go get the tree from that linter. if ($this->getXHPASTLinter() !== $this) { @@ -165,7 +164,12 @@ abstract class ArcanistBaseXHPASTLinter extends ArcanistFutureLinter { } if (!array_key_exists($path, $this->trees)) { + if (!array_key_exists($path, $this->futures)) { + return; + } + $this->trees[$path] = null; + try { $this->trees[$path] = XHPASTTree::newFromDataAndResolvedExecFuture( $this->getData($path),