def main()

in tools/check_names.py [0:0]


def main(dirs, prefix_length=None, failed_only=False):
  'Parse names in dirs.'
  import json
  logging.basicConfig(level=logging.INFO)
  names = []
  for dir_name in dirs:
    for name in get_names(dir_name):
      names.append(name)
  names.sort()
  source_just = max(len(k) for k in MOD_LIMITS)
  name_just = max(len(n.name) for n in names)
  value_just = max(len(n.value) for n in names)
  errors = []
  output = []
  for name in names:
    name_length = name.length + prefix_length
    remaining = MOD_LIMITS[name.source] - name_length
    if remaining <= 0:
      output.append(Output(name, name_length, remaining, "✗"))
      errors += [f"{name.source}:{name.name}:{name_length}"]
    else:
      output.append(Output(name, name_length, remaining, "✓"))

  output.sort(key=lambda i: i.remaining, reverse=True)
  if failed_only:
    output = [i for i in output if i.flag == "✗"]
  print(f'    {"source".ljust(source_just)} '
        f'{"name".ljust(name_just)} '
        f'{"value".ljust(value_just)} '
        'length  remaining')
  for i in output:
    print(f"[{i.flag}] {i.name.source.ljust(source_just)} "
          f"{i.name.name.ljust(name_just)} "
          f"{i.name.value.ljust(value_just)} "
          f" {i.length}/{MOD_LIMITS[i.name.source]} "
          f"{str(i.remaining).rjust(10)}")
  return 0 if not errors else 1