mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-10 00:42:41 +01:00
Issue a warning if javelinsymbols
is not built
Summary: Currently, the Javelin linter fails completley if this binary is missing. However, it's hard to build and not critical so just issue a warning. Eventually we can document this better and make the build easier, but the current behavior is pretty unfriendly so make it smoother until the state of the world can be improved. Test Plan: Removed the binary and ran "arc lint --lintall" against multiple Javelin paths. Received one warning. Restored the binary and ran with "--trace", got no warnings and verified that the binary was running. Reviewed By: jungejason Reviewers: tuomaspelkonen, jungejason, aran, tomo CC: aran, jungejason Differential Revision: 265
This commit is contained in:
parent
c6beb7a4fb
commit
f36c852542
2 changed files with 43 additions and 5 deletions
|
@ -20,12 +20,25 @@ class PhabricatorJavelinLinter extends ArcanistLinter {
|
|||
|
||||
private $symbols = array();
|
||||
|
||||
private $haveSymbolsBinary;
|
||||
private $haveWarnedAboutBinary;
|
||||
|
||||
const LINT_PRIVATE_ACCESS = 1;
|
||||
const LINT_MISSING_DEPENDENCY = 2;
|
||||
const LINT_UNNECESSARY_DEPENDENCY = 3;
|
||||
const LINT_UNKNOWN_DEPENDENCY = 4;
|
||||
const LINT_MISSING_BINARY = 5;
|
||||
|
||||
public function willLintPaths(array $paths) {
|
||||
|
||||
if ($this->haveSymbolsBinary === null) {
|
||||
$binary = $this->getSymbolsBinaryPath();
|
||||
$this->haveSymbolsBinary = Filesystem::pathExists($binary);
|
||||
if (!$this->haveSymbolsBinary) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$futures = array();
|
||||
foreach ($paths as $path) {
|
||||
$future = $this->newSymbolsFuture($path);
|
||||
|
@ -42,7 +55,9 @@ class PhabricatorJavelinLinter extends ArcanistLinter {
|
|||
}
|
||||
|
||||
public function getLintSeverityMap() {
|
||||
return array();
|
||||
return array(
|
||||
self::LINT_MISSING_BINARY => ArcanistLintSeverity::SEVERITY_WARNING,
|
||||
);
|
||||
}
|
||||
|
||||
public function getLintNameMap() {
|
||||
|
@ -51,11 +66,28 @@ class PhabricatorJavelinLinter extends ArcanistLinter {
|
|||
self::LINT_MISSING_DEPENDENCY => 'Missing Javelin Dependency',
|
||||
self::LINT_UNNECESSARY_DEPENDENCY => 'Unnecessary Javelin Dependency',
|
||||
self::LINT_UNKNOWN_DEPENDENCY => 'Unknown Javelin Dependency',
|
||||
self::LINT_MISSING_BINARY => '`javelinsymbols` Binary Not Built',
|
||||
);
|
||||
}
|
||||
|
||||
public function lintPath($path) {
|
||||
|
||||
if (!$this->haveSymbolsBinary) {
|
||||
if (!$this->haveWarnedAboutBinary) {
|
||||
$this->haveWarnedAboutBinary = true;
|
||||
// TODO: Write build documentation for the Javelin binaries and point
|
||||
// the user at it.
|
||||
$this->raiseLintAtLine(
|
||||
0,
|
||||
0,
|
||||
self::LINT_MISSING_BINARY,
|
||||
"The 'javelinsymbols' binary in the Javelin project has not been ".
|
||||
"built, so the Javelin linter can't run. This isn't a big concern, ".
|
||||
"but means some Javelin problems can't be automatically detected.");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
list($uses, $installs) = $this->getUsedAndInstalledSymbolsForPath($path);
|
||||
foreach ($uses as $symbol => $line) {
|
||||
$parts = explode('.', $symbol);
|
||||
|
@ -153,16 +185,20 @@ class PhabricatorJavelinLinter extends ArcanistLinter {
|
|||
}
|
||||
|
||||
private function newSymbolsFuture($path) {
|
||||
$root = dirname(phutil_get_library_root('phabricator'));
|
||||
|
||||
$support = $root.'/externals/javelin/support';
|
||||
$javelinsymbols = $support.'/javelinsymbols/javelinsymbols';
|
||||
$javelinsymbols = $this->getSymbolsBinaryPath();
|
||||
|
||||
$future = new ExecFuture($javelinsymbols.' # '.escapeshellarg($path));
|
||||
$future->write($this->getData($path));
|
||||
return $future;
|
||||
}
|
||||
|
||||
private function getSymbolsBinaryPath() {
|
||||
$root = dirname(phutil_get_library_root('phabricator'));
|
||||
|
||||
$support = $root.'/externals/javelin/support';
|
||||
return $support.'/javelinsymbols/javelinsymbols';
|
||||
}
|
||||
|
||||
private function getUsedAndInstalledSymbolsForPath($path) {
|
||||
list($symbols) = $this->loadSymbols($path);
|
||||
|
||||
|
|
|
@ -7,9 +7,11 @@
|
|||
|
||||
|
||||
phutil_require_module('arcanist', 'lint/linter/base');
|
||||
phutil_require_module('arcanist', 'lint/severity');
|
||||
|
||||
phutil_require_module('phabricator', 'infrastructure/celerity/map');
|
||||
|
||||
phutil_require_module('phutil', 'filesystem');
|
||||
phutil_require_module('phutil', 'future');
|
||||
phutil_require_module('phutil', 'future/exec');
|
||||
phutil_require_module('phutil', 'moduleutils');
|
||||
|
|
Loading…
Reference in a new issue