Added code formatting check

This commit is contained in:
Bartek Kryza
2022-12-18 17:42:24 +01:00
parent 5255fd1785
commit c4d8bddf96
3 changed files with 61 additions and 1 deletions

View File

@@ -11,11 +11,14 @@ jobs:
- name: Update package database
run: sudo apt -y update
- name: Install deps
run: sudo apt -y install git make gcc-10 g++-10 ccache cmake libyaml-cpp-dev llvm-12 clang-12 libclang-12-dev libclang-cpp12-dev lcov zlib1g-dev
run: sudo apt -y install git make gcc-10 g++-10 ccache cmake libyaml-cpp-dev llvm-12 clang-12 libclang-12-dev libclang-cpp12-dev clang-format-12 lcov zlib1g-dev
- name: Select g++ version
run: |
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 10
- name: Check code formatting
run: |
make check-formatting
- name: Build and unit test
run: |
NUMPROC=2 CMAKE_CXX_FLAGS="--coverage -fno-inline" CMAKE_EXE_LINKER_FLAGS="-lgcov --coverage" LLVM_VERSION=12 make test

View File

@@ -95,6 +95,10 @@ clang-format:
format:
docker run --rm -v $(CURDIR):/root/sources bkryza/clang-format-check:1.3
.PHONY: check-formatting
check-formatting:
./util/check_formatting.sh
.PHONY: iwyu_fixes
iwyu_fixes: debug
python3 $(shell which iwyu_tool.py) -p debug > debug/iwyu.out

53
util/check_formatting.sh Executable file
View File

@@ -0,0 +1,53 @@
#!/bin/bash
##
## util/check_formatting.sh
##
## Copyright (c) 2021-2022 Bartek Kryza <bkryza@gmail.com>
##
## 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.
##
shopt -s globstar
include_file_list() {
cat .clang-format-include | grep "^\+" | awk '{print $2}' \
| tr [:space:] '\n' | sort | uniq
}
ignore_file_list() {
echo $(cat .clang-format-include | grep "^\-" | awk '{print $2}') \
$(git ls-files --others --exclude-standard --ignored) \
| tr [:space:] '\n' | sort | uniq
}
valid_ignore_file_list() {
echo $(include_file_list) $(ignore_file_list) \
| tr [:space:] '\n' | sort | uniq -d
}
effective_file_list() {
echo $(include_file_list) $(valid_ignore_file_list) \
| tr [:space:] '\n' | sort | uniq -u
}
GIT_STATUS=$(git diff-index --quiet HEAD --)
EFFECTIVE_FILE_LIST=$(effective_file_list)
if [[ ${#EFFECTIVE_FILE_LIST[@]} -eq 0 ]]; then
echo ".clang-format-include patterns did not match any files."
exit 0
else
clang-format-12 --dry-run --Werror ${EFFECTIVE_FILE_LIST}
fi