Files
sunnypilot/scripts/lint/check_indentation.py
T
Adeeb Shihadeh 27122bbd28 lint: check indentation (#38454)
* lint: check indentation

* cleanup

* happy

* that was too much

* happy
2026-07-25 10:29:37 -07:00

39 lines
1.2 KiB
Python
Executable File

#!/usr/bin/env python3
import argparse
import tokenize
# TODO: remove this once https://github.com/astral-sh/ruff/issues/8705 is closed
def check_indentation(filename: str, indent_width: int = 2) -> bool:
failed = False
indent_stack = [0]
with tokenize.open(filename) as f:
tokens = tokenize.generate_tokens(f.readline)
for token in tokens:
if token.type == tokenize.INDENT:
indentation = token.string
width = len(indentation)
expected = indent_stack[-1] + indent_width
if indentation != " " * expected:
found = "indentation containing tabs" if "\t" in indentation else f"{width} spaces"
print(f"{filename}:{token.start[0]}:1: expected {expected} spaces, found {found}")
failed = True
indent_stack.append(width)
elif token.type == tokenize.DEDENT:
indent_stack.pop()
return failed
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Check Python block indentation.")
parser.add_argument("filenames", nargs="+")
args = parser.parse_args()
failed = False
for filename in args.filenames:
failed |= check_indentation(filename)
raise SystemExit(failed)