1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
import os
import subprocess
import sys
from argparse import ArgumentParser
CWD = os.path.abspath(os.path.dirname(__file__))
class DiffLinter:
def __init__(self) -> None:
self.repository_root = os.path.realpath(os.path.join(CWD, ".."))
def run_ruff(self, fix: bool) -> tuple[int, str]:
"""
Original Author: Josh Wilson (@person142)
Source:
https://github.com/scipy/scipy/blob/main/tools/lint_diff.py
Unlike pycodestyle, ruff by itself is not capable of limiting
its output to the given diff.
"""
command = ["ruff", "check"]
if fix:
command.append("--fix")
res = subprocess.run(
command,
stdout=subprocess.PIPE,
cwd=self.repository_root,
encoding="utf-8",
)
return res.returncode, res.stdout
def run_lint(self, fix: bool) -> None:
retcode, errors = self.run_ruff(fix)
errors and print(errors)
sys.exit(retcode)
if __name__ == "__main__":
parser = ArgumentParser()
args = parser.parse_args()
DiffLinter().run_lint(fix=False)
|