mirror of
https://github.com/esphome/esphome.git
synced 2024-11-23 11:56:25 +01:00
132 lines
3.2 KiB
Python
Executable File
132 lines
3.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
from helpers import (
|
|
styled,
|
|
print_error_for_file,
|
|
get_output,
|
|
get_err,
|
|
git_ls_files,
|
|
filter_changed,
|
|
)
|
|
import argparse
|
|
import colorama
|
|
import os
|
|
import re
|
|
import sys
|
|
|
|
curfile = None
|
|
|
|
|
|
def print_error(file, lineno, msg):
|
|
global curfile
|
|
|
|
if curfile != file:
|
|
print_error_for_file(file, None)
|
|
curfile = file
|
|
|
|
if lineno is not None:
|
|
print(f"{styled(colorama.Style.BRIGHT, f'{file}:{lineno}:')} {msg}")
|
|
else:
|
|
print(f"{styled(colorama.Style.BRIGHT, f'{file}:')} {msg}")
|
|
|
|
|
|
def main():
|
|
colorama.init()
|
|
|
|
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"
|
|
)
|
|
parser.add_argument(
|
|
"-a",
|
|
"--apply",
|
|
action="store_true",
|
|
help="Apply changes to files where possible",
|
|
)
|
|
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 = ["black", "--verbose"] + ([] if args.apply else ["--check"]) + files
|
|
print("Running black...")
|
|
print()
|
|
log = get_err(*cmd)
|
|
for line in log.splitlines():
|
|
WOULD_REFORMAT = "would reformat"
|
|
if line.startswith(WOULD_REFORMAT):
|
|
file_ = line[len(WOULD_REFORMAT) + 1 :]
|
|
print_error(file_, None, "Please format this file with the black formatter")
|
|
errors += 1
|
|
|
|
cmd = ["flake8"] + files
|
|
print()
|
|
print("Running flake8...")
|
|
print()
|
|
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()
|
|
print("Running pylint...")
|
|
print()
|
|
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
|
|
|
|
PYUPGRADE_TARGET = "--py39-plus"
|
|
cmd = ["pyupgrade", PYUPGRADE_TARGET] + files
|
|
print()
|
|
print("Running pyupgrade...")
|
|
print()
|
|
log = get_err(*cmd)
|
|
for line in log.splitlines():
|
|
REWRITING = "Rewriting"
|
|
if line.startswith(REWRITING):
|
|
file_ = line[len(REWRITING) + 1 :]
|
|
print_error(
|
|
file_, None, f"Please run pyupgrade {PYUPGRADE_TARGET} on this file"
|
|
)
|
|
errors += 1
|
|
|
|
sys.exit(errors)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|