check-symbols 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #!/usr/bin/env python3
  2. import argparse
  3. import os
  4. import sys
  5. import checksymbolslib.file as file
  6. from checksymbolslib.db import DB
  7. def parse_args():
  8. parser = argparse.ArgumentParser()
  9. parser.add_argument('--search', action='store', default=None,
  10. help='print all symbols matching a given regular expression')
  11. return parser.parse_args()
  12. def change_to_top_dir():
  13. base_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
  14. os.chdir(base_dir)
  15. def get_full_db(files_to_process):
  16. db = DB()
  17. for f in files_to_process:
  18. file.populate_db_from_file(db, f)
  19. return db
  20. def print_filenames_with_pattern(all_files, files_to_process, pattern):
  21. ignored_filenames = file.get_list_of_filenames_with_pattern(all_files, files_to_process, pattern)
  22. processed_filenames = file.get_list_of_filenames_with_pattern(files_to_process, [], pattern)
  23. print('========== filenames found with pattern "{}": {}'.format(pattern, len(processed_filenames)))
  24. for f in processed_filenames:
  25. print(f)
  26. print('========== ignored filenames with pattern "{}": {}'.format(pattern, len(ignored_filenames)))
  27. for f in ignored_filenames:
  28. print(f)
  29. def print_symbols_with_pattern(db, pattern):
  30. symbols = db.get_symbols_with_pattern(pattern)
  31. print('========== symbols with pattern "{}": {}'.format(pattern, len(symbols)))
  32. for s in symbols:
  33. print(s, str(symbols[s]))
  34. def __main__():
  35. flags = parse_args()
  36. change_to_top_dir()
  37. all_files = file.get_list_of_files_in_the_repo()
  38. files_to_process = file.get_list_of_files_to_process(all_files)
  39. db = get_full_db(files_to_process)
  40. if flags.search:
  41. print_filenames_with_pattern(all_files, files_to_process, flags.search)
  42. print_symbols_with_pattern(db, flags.search)
  43. print('========== warnings:')
  44. warnings = []
  45. warnings += db.get_warnings_for_choices_selected()
  46. warnings += db.get_warnings_for_legacy_symbols_being_defined()
  47. warnings += db.get_warnings_for_legacy_symbols_being_used()
  48. warnings += db.get_warnings_for_symbols_with_legacy_note_and_no_comment_on_usage()
  49. warnings += db.get_warnings_for_symbols_with_legacy_note_and_no_usage()
  50. warnings += db.get_warnings_for_symbols_without_definition()
  51. warnings += db.get_warnings_for_symbols_without_usage()
  52. for filename, lineno, msg in sorted(warnings):
  53. print('{}:{}: {}'.format(filename, lineno, msg), file=sys.stderr)
  54. if len(warnings) > 0:
  55. sys.exit(1)
  56. if __name__ == '__main__':
  57. __main__()