forked from OSchip/llvm-project
Use in-tree clang-format-diff.py as Arcanist linter
Summary: The only guarantee there seems to be in the clang-format packaging is that an executable called `clang-format` is in the PATH. Use the in-tree `clang-format-diff.py` to avoid assuming anything else. Also remove dead code for SVN repo and switch to `git diff-index` which is the git plumbing equivalent of `git diff` in this case. Reviewers: starsid, mehdi_amini, vitalybuka, fhahn, kadircet Subscribers: llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D77428
This commit is contained in:
parent
4faf05e5a3
commit
ad08ecbd16
|
@ -4,17 +4,23 @@ set -euo pipefail
|
|||
|
||||
# "script-and-regex.regex": "/^(?P<severity>.*?)\n(?P<message>.*?)\n(?P<line>\\d),(?P<char>\\d)(\n(?P<original>.*?)>>>>\n(?P<replacement>.*?)<<<<?)$/s",
|
||||
|
||||
# Arcanist linter that invokes clang-format.
|
||||
# Arcanist linter that invokes clang-format via clang/tools/clang-format/clang-format-diff.py
|
||||
# stdout from this script is parsed into a regex and used by Arcanist.
|
||||
# https://secure.phabricator.com/book/phabricator/article/arcanist_lint_script_and_regex/
|
||||
|
||||
# To skip running all linters when creating/updating a diff, use `arc diff --nolint`.
|
||||
|
||||
if ! hash clang-format-diff >/dev/null; then
|
||||
# advice severity level is completely non-disruptive.
|
||||
# switch to warning or error if you want to prompt the user.
|
||||
# advice severity level is completely non-disruptive.
|
||||
# switch to warning or error if you want to prompt the user.
|
||||
if ! hash clang-format >/dev/null; then
|
||||
echo "advice"
|
||||
echo "clang-format-diff not found in user's PATH; not linting file."
|
||||
echo "clang-format not found in user's PATH; not linting file."
|
||||
echo "===="
|
||||
exit 0
|
||||
fi
|
||||
if ! git rev-parse --git-dir >/dev/null; then
|
||||
echo "advice"
|
||||
echo "not in git repostitory; not linting file."
|
||||
echo "===="
|
||||
exit 0
|
||||
fi
|
||||
|
@ -37,14 +43,17 @@ trap 'cleanup' INT HUP QUIT TERM EXIT
|
|||
|
||||
# Arcanist can filter out lint messages for unchanged lines, but for that, we
|
||||
# need to generate line by line lint messages. Instead, we generate one lint
|
||||
# message on line 1, char 1 with file content edited using clang-format-diff.
|
||||
if git rev-parse --git-dir >/dev/null; then
|
||||
arc_base_commit=$(arc which --show-base)
|
||||
# An alternative is to use git-clang-format.
|
||||
git diff -U0 --no-color "${arc_base_commit}"| clang-format-diff -style file -i -p1
|
||||
else
|
||||
svn diff --diff-cmd=diff -x -U0 "${src_file}" | clang-format-diff -style LLVM -i
|
||||
fi
|
||||
# message on line 1, char 1 with file content edited using clang-format-diff.py
|
||||
#
|
||||
# We do not use git-clang-format because it wants to modify the index,
|
||||
# and arc is already holding the lock.
|
||||
#
|
||||
# We do not look for clang-format-diff or clang-format-diff.py in the PATH
|
||||
# because whether/how these are installed differs between distributions,
|
||||
# and we have an executable copy in the tree anyway.
|
||||
arc_base_commit=$(arc which --show-base)
|
||||
git diff-index -U0 "${arc_base_commit}" \
|
||||
| clang/tools/clang-format/clang-format-diff.py -style file -i -p1
|
||||
|
||||
cp -p "${src_file}" "${formatted_file}"
|
||||
cp -p "${original_file}" "${src_file}"
|
||||
|
|
Loading…
Reference in New Issue