a03085b556
Summary: Our linters assume that clang-format is installed at /mnt/vol/engshare/admin/scripts/clang-format and flint is installed at /home/engshare/tools/flint. This makes them fail on non-fb machines. This change will: * if clang-format is not on a specified path, it will try running generic clang-format. Linters will still fail if clang-format is not installed, but this shouldn't be a big issue, since it's pretty easy to install it. * flint will not be run if /home/engshare/tools/flint is not present Test Plan: Made a change on a mac machine. Ran `arc lint`. No failures observed. Reviewers: aekmekji, yhchiang Reviewed By: yhchiang Subscribers: dhruba, leveldb Differential Revision: https://reviews.facebook.net/D44031
59 lines
1.6 KiB
PHP
59 lines
1.6 KiB
PHP
<?php
|
|
// Copyright 2004-present Facebook. All Rights Reserved.
|
|
// This source code is licensed under the BSD-style license found in the
|
|
// LICENSE file in the root directory of this source tree. An additional grant
|
|
// of patent rights can be found in the PATENTS file in the same directory.
|
|
|
|
final class FbcodeClangFormatLinter extends BaseDirectoryScopedFormatLinter {
|
|
|
|
const LINT_FORMATTING = 1;
|
|
const CLANG_FORMAT_BINARY = '/mnt/vol/engshare/admin/scripts/clang-format';
|
|
|
|
protected function getPathsToLint() {
|
|
return array('');
|
|
}
|
|
|
|
public function getLinterName() {
|
|
return 'CLANG_FORMAT';
|
|
}
|
|
|
|
public function getLintSeverityMap() {
|
|
return array(
|
|
self::LINT_FORMATTING => ArcanistLintSeverity::SEVERITY_ADVICE,
|
|
);
|
|
}
|
|
|
|
public function getLintNameMap() {
|
|
return array(
|
|
self::LINT_FORMATTING => pht('Changes are not clang-formatted'),
|
|
);
|
|
}
|
|
|
|
protected function getFormatFuture($path, array $changed) {
|
|
$args = "";
|
|
foreach ($changed as $key => $value) {
|
|
$args .= " --lines=$key:$key";
|
|
}
|
|
|
|
$binary = self::CLANG_FORMAT_BINARY;
|
|
if (!file_exists($binary)) {
|
|
// trust the $PATH
|
|
$binary = "clang-format";
|
|
}
|
|
|
|
return new ExecFuture(
|
|
"%s %s $args",
|
|
$binary,
|
|
$this->getEngine()->getFilePathOnDisk($path));
|
|
}
|
|
|
|
protected function getLintMessage($diff) {
|
|
$link_to_clang_format =
|
|
"[[ http://fburl.com/clang-format | clang-format ]]";
|
|
return <<<LINT_MSG
|
|
Changes in this file were not formatted using $link_to_clang_format.
|
|
Please run build_tools/format-diff.sh or `make format`
|
|
LINT_MSG;
|
|
}
|
|
}
|