#!/usr/bin/env vpython3
# Copyright 2021 The ChromiumOS Authors
# 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:]))
