|
@@ -0,0 +1,69 @@
|
|
|
|
+#!/usr/bin/env python3
|
|
|
|
+
|
|
|
|
+import argparse
|
|
|
|
+import os
|
|
|
|
+import pathlib
|
|
|
|
+import re
|
|
|
|
+import subprocess
|
|
|
|
+import sys
|
|
|
|
+
|
|
|
|
+script_name = pathlib.Path(__file__).resolve().name
|
|
|
|
+
|
|
|
|
+lines_to_skip = re.compile(
|
|
|
|
+ r"^($| *//|\};|#import |.+ includes .+|\[[^\]]+\]"
|
|
|
|
+ r"|interface |dictionary |enum |namespace |typedef |callback )"
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+parser = argparse.ArgumentParser()
|
|
|
|
+parser.add_argument("--overwrite-inplace", action=argparse.BooleanOptionalAction)
|
|
|
|
+parser.add_argument('filenames', nargs='*')
|
|
|
|
+args = parser.parse_args()
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def find_files_here_or_argv():
|
|
|
|
+ if args.filenames:
|
|
|
|
+ raw_list = args.filenames
|
|
|
|
+ else:
|
|
|
|
+ process = subprocess.run(["git", "ls-files"], check=True, capture_output=True)
|
|
|
|
+ raw_list = process.stdout.decode().strip("\n").split("\n")
|
|
|
|
+ return filter(lambda filename: filename.endswith(".idl"), raw_list)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def run():
|
|
|
|
+ """Lint WebIDL files checked into git for four leading spaces on each line."""
|
|
|
|
+ files_without_four_leading_spaces = set()
|
|
|
|
+ did_fail = False
|
|
|
|
+ for filename in find_files_here_or_argv():
|
|
|
|
+ lines = []
|
|
|
|
+ with open(filename, "r") as f:
|
|
|
|
+ for line_number, line in enumerate(f, start=1):
|
|
|
|
+ if lines_to_skip.match(line):
|
|
|
|
+ lines.append(line)
|
|
|
|
+ continue
|
|
|
|
+ if not line.startswith(" "):
|
|
|
|
+ if args.overwrite_inplace:
|
|
|
|
+ line = " " + line.lstrip()
|
|
|
|
+ lines.append(line)
|
|
|
|
+ continue
|
|
|
|
+ did_fail = True
|
|
|
|
+ files_without_four_leading_spaces.add(filename)
|
|
|
|
+ print(
|
|
|
|
+ f"{filename}:{line_number} error: Line does not start with four spaces:{line.rstrip()}")
|
|
|
|
+ lines.append(line)
|
|
|
|
+ if args.overwrite_inplace:
|
|
|
|
+ with open(filename, "w") as f:
|
|
|
|
+ f.writelines(lines)
|
|
|
|
+
|
|
|
|
+ if files_without_four_leading_spaces:
|
|
|
|
+ print("\nWebIDL files that have lines without four leading spaces:",
|
|
|
|
+ " ".join(files_without_four_leading_spaces))
|
|
|
|
+ if not args.overwrite_inplace:
|
|
|
|
+ print(
|
|
|
|
+ f"\nTo fix the WebIDL files in place, run: ./Meta/{script_name} --overwrite-inplace")
|
|
|
|
+ if did_fail:
|
|
|
|
+ sys.exit(1)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+if __name__ == "__main__":
|
|
|
|
+ os.chdir(os.path.dirname(__file__) + "/..")
|
|
|
|
+ run()
|