mostr-zulip-bot/tools/lint

70 lines
2 KiB
Text
Raw Normal View History

#! /usr/bin/env python3
import argparse
2021-05-28 17:06:39 +08:00
import re
import sys
2021-05-28 17:00:04 +08:00
from zulint.command import LinterConfig, add_default_linter_arguments
2021-05-28 17:00:04 +08:00
from custom_check import non_py_rules, python_rules
EXCLUDED_FILES = [
# This is an external file that doesn't comply with our codestyle
"zulip/integrations/perforce/git_p4.py",
]
def run() -> 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",
[sys.executable, "tools/run-mypy"],
["py"],
pass_targets=False,
description="Static type checker for Python (config: mypy.ini)",
)
linter_config.external_linter(
"ruff", ["ruff", "check", "--quiet"], ["py"], fix_arg="--fix", description="Python linter"
)
linter_config.external_linter(
"gitlint", ["tools/lint-commits"], description="Git Lint for commit messages"
)
2021-05-28 17:06:39 +08:00
linter_config.external_linter(
"black",
["black"],
["py"],
description="Reformats Python code",
check_arg=["--check"],
suppress_line=lambda line: line == "All done! ✨ 🍰 ✨\n"
or re.fullmatch(r"\d+ files? would be left unchanged\.\n", line) is not None,
)
@linter_config.lint
def custom_py() -> 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() -> 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.do_lint()
if __name__ == "__main__":
run()