mirror of
https://github.com/deadc0de6/dotdrop.git
synced 2026-02-04 14:31:46 +00:00
136 lines
3.9 KiB
Bash
Executable File
Vendored
136 lines
3.9 KiB
Bash
Executable File
Vendored
#!/usr/bin/env bash
|
|
# author: deadc0de6 (https://github.com/deadc0de6)
|
|
# Copyright (c) 2022, deadc0de6
|
|
|
|
# stop on first error
|
|
set -eu -o errtrace -o pipefail
|
|
|
|
# ensure binaries are here
|
|
if ! which shellcheck >/dev/null 2>&1; then
|
|
echo "Install shellcheck"
|
|
exit 1
|
|
fi
|
|
echo "=> shellcheck version:"
|
|
shellcheck --version
|
|
|
|
# python tools versions
|
|
if ! which pylint >/dev/null 2>&1; then
|
|
echo "Install pylint"
|
|
exit 1
|
|
fi
|
|
echo "=> pylint version:"
|
|
pylint --version
|
|
|
|
if ! which pycodestyle >/dev/null 2>&1; then
|
|
echo "Install pycodestyle"
|
|
exit 1
|
|
fi
|
|
echo "=> pycodestyle version:"
|
|
pycodestyle --version
|
|
|
|
if ! which pyflakes >/dev/null 2>&1; then
|
|
echo "Install pyflakes"
|
|
exit 1
|
|
fi
|
|
echo "=> pyflakes version:"
|
|
pyflakes --version
|
|
|
|
# checking for TODO/FIXME
|
|
echo "--------------------------------------"
|
|
echo "checking for TODO/FIXME"
|
|
set +e
|
|
grep -r 'TODO\|FIXME' dotdrop/ && exit 1
|
|
grep -r 'TODO\|FIXME' tests/ && exit 1
|
|
grep -r 'TODO\|FIXME' tests-ng/ && exit 1
|
|
#grep -r 'TODO\|FIXME' scripts/ && exit 1
|
|
set -e
|
|
|
|
# checking for tests options
|
|
echo "---------------------------------"
|
|
echo "checking for bash strict mode"
|
|
find tests-ng -iname '*.sh' | while read -r script; do
|
|
#grep 'set +e' "${script}" 2>&1 >/dev/null && echo "set +e found in ${script}" && exit 1
|
|
grep 'set -eu -o errtrace -o pipefail' "${script}" >/dev/null 2>&1 || \
|
|
(echo "\"set -eu -o errtrace -o pipefail\" not set in ${script}" && exit 1 )
|
|
done
|
|
|
|
# PEP8 tests
|
|
# W503: Line break occurred before a binary operator
|
|
# W504: Line break occurred after a binary operator
|
|
echo "---------------------------------"
|
|
echo "checking dotdrop with pycodestyle"
|
|
pycodestyle --ignore=W503,W504 dotdrop/
|
|
pycodestyle scripts/
|
|
|
|
# pyflakes tests
|
|
echo "------------------------------"
|
|
echo "checking dotdrop with pyflakes"
|
|
pyflakes dotdrop/
|
|
|
|
# pylint
|
|
echo "----------------------------"
|
|
echo "checking dotdrop with pylint"
|
|
# https://pylint.pycqa.org/en/latest/user_guide/checkers/features.html
|
|
# R0902: too-many-instance-attributes
|
|
# R0913: too-many-arguments
|
|
# R0903: too-few-public-methods
|
|
# R0914: too-many-locals
|
|
# R0915: too-many-statements
|
|
# R0912: too-many-branches
|
|
# R0911: too-many-return-statements
|
|
# R0904: too-many-public-methods
|
|
# R0917: too-many-positional-arguments
|
|
pylint \
|
|
--disable=R0902 \
|
|
--disable=R0913 \
|
|
--disable=R0903 \
|
|
--disable=R0914 \
|
|
--disable=R0915 \
|
|
--disable=R0912 \
|
|
--disable=R0911 \
|
|
--disable=R0904 \
|
|
--disable=R0917 \
|
|
dotdrop/
|
|
|
|
# check shell scripts
|
|
# SC2002: Useless cat
|
|
# SC2126: Consider using grep -c instead of grep|wc -l
|
|
# SC2129: Consider using { cmd1; cmd2; } >> file instead of individual redirects
|
|
# SC2181: Check exit code directly with e.g. 'if mycmd;', not indirectly with $?
|
|
# SC1004: This backslash+linefeed is literal. Break outside single quotes if you just want to break the line
|
|
echo "--------------------------------------"
|
|
echo "checking shell scripts with shellcheck"
|
|
find . -iname '*.sh' | while read -r script; do
|
|
echo "checking ${script}"
|
|
shellcheck -x \
|
|
-e SC2002 \
|
|
-e SC2126 \
|
|
-e SC2129 \
|
|
-e SC2181 \
|
|
-e SC1004 \
|
|
-e SC1117 \
|
|
-e SC2230 \
|
|
"${script}"
|
|
done
|
|
|
|
# check other python scripts
|
|
echo "-----------------------------------------"
|
|
echo "checking other python scripts with pylint"
|
|
find . -name "*.py" -not -path "./dotdrop/*" -not -regex "\./\.?v?env/.*" | while read -r script; do
|
|
echo "checking ${script}"
|
|
pylint -sn \
|
|
--disable=R0914 \
|
|
--disable=R0915 \
|
|
--disable=R0913 \
|
|
"${script}"
|
|
done
|
|
|
|
echo "------------------------"
|
|
echo "checking for more issues"
|
|
exceptions="save_uservariables_name\|@@\|diff_cmd\|original,\|modified,"
|
|
# f-string errors and missing f literal
|
|
find dotdrop/ -iname '*.py' -exec grep --with-filename -n -v "f'" {} \; | grep -v "{'" | grep -v "${exceptions}" | grep "'.*}" && echo "bad string format (1)" && exit 1
|
|
find dotdrop/ -iname '*.py' -exec grep --with-filename -n -v 'f"' {} \; | grep -v "f'" | grep -v '{"' | grep -v "${exceptions}" | grep '".*}' && echo "bad string format (2)" && exit 1
|
|
|
|
echo "syntax OK"
|