From 734b55e75bad5146bc3fe002697d0b434c3ee8ff Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EC=98=A4=ED=98=95=EC=84=9D/=EB=8F=99=EC=9E=91=EC=A0=9C?= =?utf8?q?=EC=96=B4Lab=28SR=29/Senior=20Engineer/=EC=82=BC=EC=84=B1?= =?utf8?q?=EC=A0=84=EC=9E=90?= Date: Tue, 17 Apr 2018 13:25:43 +0900 Subject: [PATCH] Coding rule check script (#730) Check coding rule for c++ code and python code Use clang-format to check c++ coding rule, and use yapf to use python coding rule based on PEP8 Signed-off-by: Hyeongseok Oh --- ci/format-checker.sh | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100755 ci/format-checker.sh diff --git a/ci/format-checker.sh b/ci/format-checker.sh new file mode 100755 index 0000000..dcfe0c4 --- /dev/null +++ b/ci/format-checker.sh @@ -0,0 +1,89 @@ +#!/bin/bash + +function check_tools() { + which clang-format-3.9 + if [[ $? -ne 0 ]]; then + echo "Error: clang-format-3.9 is not available." + echo " Please install clang-format-3.9." + exit 1 + fi + + which yapf + if [[ $? -ne 0 ]]; then + echo "Error: yapf is not available." + echo " Please install yapf." + exit 1 + fi +} + +function check_cpp_files() { + DIRECTORIES_TO_BE_TESTED=$1 + + # Check c++ files + CPP_FILES_IN_COMPILER=$(find "${DIRECTORIES_TO_BE_TESTED[@]}" -iname '*.h' -o -iname '*.cpp') + + if [[ ${#CPP_FILES_IN_COMPILER} -eq 0 ]]; then + echo "No cpp files to be checked" + return + fi + + CPP_FILES_TO_BE_TESTED=$(git ls-files $CPP_FILES_IN_COMPILER) + if [[ ${#CPP_FILES_TO_BE_TESTED} -eq 0 ]]; then + echo "No changed cpp files to be checked" + return + fi + + clang-format-3.9 -i $CPP_FILES_TO_BE_TESTED +} + +function check_python_files() { + DIRECTORIES_TO_BE_TESTED=$1 + + # Check python files + PYTHON_FILES_IN_COMPILER=$(find "${DIRECTORIES_TO_BE_TESTED[@]}" -iname '*.py') + + if [[ ${#PYTHON_FILES_IN_COMPILER} -eq 0 ]]; then + echo "No python files to be checked" + return + fi + + PYTHON_FILES_TO_BE_TESTED=$(git ls-files $PYTHON_FILES_IN_COMPILER) + if [[ ${#PYTHON_FILES_TO_BE_TESTED} -eq 0 ]]; then + echo "No changed python files to be checked" + return + fi + + yapf -i --style='{based_on_style: pep8, column_limit: 90}' $PYTHON_FILES_TO_BE_TESTED +} + +echo "Make sure commit all changes before running this checker." + +check_tools + +DIRECTORIES_TO_BE_TESTED=() + +for DIR_TO_BE_TESTED in $(find -name '.FORMATCHECKED' -exec dirname {} \;); do + DIRECTORIES_TO_BE_TESTED+=("$DIR_TO_BE_TESTED") +done + +if [[ ${#DIRECTORIES_TO_BE_TESTED[@]} -eq 0 ]]; then + echo "No directories to be checked" + exit 0 +fi + +check_cpp_files $DIRECTORIES_TO_BE_TESTED +check_python_files $DIRECTORIES_TO_BE_TESTED + +git diff > format.patch +PATCHFILE_SIZE=$(stat -c%s format.patch) +if [[ $PATCHFILE_SIZE -ne 0 ]]; then + echo "[FAILED] Format checker failed and update code to follow convention." + echo " You can find changes in format.patch" + exit 1 +else + echo "[PASSED] Format checker succeed." + exit 0 +fi + +echo "Error: Something went wrong." +exit 1 -- 2.7.4