#! /usr/bin/env python from pep8 import check_pep8 from custom_check import build_custom_checkers from server_lib import lister import sys import optparse from typing import cast, Callable, Dict, Iterator, List EXCLUDED_FILES = [ # This is an external file that doesn't comply with our codestyle 'zulip/integrations/perforce/git_p4.py', ] def lint_all(args, options): by_lang = cast(Dict[str, List[str]], lister.list_files(args, modified_only=options.modified, ftypes=['py', 'sh', 'js', 'pp', 'css', 'handlebars', 'html', 'json', 'md', 'txt', 'text', 'yaml'], use_shebang=True, group_by_ftype=True, exclude=EXCLUDED_FILES)) check_custom_checks_py, check_custom_checks_nonpy = build_custom_checkers(by_lang) return all([check_pep8(by_lang['py']), check_custom_checks_py(), check_custom_checks_nonpy()]) def run(): # type: () -> None parser = optparse.OptionParser() parser.add_option('--modified', '-m', action='store_true', help='Only check modified files') (options, args) = parser.parse_args() failed = lint_all(args, options) sys.exit(1 if failed else 0) if __name__ == '__main__': run()