diff --git a/dist/tools/ci/build_and_test.sh b/dist/tools/ci/build_and_test.sh index 2ab69865c1..a4c3f18b35 100755 --- a/dist/tools/ci/build_and_test.sh +++ b/dist/tools/ci/build_and_test.sh @@ -39,7 +39,7 @@ function run { print_result $NEW_RESULT set_result $NEW_RESULT - # Indent command output so that its easily discernable from the rest + # Indent command output so that its easily discernible from the rest if [ -n "$OUT" ]; then echo "Command output:" echo "" @@ -94,6 +94,7 @@ then run ./dist/tools/flake8/check.sh run ./dist/tools/headerguards/check.sh run ./dist/tools/buildsystem_sanity_check/check.sh + run ./dist/tools/codespell/check.sh exit $RESULT fi diff --git a/dist/tools/codespell/check.sh b/dist/tools/codespell/check.sh new file mode 100755 index 0000000000..37fd02d2fa --- /dev/null +++ b/dist/tools/codespell/check.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash + +# Copyright 2019 Alexandre Abadie +# +# This file is subject to the terms and conditions of the GNU Lesser +# General Public License v2.1. See the file LICENSE in the top level +# directory for more details. + +CODESPELL_CMD="codespell" + +if tput colors &> /dev/null && [ "$(tput colors)" -ge 8 ]; then + CERROR=$'\033[1;31m' + CRESET=$'\033[0m' +else + CERROR= + CRESET= +fi + +: "${RIOTBASE:=$(cd $(dirname $0)/../../../; pwd)}" +cd $RIOTBASE + +: "${RIOTTOOLS:=${RIOTBASE}/dist/tools}" +. "${RIOTTOOLS}"/ci/changed_files.sh + +FILEREGEX='\.([CcHh]|[ch]pp|sh|py|md|txt)$' +EXCLUDE='^(.+/vendor/)' +FILES=$(FILEREGEX=${FILEREGEX} EXCLUDE=${EXCLUDE} changed_files) + +if [ -z "${FILES}" ]; then + exit 0 +fi + +${CODESPELL_CMD} --version &> /dev/null || { + printf "%s%s: cannot execute \"%s\"!%s\n" "${CERROR}" "$0" "${CODESPELL_CMD}" "${CRESET}" + exit 1 +} + +CODESPELL_OPTS="-q 2" # Disable "WARNING: Binary file" +CODESPELL_OPTS+=" --check-hidden" +# Disable false positives "nd => and, 2nd", "WAN => WANT", "od => of" +CODESPELL_OPTS+=" --ignore-words-list=ND,nd,WAN,od" + +# Filter-out all false positive raising "disabled due to" messages. +ERRORS=$(${CODESPELL_CMD} ${CODESPELL_OPTS} ${FILES} | grep -ve "disabled due to") + +if [ -n "${ERRORS}" ] +then + printf "%sThere are typos in the following files:%s\n\n" "${CERROR}" "${CRESET}" + printf "%s\n" "${ERRORS}" + # TODO: return 1 when all typos are fixed + exit 0 +else + exit 0 +fi