#! /usr/bin/env python from __future__ import print_function from __future__ import absolute_import import argparse from zulint.command import add_default_linter_arguments, LinterConfig from custom_check import python_rules, non_py_rules from pep8 import check_pep8 EXCLUDED_FILES = [ # This is an external file that doesn't comply with our codestyle 'zulip/integrations/perforce/git_p4.py', ] def run(): # type: () -> None parser = argparse.ArgumentParser() add_default_linter_arguments(parser) args = parser.parse_args() linter_config = LinterConfig(args) by_lang = linter_config.list_files(file_types=['py', 'sh', 'json', 'md', 'txt'], exclude=EXCLUDED_FILES) linter_config.external_linter('mypy', ['tools/run-mypy'], ['py'], pass_targets=False, description="Static type checker for Python (config: mypy.ini)") @linter_config.lint def custom_py(): # type: () -> int """Runs custom checks for python files (config: tools/linter_lib/custom_check.py)""" failed = python_rules.check(by_lang, verbose=args.verbose) return 1 if failed else 0 @linter_config.lint def custom_nonpy(): # type: () -> int """Runs custom checks for non-python files (config: tools/linter_lib/custom_check.py)""" failed = False for rule in non_py_rules: failed = failed or rule.check(by_lang, verbose=args.verbose) return 1 if failed else 0 @linter_config.lint def pep8(): # type: () -> int """Standard Python style linter on 50% of files (config: tools/linter_lib/pep8.py)""" failed = check_pep8(by_lang['py']) return 1 if failed else 0 linter_config.do_lint() if __name__ == '__main__': run()