lint-python-dead-code.py
1 #!/usr/bin/env python3 2 # 3 # Copyright (c) 2022-present The Bitcoin Core developers 4 # Distributed under the MIT software license, see the accompanying 5 # file COPYING or http://www.opensource.org/licenses/mit-license.php. 6 7 """ 8 Find dead Python code. 9 """ 10 11 from subprocess import check_output, STDOUT, CalledProcessError 12 13 FILES_ARGS = ['git', 'ls-files', '--', '*.py'] 14 15 16 def check_vulture_install(): 17 try: 18 check_output(["vulture", "--version"]) 19 except FileNotFoundError: 20 print("Skipping Python dead code linting since vulture is not installed. Install by running \"pip3 install vulture\"") 21 exit(0) 22 23 24 def main(): 25 check_vulture_install() 26 27 files = check_output(FILES_ARGS, text=True).splitlines() 28 # --min-confidence 100 will only report code that is guaranteed to be unused within the analyzed files. 29 # Any value below 100 introduces the risk of false positives, which would create an unacceptable maintenance burden. 30 vulture_args = ['vulture', '--min-confidence=100'] + files 31 32 try: 33 check_output(vulture_args, stderr=STDOUT, text=True) 34 except CalledProcessError as e: 35 print(e.output, end="") 36 print("Python dead code detection found some issues") 37 exit(1) 38 39 40 if __name__ == "__main__": 41 main()