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