#!/usr/bin/env python3 from __future__ import print_function import argparse import collections import os import re import sys sys.path.append(os.path.dirname(__file__)) from helpers import get_output, git_ls_files, filter_changed curfile = None def print_error(file, lineno, msg): global curfile if curfile != file: print() print("\033[0;32m************* File \033[1;32m{}\033[0m".format(file)) curfile = file print(u'{}:{} - {}'.format(file, lineno, msg)) def main(): parser = argparse.ArgumentParser() parser.add_argument('files', nargs='*', default=[], help='files to be processed (regex on path)') parser.add_argument('-c', '--changed', action='store_true', help='Only run on changed files') args = parser.parse_args() files = [] for path in git_ls_files(): filetypes = ('.py',) ext = os.path.splitext(path)[1] if ext in filetypes and path.startswith('esphome'): path = os.path.relpath(path, os.getcwd()) files.append(path) # Match against re file_name_re = re.compile('|'.join(args.files)) files = [p for p in files if file_name_re.search(p)] if args.changed: files = filter_changed(files) files.sort() if not files: sys.exit(0) errors = 0 cmd = ['flake8'] + files print("Running flake8...") log = get_output(*cmd) for line in log.splitlines(): line = line.split(':', 4) if len(line) < 4: continue file_ = line[0] linno = line[1] msg = (':'.join(line[3:])).strip() print_error(file_, linno, msg) errors += 1 cmd = ['pylint', '-f', 'parseable', '--persistent=n'] + files print("Running pylint...") log = get_output(*cmd) for line in log.splitlines(): line = line.split(':', 3) if len(line) < 3: continue file_ = line[0] linno = line[1] msg = (':'.join(line[2:])).strip() print_error(file_, linno, msg) errors += 1 sys.exit(errors) if __name__ == '__main__': main()