2.12.2021, 9:00 - 11:00: Due to updates GitLab may be unavailable for some minutes between 09:00 and 11:00.

Commit 939f1176 authored by David Frank's avatar David Frank Committed by Tobias Lasser
Browse files

#90 Update clang-format and clang-tidy to version 10

- Update CI stage to reflect update
- Update ci_scripts to reflect update
- Reformate code with clang-format-10
- Update contribution guide
parent 6887ba84
Pipeline #370503 passed with stages
in 27 minutes and 59 seconds
......@@ -10,7 +10,7 @@ stages:
### variables ###
CLANG_FORMAT_IMAGE: "elsa/clang-format:8"
CLANG_FORMAT_IMAGE: "elsa/clang-format:10"
CLANG_TIDY_IMAGE: "elsa/clang-tidy:8"
GCC_IMAGE: "elsa/gcc-pybinds:10"
CLANG9_IMAGE: "elsa/clang-pybinds:9"
......@@ -62,10 +62,12 @@ We use the tool `clang-format` to autoformat our code with the [given style
file](.clang-format). Please make sure that your code is formatted accordingly, otherwise the CI
will fail in the first stage. You can either execute
find elsa/ -name '*.h' -or -name '*.hpp' -or -name '*.cpp' | xargs clang-format-8 -i -style=file $1
find elsa/ -name '*.h' -or -name '*.hpp' -or -name '*.cpp' | xargs clang-format-10 -i -style=file $1
find examples/ -name '*.h' -or -name '*.hpp' -or -name '*.cpp' | xargs clang-format-10 -i -style=file $1
find benchmark/ -name '*.h' -or -name '*.hpp' -or -name '*.cpp' | xargs clang-format-10 -i -style=file $1
in the root folder, setup a git hook or integrate `clang-format` into your IDE. Note that we
currently use version 8.0.0, different versions might produce errors.
currently use version 10.0.0, different versions might produce errors.
## Linting
We use `clang-tidy` with the enabled checks specified in [the configuration file](.clang-tidy). Note
......@@ -437,7 +437,7 @@ namespace elsa
/// User-defined template argument deduction guide for the expression based constructor
template <typename Source>
DataContainer(Source const& source)->DataContainer<typename Source::data_t>;
DataContainer(Source const& source) -> DataContainer<typename Source::data_t>;
/// Collects callable lambdas for later dispatch
template <typename... Ts>
......@@ -447,7 +447,7 @@ namespace elsa
/// Class template deduction guide
template <typename... Ts>
Callables(Ts...) -> Callables<Ts...>;
/// Multiplying two operands (including scalars)
template <typename LHS, typename RHS, typename = std::enable_if_t<isBinaryOpOk<LHS, RHS>>>
......@@ -179,8 +179,8 @@ namespace elsa
template <typename data_t>
DataHandlerMapCPU<data_t>& DataHandlerMapCPU<data_t>::
operator=(const DataHandlerMapCPU<data_t>& v)
DataHandlerMapCPU<data_t>::operator=(const DataHandlerMapCPU<data_t>& v)
if (v.getSize() != getSize())
throw std::invalid_argument("DataHandler: assignment argument has wrong size");
......@@ -184,8 +184,8 @@ namespace elsa
template <typename data_t>
DataHandlerMapGPU<data_t>& DataHandlerMapGPU<data_t>::
operator=(const DataHandlerMapGPU<data_t>& v)
DataHandlerMapGPU<data_t>::operator=(const DataHandlerMapGPU<data_t>& v)
if (v.getSize() != getSize())
throw std::invalid_argument("DataHandler: assignment argument has wrong size");
......@@ -324,7 +324,7 @@ namespace elsa
operator Vector() const { return _vec; }
/// Conversion operator to Vector&& (rvalue reference)
operator Vector &&() { return std::move(_vec); }
operator Vector&&() { return std::move(_vec); }
/// Access to vector (const reference)
const Vector& get() & { return _vec; }
......@@ -17,8 +17,8 @@ namespace elsa
template <typename data_t>
RegularizationTerm<data_t>& RegularizationTerm<data_t>::
operator=(const RegularizationTerm<data_t>& other)
RegularizationTerm<data_t>::operator=(const RegularizationTerm<data_t>& other)
if (this != &other) {
_weight = other._weight;
......@@ -35,8 +35,8 @@ namespace elsa
template <typename data_t>
RegularizationTerm<data_t>& RegularizationTerm<data_t>::
operator=(RegularizationTerm<data_t>&& other) noexcept
RegularizationTerm<data_t>::operator=(RegularizationTerm<data_t>&& other) noexcept
_weight = std::move(other._weight);
_functional = std::move(other._functional);
......@@ -14,20 +14,20 @@ fi
if type clang-format-8 2>/dev/null; then
if type clang-format-10 2>/dev/null; then
echo "Checking formatting using the following clang-format version:"
clang-format-8 --version
clang-format-10 --version
echo "clang-format-8 not correctly installed"
echo "clang-format-10 not correctly installed"
exit 1
# perform clang-format on all cpp-files
find elsa/ -name '*.h' -or -name '*.hpp' -or -name '*.cpp' -or -name '*.cu' -or -name '*.cuh' | xargs clang-format-8 -i -style=file $1
find benchmarks/ -name '*.h' -or -name '*.hpp' -or -name '*.cpp' -or -name '*.cu' -or -name '*.cuh' | xargs clang-format-8 -i -style=file $1
find examples/ -name '*.h' -or -name '*.hpp' -or -name '*.cpp' -or -name '*.cu' -or -name '*.cuh' | xargs clang-format-8 -i -style=file $1
find elsa/ -name '*.h' -or -name '*.hpp' -or -name '*.cpp' -or -name '*.cu' -or -name '*.cuh' | xargs clang-format-10 -i -style=file $1
find benchmarks/ -name '*.h' -or -name '*.hpp' -or -name '*.cpp' -or -name '*.cu' -or -name '*.cuh' | xargs clang-format-10 -i -style=file $1
find examples/ -name '*.h' -or -name '*.hpp' -or -name '*.cpp' -or -name '*.cu' -or -name '*.cuh' | xargs clang-format-10 -i -style=file $1
# check if something was modified
notcorrectlist=`git status --porcelain | grep '^ M' | cut -c4-`
......@@ -41,9 +41,9 @@ else
git diff --stat $notcorrectlist
echo "Please run"
echo "find elsa/ -name '*.h' -or -name '*.hpp' -or -name '*.cpp' -or -name '*.cu' -or -name '*.cuh' | xargs clang-format-8 -i -style=file $1"
echo "find benchmarks/ -name '*.h' -or -name '*.hpp' -or -name '*.cpp' -or -name '*.cu' -or -name '*.cuh' | xargs clang-format -i -style=file $1"
echo "find examples/ -name '*.h' -or -name '*.hpp' -or -name '*.cpp' -or -name '*.cu' -or -name '*.cuh' | xargs clang-format -i -style=file $1"
echo "find elsa/ -name '*.h' -or -name '*.hpp' -or -name '*.cpp' -or -name '*.cu' -or -name '*.cuh' | xargs clang-format-10 -i -style=file $1"
echo "find benchmarks/ -name '*.h' -or -name '*.hpp' -or -name '*.cpp' -or -name '*.cu' -or -name '*.cuh' | xargs clang-format-10 -i -style=file $1"
echo "find examples/ -name '*.h' -or -name '*.hpp' -or -name '*.cpp' -or -name '*.cu' -or -name '*.cuh' | xargs clang-format-10 -i -style=file $1"
echo "to solve the issue."
# cleanup changes in git
# set exit on error
# set -e
......@@ -14,13 +17,14 @@ if [[ "${#filelist[@]}" -eq "0" ]]; then
exit 0
echo "==> Found ${#filelist[@]} cpp files"
echo "==> ${filelist[*]}"
echo "==> Let's start our clang-tidy check"
# for compilation database
mkdir -p build
cd build
cd ..
......@@ -41,12 +45,13 @@ echo
# check list of files
for f in $filelist; do
for f in ${filelist[*]}; do
# check if .cpp file and in compilation DB
if checkCPP $f && [[ -n $(grep $f build/compile_commands.json) ]]; then
echo "Checking matching file ${f}"
touch output.txt
clang-tidy-8 -p=build ${f} --extra-arg=--cuda-host-only > output.txt
# decide if error or warning fail
if [[ -n $(grep "warning: " output.txt) ]] || [[ -n $(grep "error: " output.txt) ]]; then
echo ""
......@@ -56,11 +61,16 @@ for f in $filelist; do
if [[ -n $(grep "error: " output.txt) ]]; then
filesWithErrors=( "${filesWithErrors[@]}" $f )
echo -e "\033[1;31m\xE2\x9C\x98 failed file $f\033[0m $1";
echo -e "\033[1;33m\xE2\x9C\x93 passed file $f with warnings\033[0m $1";
echo -e "\033[1;32m\xE2\x9C\x93 passed file $f\033[0m $1";
rm output.txt
echo "$f not a C++ file or not in compilation database (compile_commands.json)"
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment