1
0
Fork 0
mirror of https://we.phorge.it/source/arcanist.git synced 2024-11-29 18:22:41 +01:00

Add hook after running linters

Summary: This resolves D4380#7 by reverting https://secure.phabricator.com/D4380?vs=9112&id=9123.

Test Plan: Used it in our linters.

Reviewers: epriestley

CC: aran, Korvin

Differential Revision: https://secure.phabricator.com/D4409
This commit is contained in:
vrana 2013-01-11 14:11:38 -08:00
parent 5c5d347544
commit ff73a90482
2 changed files with 59 additions and 48 deletions

View file

@ -188,8 +188,10 @@ abstract class ArcanistLintEngine {
} }
$this->cacheVersion = crc32(implode("\n", $versions)); $this->cacheVersion = crc32(implode("\n", $versions));
$linters_paths = array(); $stopped = array();
$exceptions = array();
foreach ($linters as $linter_name => $linter) { foreach ($linters as $linter_name => $linter) {
try {
$linter->setEngine($this); $linter->setEngine($this);
if (!$linter->canRun()) { if (!$linter->canRun()) {
continue; continue;
@ -202,6 +204,9 @@ abstract class ArcanistLintEngine {
// Make sure each path has a result generated, even if it is empty // Make sure each path has a result generated, even if it is empty
// (i.e., the file has no lint messages). // (i.e., the file has no lint messages).
$result = $this->getResultForPath($path); $result = $this->getResultForPath($path);
if (isset($stopped[$path])) {
unset($paths[$key]);
}
if (isset($this->cachedResults[$path][$this->cacheVersion])) { if (isset($this->cachedResults[$path][$this->cacheVersion])) {
if ($cache_granularity == ArcanistLinter::GRANULARITY_FILE) { if ($cache_granularity == ArcanistLinter::GRANULARITY_FILE) {
unset($paths[$key]); unset($paths[$key]);
@ -209,28 +214,29 @@ abstract class ArcanistLintEngine {
} }
} }
$paths = array_values($paths); $paths = array_values($paths);
$linters_paths[$linter_name] = $paths;
if ($paths) { if ($paths) {
$linter->willLintPaths($paths); $linter->willLintPaths($paths);
} foreach ($paths as $path) {
}
$stopped = array();
$exceptions = array();
foreach ($linters as $linter_name => $linter) {
try {
foreach ($linters_paths[$linter_name] as $path) {
if (isset($stopped[$path])) {
continue;
}
$linter->willLintPath($path); $linter->willLintPath($path);
$linter->lintPath($path); $linter->lintPath($path);
if ($linter->didStopAllLinters()) { if ($linter->didStopAllLinters()) {
$stopped[$path] = true; $stopped[$path] = true;
} }
} }
}
} catch (Exception $ex) {
if (!is_string($linter_name)) {
$linter_name = get_class($linter);
}
$exceptions[$linter_name] = $ex;
}
}
$this->didRunLinters($linters);
foreach ($linters as $linter) {
$minimum = $this->minimumSeverity; $minimum = $this->minimumSeverity;
foreach ($linter->getLintMessages() as $message) { foreach ($linter->getLintMessages() as $message) {
if (!ArcanistLintSeverity::isAtLeastAsSevere($message, $minimum)) { if (!ArcanistLintSeverity::isAtLeastAsSevere($message, $minimum)) {
@ -245,12 +251,6 @@ abstract class ArcanistLintEngine {
$result = $this->getResultForPath($message->getPath()); $result = $this->getResultForPath($message->getPath());
$result->addMessage($message); $result->addMessage($message);
} }
} catch (Exception $ex) {
if (!is_string($linter_name)) {
$linter_name = get_class($linter);
}
$exceptions[$linter_name] = $ex;
}
} }
if ($this->cachedResults) { if ($this->cachedResults) {
@ -305,6 +305,13 @@ abstract class ArcanistLintEngine {
abstract protected function buildLinters(); abstract protected function buildLinters();
protected function didRunLinters(array $linters) {
assert_instances_of($linters, 'ArcanistLinter');
foreach ($linters as $linter) {
$linter->didRunLinters();
}
}
private function isRelevantMessage(ArcanistLintMessage $message) { private function isRelevantMessage(ArcanistLintMessage $message) {
// When a user runs "arc lint", we default to raising only warnings on // When a user runs "arc lint", we default to raising only warnings on
// lines they have changed (errors are still raised anywhere in the // lines they have changed (errors are still raised anywhere in the

View file

@ -206,6 +206,10 @@ abstract class ArcanistLinter {
abstract public function lintPath($path); abstract public function lintPath($path);
abstract public function getLinterName(); abstract public function getLinterName();
public function didRunLinters() {
// This is a hook.
}
public function getLintSeverityMap() { public function getLintSeverityMap() {
return array(); return array();
} }