aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
authorGravatar Craig Tiller <ctiller@google.com>2017-11-10 14:14:17 -0800
committerGravatar Craig Tiller <ctiller@google.com>2017-11-10 14:14:17 -0800
commit4ac2b8e585cbf7064f9bdde4eabaf8ff42801142 (patch)
tree5379629b43d287972916a87637a26251c1b0de5f /tools
parente77b3c36d1b3e2033abd19d553748b678c22253f (diff)
Enable clang-tidy as a sanity check, fix up all known failures
Diffstat (limited to 'tools')
-rwxr-xr-xtools/distrib/run_clang_tidy.py70
-rwxr-xr-xtools/run_tests/sanity/check_clang_tidy.sh21
-rw-r--r--tools/run_tests/sanity/sanity_tests.yaml3
3 files changed, 93 insertions, 1 deletions
diff --git a/tools/distrib/run_clang_tidy.py b/tools/distrib/run_clang_tidy.py
new file mode 100755
index 0000000000..d002a04de9
--- /dev/null
+++ b/tools/distrib/run_clang_tidy.py
@@ -0,0 +1,70 @@
+#!/usr/bin/env python2.7
+# Copyright 2017 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import sys
+import os
+import subprocess
+import argparse
+import multiprocessing
+
+sys.path.append(
+ os.path.join(
+ os.path.dirname(sys.argv[0]), '..', 'run_tests', 'python_utils'))
+import jobset
+
+GRPC_CHECKS = [
+ 'modernize-use-nullptr',
+]
+
+extra_args = [
+ '-x',
+ 'c++',
+ '-std=c++11',
+]
+with open('.clang_complete') as f:
+ for line in f:
+ line = line.strip()
+ if line.startswith('-I'):
+ extra_args.append(line)
+
+clang_tidy = os.environ.get('CLANG_TIDY', 'clang-tidy')
+
+argp = argparse.ArgumentParser(description='Run clang-tidy against core')
+argp.add_argument('files', nargs='+', help='Files to tidy')
+argp.add_argument('--fix', dest='fix', action='store_true')
+argp.add_argument('-j', '--jobs', type=int, default=multiprocessing.cpu_count(),
+ help='Number of CPUs to use')
+argp.set_defaults(fix=False)
+args = argp.parse_args()
+
+cmdline = [
+ clang_tidy,
+ '--checks=-*,%s' % ','.join(GRPC_CHECKS),
+ '--warnings-as-errors=%s' % ','.join(GRPC_CHECKS)
+] + [
+ '--extra-arg-before=%s' % arg
+ for arg in extra_args
+]
+
+if args.fix:
+ cmdline.append('--fix')
+
+jobs = []
+for filename in args.files:
+ jobs.append(jobset.JobSpec(cmdline + [filename],
+ shortname=filename,
+ ))#verbose_success=True))
+
+jobset.run(jobs, maxjobs=args.jobs)
diff --git a/tools/run_tests/sanity/check_clang_tidy.sh b/tools/run_tests/sanity/check_clang_tidy.sh
new file mode 100755
index 0000000000..42ab511a20
--- /dev/null
+++ b/tools/run_tests/sanity/check_clang_tidy.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+# Copyright 2017 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -e
+
+make buildtests \
+ -j `python -c 'import multiprocessing; print multiprocessing.cpu_count()'`
+find src/core src/cpp test/core test/cpp -name '*.h' -or -name '*.cc' | \
+ xargs tools/distrib/run_clang_tidy.py $*
diff --git a/tools/run_tests/sanity/sanity_tests.yaml b/tools/run_tests/sanity/sanity_tests.yaml
index 4bc4b7c56f..ec58a10a85 100644
--- a/tools/run_tests/sanity/sanity_tests.yaml
+++ b/tools/run_tests/sanity/sanity_tests.yaml
@@ -17,4 +17,5 @@
- script: tools/distrib/pylint_code.sh
- script: tools/distrib/yapf_code.sh
- script: tools/distrib/python/check_grpcio_tools.py
-
+- script: tools/run_tests/sanity/check_clang_tidy.sh -j 3
+ cpu_cost: 3