From 1d72cfc94421fa1cc1bf88ba124bb55beb6ba6c3 Mon Sep 17 00:00:00 2001 From: Joshua Spence Date: Wed, 20 May 2015 09:16:36 +1000 Subject: [PATCH] Provide a getProjectRoot method for ArcanistLinter Summary: Adds a `getProjectRoot()` method to the `ArcanistLinter` class, simplifying a bunch of code. Test Plan: `arc unit` Reviewers: #blessed_reviewers, epriestley Reviewed By: #blessed_reviewers, epriestley Subscribers: Korvin, epriestley Differential Revision: https://secure.phabricator.com/D12474 --- src/lint/linter/ArcanistExternalLinter.php | 8 +++----- src/lint/linter/ArcanistLinter.php | 20 ++++++++++++++++++- .../linter/ArcanistScriptAndRegexLinter.php | 2 +- src/lint/linter/ArcanistSpellingLinter.php | 2 +- 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/lint/linter/ArcanistExternalLinter.php b/src/lint/linter/ArcanistExternalLinter.php index 418a434a..83586081 100644 --- a/src/lint/linter/ArcanistExternalLinter.php +++ b/src/lint/linter/ArcanistExternalLinter.php @@ -339,7 +339,7 @@ abstract class ArcanistExternalLinter extends ArcanistFutureLinter { $path_argument = $this->getPathArgumentForLinterFuture($disk_path); $future = new ExecFuture('%C %C', $bin, $path_argument); - $future->setCWD($this->getEngine()->getWorkingCopy()->getProjectRoot()); + $future->setCWD($this->getProjectRoot()); $futures[$path] = $future; } @@ -407,8 +407,7 @@ abstract class ArcanistExternalLinter extends ArcanistFutureLinter { public function setLinterConfigurationValue($key, $value) { switch ($key) { case 'interpreter': - $working_copy = $this->getEngine()->getWorkingCopy(); - $root = $working_copy->getProjectRoot(); + $root = $this->getProjectRoot(); foreach ((array)$value as $path) { if (Filesystem::binaryExists($path)) { @@ -429,8 +428,7 @@ abstract class ArcanistExternalLinter extends ArcanistFutureLinter { case 'bin': $is_script = $this->shouldUseInterpreter(); - $working_copy = $this->getEngine()->getWorkingCopy(); - $root = $working_copy->getProjectRoot(); + $root = $this->getProjectRoot(); foreach ((array)$value as $path) { if (!$is_script && Filesystem::binaryExists($path)) { diff --git a/src/lint/linter/ArcanistLinter.php b/src/lint/linter/ArcanistLinter.php index aae1fbbd..b7def163 100644 --- a/src/lint/linter/ArcanistLinter.php +++ b/src/lint/linter/ArcanistLinter.php @@ -248,6 +248,24 @@ abstract class ArcanistLinter { return $this; } + final public function getProjectRoot() { + $engine = $this->getEngine(); + if (!$engine) { + throw new Exception( + pht( + 'You must call %s before you can call %s.', + 'setEngine()', + __FUNCTION__.'()')); + } + + $working_copy = $engine->getWorkingCopy(); + if (!$working_copy) { + return null; + } + + return $working_copy->getProjectRoot(); + } + final public function getOtherLocation($offset, $path = null) { if ($path === null) { $path = $this->getActivePath(); @@ -386,7 +404,7 @@ abstract class ArcanistLinter { } final protected function addLintMessage(ArcanistLintMessage $message) { - $root = $this->getEngine()->getWorkingCopy()->getProjectRoot(); + $root = $this->getProjectRoot(); $path = Filesystem::resolvePath($message->getPath(), $root); $message->setPath(Filesystem::readablePath($path, $root)); diff --git a/src/lint/linter/ArcanistScriptAndRegexLinter.php b/src/lint/linter/ArcanistScriptAndRegexLinter.php index 8e8a1f5c..af2ebb95 100644 --- a/src/lint/linter/ArcanistScriptAndRegexLinter.php +++ b/src/lint/linter/ArcanistScriptAndRegexLinter.php @@ -180,7 +180,7 @@ final class ArcanistScriptAndRegexLinter extends ArcanistLinter { */ public function willLintPaths(array $paths) { $script = $this->getConfiguredScript(); - $root = $this->getEngine()->getWorkingCopy()->getProjectRoot(); + $root = $this->getProjectRoot(); $futures = array(); foreach ($paths as $path) { diff --git a/src/lint/linter/ArcanistSpellingLinter.php b/src/lint/linter/ArcanistSpellingLinter.php index d22e67fb..f27bc906 100644 --- a/src/lint/linter/ArcanistSpellingLinter.php +++ b/src/lint/linter/ArcanistSpellingLinter.php @@ -54,7 +54,7 @@ final class ArcanistSpellingLinter extends ArcanistLinter { } public function loadDictionary($path) { - $root = $this->getEngine()->getWorkingCopy()->getProjectRoot(); + $root = $this->getProjectRoot(); $path = Filesystem::resolvePath($path, $root); $dict = phutil_json_decode(Filesystem::readFile($path));