def main(): parser = argparse.ArgumentParser(description='Kconfig style checker') parser.add_argument('files', nargs='*', help='Kconfig files') parser.add_argument('--verbose', '-v', action='store_true', help='Print more information (useful for debugging)') parser.add_argument('--includes', '-d', nargs='*', help='Extra paths for recursively searching Kconfig files. (for example $IDF_PATH)', type=valid_directory) parser.add_argument('--exclude-submodules', action='store_true', help='Exclude submodules') args = parser.parse_args() success_counter = 0 failure_counter = 0 ignore_counter = 0 ignore_dirs = IGNORE_DIRS if args.exclude_submodules: ignore_dirs = ignore_dirs + tuple(get_submodule_dirs(full_path=True)) files = [os.path.abspath(file_path) for file_path in args.files] if args.includes: for directory in args.includes: for root, dirnames, filenames in os.walk(directory): for filename in filenames: full_path = os.path.join(root, filename) if re.search(RE_KCONFIG, filename): files.append(full_path) elif re.search(RE_KCONFIG, filename, re.IGNORECASE): # On Windows Kconfig files are working with different cases! print('{}: Incorrect filename. The case should be "Kconfig"!'.format(full_path)) failure_counter += 1 for full_path in files: if full_path.startswith(ignore_dirs): print('{}: Ignored'.format(full_path)) ignore_counter += 1 continue is_valid = validate_kconfig_file(full_path, args.verbose) if is_valid: success_counter += 1 else: failure_counter += 1 if ignore_counter > 0: print('{} files have been ignored.'.format(ignore_counter)) if success_counter > 0: print('{} files have been successfully checked.'.format(success_counter)) if failure_counter > 0: print('{} files have errors. Please take a look at the log.'.format(failure_counter)) return 1 if not files: print('WARNING: no files specified. Please specify files or use ' '"--includes" to search Kconfig files recursively') return 0
def main(): parser = argparse.ArgumentParser(description='Kconfig options checker') parser.add_argument('files', nargs='*', help='Kconfig files') parser.add_argument('--includes', '-d', nargs='*', help='Extra paths for recursively searching Kconfig files. (for example $IDF_PATH)', type=valid_directory) parser.add_argument('--exclude-submodules', action='store_true', help='Exclude submodules') args = parser.parse_args() success_counter = 0 failure_counter = 0 ignore_counter = 0 deprecated_options = set() ignore_dirs = IGNORE_DIRS if args.exclude_submodules: for submodule in get_submodule_dirs(full_path=True): ignore_dirs = ignore_dirs + tuple(submodule) files = [os.path.abspath(file_path) for file_path in args.files] if args.includes: for directory in args.includes: for root, dirnames, filenames in os.walk(directory): for filename in filenames: full_path = os.path.join(root, filename) if filename.startswith(FILES_TO_CHECK): files.append(full_path) elif filename == 'sdkconfig.rename': deprecated_options |= _parse_path(full_path) for full_path in files: if full_path.startswith(ignore_dirs): print('{}: Ignored'.format(full_path)) ignore_counter += 1 continue used_options = _parse_path(full_path, '=') used_deprecated_options = deprecated_options & used_options if len(used_deprecated_options) > 0: print('{}: The following options are deprecated: {}' .format(full_path, ', '.join(used_deprecated_options))) failure_counter += 1 else: print('{}: OK'.format(full_path)) success_counter += 1 if ignore_counter > 0: print('{} files have been ignored.'.format(ignore_counter)) if success_counter > 0: print('{} files have been successfully checked.'.format(success_counter)) if failure_counter > 0: print('{} files have errors. Please take a look at the log.'.format(failure_counter)) return 1 if not files: print('WARNING: no files specified. Please specify files or use ' '"--includes" to search Kconfig files recursively') return 0