Mercurial > hg > CbC > CbC_llvm
view utils/arcanist/clang-format.sh @ 220:42394fc6a535
Added tag llvm12 for changeset 0572611fdcc8
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 15 Jun 2021 19:13:43 +0900 |
parents | 0572611fdcc8 |
children | 2e18cbf3894f |
line wrap: on
line source
#!/bin/bash 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 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`. # 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 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 src_file="${1}" original_file="$(mktemp)" formatted_file="$(mktemp)" readonly src_file readonly original_file readonly formatted_file cp -p "${src_file}" "${original_file}" cp -p "${src_file}" "${formatted_file}" cleanup() { rc=$? rm "${formatted_file}" "${original_file}" exit ${rc} } 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.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}" if ! diff -q "${src_file}" "${formatted_file}" > /dev/null ; then echo "autofix" echo "clang-format suggested style edits found:" echo "1,1" # line,char of start of replacement. cat "${src_file}" echo ">>>>" cat "${formatted_file}" echo "<<<<" fi