From 9d88d2c7130ebccdec12abf6420843d0f5e08e8e Mon Sep 17 00:00:00 2001
From: Tobias Markmann <tm@ayena.de>
Date: Mon, 30 Jul 2018 15:38:23 +0200
Subject: Add clang-tidy-fix target to Makefile

This has clang-tidy write changes out to YAML files in
parallel and finally runs clang-apply-replacements which
merges, deduplicates and applies the changes in serial.

Uses Python to determine the number of parallel jobs to run.

Test-Information:

Tested by adding new checks and running clang-tidy-fix. Works
as described above and is much faster compared to a serial
`clang-tidy -fix` run.

Change-Id: Idb357e63edeba75ef9a4fb53f5ddef2a7c3c23ee

diff --git a/.clang-tidy b/.clang-tidy
index 7d7f4ca..406a7e0 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -99,7 +99,6 @@ Checks: >
 #  readability-named-parameter,
 #  readability-redundant-smartptr-get,
 #  readability-simplify-boolean-expr,
-WarningsAsErrors: '*'
 HeaderFilterRegex: '(Swift|Swiften|Sluift)/.*'
 AnalyzeTemporaryDtors: false
 CheckOptions:
diff --git a/Makefile b/Makefile
index d72f311..b26f8a3 100644
--- a/Makefile
+++ b/Makefile
@@ -1,10 +1,18 @@
+
+NUM_CPU := $(shell python -c 'import multiprocessing; print(multiprocessing.cpu_count())')
+
 .PHONY: all
 all: build.ninja
 	ninja
 
 .PHONY: clang-tidy
 clang-tidy: compile_commands.json
-	ninja -t targets all | grep cxx | grep -v 3rdParty | sed -e's/\.o: cxx/.cpp/' | xargs -n 1 clang-tidy
+	ninja -t targets all | grep cxx | grep -v 3rdParty | sed -e's/\.o: cxx/.cpp/' | xargs -t -P ${NUM_CPU} -n 1 clang-tidy -warnings-as-errors=*
+
+.PHONY: clang-tidy-fix
+clang-tidy-fix: compile_commands.json
+	ninja -t targets all | grep cxx | grep -v 3rdParty | sed -e's/\.o: cxx/.cpp/' | xargs -t -P ${NUM_CPU} -n 1 -I{} clang-tidy -p=${PWD} -export-fixes={}.clang-tidy-changes.yaml {}
+	clang-apply-replacements -remove-change-desc-files ${PWD}
 
 compile_commands.json: build.ninja
 	ninja -t compdb cxx > compile_commands.json
-- 
cgit v0.10.2-6-g49f6