| #!/usr/bin/env vpython3 | |
| # Copyright 2021 The Chromium OS Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| # [VPYTHON:BEGIN] | |
| # python_version: "3.8" | |
| # | |
| # wheel: < | |
| # name: "infra/python/wheels/vulture-py3" | |
| # version: "version:2.3" | |
| # > | |
| # wheel: < | |
| # name: "infra/python/wheels/toml-py3" | |
| # version: "version:0.10.1" | |
| # > | |
| # [VPYTHON:END] | |
| """Run vulture over the codebase to find dead code. | |
| Note: This needs to be fed all modules to determine whether anything is used. | |
| """ | |
| import os | |
| from pathlib import Path | |
| import subprocess | |
| import sys | |
| import vulture.core | |
| TOPDIR = Path(__file__).resolve().parent.parent | |
| def main(argv): | |
| """Main function.""" | |
| if not argv: | |
| os.chdir(TOPDIR) | |
| # Scan all python modules (except generated bindings) that we authored. | |
| result = subprocess.run(['git', 'ls-tree', '-r', '-z', 'HEAD'], check=True, | |
| encoding='utf-8', stdout=subprocess.PIPE) | |
| for entry in result.stdout.split('\0'): | |
| if not entry: | |
| continue | |
| fields, path = entry.split('\t', 1) | |
| mode, _ = fields.split(' ', 1) | |
| if (mode != '120000' and | |
| not path.startswith('third_party/') and | |
| path.endswith('.py') and | |
| not path.endswith('_pb2.py')): | |
| argv.append(path) | |
| argv = (['--ignore-names', 'test*,setUp,setUpClass,tearDown,tearDownClass'] + | |
| argv) | |
| # The vulture API doesn't accept explicit args. | |
| sys.argv = [sys.argv[0]] + argv | |
| vulture.core.main() | |
| if __name__ == '__main__': | |
| sys.exit(main(sys.argv[1:])) |