56 lines
1.6 KiB
Python
56 lines
1.6 KiB
Python
import os
|
|
import re
|
|
import subprocess
|
|
import sys
|
|
|
|
RUFF_FORMAT = [sys.executable, "-m", "ruff", "format"]
|
|
MESSAGE_REGEX = re.compile(r"^Would reformat: (.+)$")
|
|
|
|
|
|
def transform(stdout: str, is_maintainer: bool) -> str:
|
|
if not stdout:
|
|
return stdout
|
|
transformed = []
|
|
for line in stdout.splitlines():
|
|
if m := MESSAGE_REGEX.match(line):
|
|
path = m.group(1)
|
|
command = (
|
|
"`ruff format .` or comment `/autoformat`" if is_maintainer else "`ruff format .`"
|
|
)
|
|
# As a workaround for https://github.com/orgs/community/discussions/165826,
|
|
# add fake line:column numbers (1:1)
|
|
line = f"{path}:1:1: Unformatted file. Run {command} to format."
|
|
|
|
transformed.append(line)
|
|
return "\n".join(transformed) + "\n"
|
|
|
|
|
|
def main() -> None:
|
|
if "NO_FIX" in os.environ:
|
|
with subprocess.Popen(
|
|
[
|
|
*RUFF_FORMAT,
|
|
"--check",
|
|
*sys.argv[1:],
|
|
],
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE,
|
|
text=True,
|
|
) as prc:
|
|
stdout, stderr = prc.communicate()
|
|
is_maintainer = os.environ.get("IS_MAINTAINER", "false").lower() == "true"
|
|
sys.stdout.write(transform(stdout, is_maintainer))
|
|
sys.stderr.write(stderr)
|
|
sys.exit(prc.returncode)
|
|
else:
|
|
with subprocess.Popen([
|
|
*RUFF_FORMAT,
|
|
*sys.argv[1:],
|
|
]) as prc:
|
|
prc.communicate()
|
|
sys.exit(prc.returncode)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|