From b0bc9e6a95b4384d13f5c460a249c199b69567d9 Mon Sep 17 00:00:00 2001 From: Ben Sima Date: Tue, 21 Apr 2020 03:21:49 -0700 Subject: lint 'lint' and make it only run on changed files It was getting annoying how long it would take to run. --- lint | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) (limited to 'lint') diff --git a/lint b/lint index a69b424..9bdcc57 100755 --- a/lint +++ b/lint @@ -1,45 +1,55 @@ #!/usr/bin/env python +""" +all your lint are belong to us +""" import os -import glob import subprocess import sys -def run(cmd, f): - global ERRORS +def run(cmd, file): + "Exec a linter for a file." + global ERRORS # pylint: disable=global-statement args = { "ormolu": ["--mode", "check"], "hlint": [], "black": ["--quiet", "--check"], "pylint": [], } - ret = subprocess.run([cmd, *args[cmd], f], stdout=subprocess.PIPE) + # pylint: disable=subprocess-run-check + ret = subprocess.run([cmd, *args[cmd], file], stdout=subprocess.PIPE) if ret.returncode != 0: - ERRORS += 1 + ERRORS += 1 # pylint: disable=undefined-variable msg = ret.stdout.decode("utf-8").strip() - print(f"lint error: {cmd} on {f}") + print(f"lint error: {cmd} on {file}") if msg: print(msg) def find_files(bizroot, extensions): + "Return a dict of {ext: [files]} that we should lint." ret = {k: [] for k in extensions} - for root, dirs, files in os.walk(bizroot, topdown=True): - (dirs.remove(d) for d in dirs if d.startswith(("_", "."))) - for ext in extensions: - for f in files: - if f.endswith(ext): - ret[ext].append(os.path.join(root, f)) + changed = ( + subprocess.check_output(["git", "diff", "--cached", "--name-only"]) + .decode("utf-8") + .strip() + ) + for ext in extensions: + for file in changed: + if file.endswith(ext): + ret[ext].append(os.path.join(bizroot, file)) return ret if __name__ == "__main__": ERRORS = 0 - files = find_files(os.getenv("BIZ_ROOT"), [".hs", ".py"]) - for hs in files[".hs"]: + FILES = find_files(os.getenv("BIZ_ROOT"), [".hs", ".py"]) + for hs in FILES[".hs"]: run("ormolu", hs) run("hlint", hs) - for py in files[".py"]: + for py in FILES[".py"]: run("black", py) run("pylint", py) + run("black", __file__) + run("pylint", __file__) sys.exit(ERRORS) -- cgit v1.2.3