aboutsummaryrefslogtreecommitdiff
path: root/test/lint/lint-python-dead-code.py
diff options
context:
space:
mode:
authorFabian Jahr <fjahr@protonmail.com>2022-04-06 00:55:22 +0200
committerFabian Jahr <fjahr@protonmail.com>2022-04-06 00:55:22 +0200
commit076cd6835fd97a62bfd6912b80addfcb5342ea8e (patch)
tree113adf4de7d79dfebf7b641ec635d8a534262af7 /test/lint/lint-python-dead-code.py
parent15220ec9039ac330dbc6fd53fa06424cde04d0b6 (diff)
downloadbitcoin-076cd6835fd97a62bfd6912b80addfcb5342ea8e.tar.xz
lint: Convert Python dead code linter to Python
Diffstat (limited to 'test/lint/lint-python-dead-code.py')
-rwxr-xr-xtest/lint/lint-python-dead-code.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/test/lint/lint-python-dead-code.py b/test/lint/lint-python-dead-code.py
new file mode 100755
index 0000000000..b3f9394788
--- /dev/null
+++ b/test/lint/lint-python-dead-code.py
@@ -0,0 +1,41 @@
+#!/usr/bin/env python3
+#
+# Copyright (c) 2022 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.
+"""
+
+from subprocess import check_output, STDOUT, CalledProcessError
+
+FILES_ARGS = ['git', 'ls-files', '--', '*.py']
+
+
+def check_vulture_install():
+ try:
+ check_output(["vulture", "--version"])
+ except FileNotFoundError:
+ print("Skipping Python dead code linting since vulture is not installed. Install by running \"pip3 install vulture\"")
+ exit(0)
+
+
+def main():
+ check_vulture_install()
+
+ files = check_output(FILES_ARGS).decode("utf-8").splitlines()
+ # --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.
+ vulture_args = ['vulture', '--min-confidence=100'] + files
+
+ try:
+ check_output(vulture_args, stderr=STDOUT)
+ except CalledProcessError as e:
+ print(e.output.decode("utf-8"), end="")
+ print("Python dead code detection found some issues")
+ exit(1)
+
+
+if __name__ == "__main__":
+ main()