lint: Add disabled clang-format linter
A follow-up patch will enable the linter and run clang-format on the
entire repo. You'll be able to run it in one of two ways:
$ bazel run //tools/lint:clang_format
and, along with all the other linters once its enabled:
$ bazel run //tools/lint:run-ci
Signed-off-by: Philipp Schrader <philipp.schrader@gmail.com>
Change-Id: I1dab4e682096826ee57d70f8c82662d9c2c33217
diff --git a/tools/lint/BUILD b/tools/lint/BUILD
index 23ba4d6..a881124 100644
--- a/tools/lint/BUILD
+++ b/tools/lint/BUILD
@@ -7,6 +7,17 @@
)
sh_binary(
+ name = "clang_format",
+ srcs = ["clang_format.sh"],
+ data = [
+ "@llvm_k8//:bin",
+ ],
+ deps = [
+ "@bazel_tools//tools/bash/runfiles",
+ ],
+)
+
+sh_binary(
name = "gofmt",
srcs = ["gofmt.sh"],
data = [
@@ -70,6 +81,7 @@
],
data = [
":buildifier",
+ ":clang_format",
":gofmt",
":prettier",
":rustfmt",
diff --git a/tools/lint/clang_format.sh b/tools/lint/clang_format.sh
new file mode 100755
index 0000000..3084520
--- /dev/null
+++ b/tools/lint/clang_format.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+
+# --- begin runfiles.bash initialization v2 ---
+# Copy-pasted from the Bazel Bash runfiles library v2.
+set -uo pipefail; f=bazel_tools/tools/bash/runfiles/runfiles.bash
+source "${RUNFILES_DIR:-/dev/null}/$f" 2>/dev/null || \
+ source "$(grep -sm1 "^$f " "${RUNFILES_MANIFEST_FILE:-/dev/null}" | cut -f2- -d' ')" 2>/dev/null || \
+ source "$0.runfiles/$f" 2>/dev/null || \
+ source "$(grep -sm1 "^$f " "$0.runfiles_manifest" | cut -f2- -d' ')" 2>/dev/null || \
+ source "$(grep -sm1 "^$f " "$0.exe.runfiles_manifest" | cut -f2- -d' ')" 2>/dev/null || \
+ { echo>&2 "ERROR: cannot find $f"; exit 1; }; f=; set -e
+# --- end runfiles.bash initialization v2 ---
+
+readonly CLANG_FORMAT="$(rlocation llvm_k8/bin/clang-format)"
+
+# Run everything from the root of the tree.
+cd "${BUILD_WORKSPACE_DIRECTORY}"
+
+# Find all the C/C++ files in the repo.
+# Exclude third-party code. Both in //third_party and the third-party code
+# checked in to the main repo directly.
+cc_files=($(git ls-tree --name-only --full-tree -r @ \
+ | grep -v -e '^third_party/' \
+ -e '^motors/core/kinetis.h$' \
+ -e '^y2023/vision/rkisp1-config.h$' \
+ | (grep -e '\.c$' -e '\.cc$' -e '\.h' || :)))
+
+# If we have any C/C++ files, format them.
+if ((${#cc_files[@]} > 0)); then
+ exec "${CLANG_FORMAT}" -i "${cc_files[@]}"
+fi
diff --git a/tools/lint/run-ci.sh b/tools/lint/run-ci.sh
index 6e026ee..1f5fda4 100755
--- a/tools/lint/run-ci.sh
+++ b/tools/lint/run-ci.sh
@@ -23,6 +23,10 @@
export GOCACHE=/tmp/lint_go_cache
fi
+clang_format() {
+ ./tools/lint/clang_format
+}
+
gofmt() {
./tools/lint/gofmt
}
@@ -110,6 +114,7 @@
# All the linters that we are going to run.
readonly -a LINTERS=(
+ #clang_format
gofmt
gomod
update_go_repos