diff --git a/.travis/lint_04_install.sh b/.travis/lint_04_install.sh index e4d68d8e3c..e9ddfe6288 100755 --- a/.travis/lint_04_install.sh +++ b/.travis/lint_04_install.sh @@ -8,6 +8,7 @@ export LC_ALL=C travis_retry pip3 install codespell==1.15.0 travis_retry pip3 install flake8==3.5.0 +travis_retry pip3 install vulture==2.3 travis_retry pip3 install yq SHELLCHECK_VERSION=v0.6.0 diff --git a/ci/Dockerfile.builder b/ci/Dockerfile.builder index 4f06d2fa3d..c75074f6a4 100644 --- a/ci/Dockerfile.builder +++ b/ci/Dockerfile.builder @@ -17,6 +17,7 @@ RUN pip3 install pyzmq # really needed? RUN pip3 install jinja2 RUN pip3 install flake8==3.5.0 RUN pip3 install codespell==1.15.0 +RUN pip3 install vulture==2.3 RUN pip3 install yq # dash_hash diff --git a/test/lint/lint-python-dead-code.sh b/test/lint/lint-python-dead-code.sh new file mode 100755 index 0000000000..c3b6ff3c98 --- /dev/null +++ b/test/lint/lint-python-dead-code.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +# +# Copyright (c) 2021 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +# +# Find dead Python code. + +export LC_ALL=C + +if ! command -v vulture > /dev/null; then + echo "Skipping Python dead code linting since vulture is not installed. Install by running \"pip3 install vulture\"" + exit 0 +fi + +# --min-confidence 100 will only report code that is guaranteed to be unused within the analyzed files. +# Any value below 100 introduces the risk of false positives, which would create an unacceptable maintenance burden. +if ! vulture \ + --min-confidence 100 \ + $(git ls-files -- "*.py"); then + echo "Python dead code detection found some issues" + exit 1 +fi