From a7578164d4ea2aa6e7831d83e9a55b1ff39e37f7 Mon Sep 17 00:00:00 2001 From: sideshowbarker Date: Tue, 10 Sep 2024 16:10:05 +0900 Subject: [PATCH] Meta: Add script for checking WebIDL files This adds a new script for linting WebIDL files, and adds it to the set of scripts Meta/lint-ci.sh runs. Initially, this script does just one thing: normalizes IDL definition lines so they start with four spaces. --- Meta/check-idl-files.py | 69 +++++++++++++++++++++++++++++++++++++++++ Meta/lint-ci.sh | 1 + 2 files changed, 70 insertions(+) create mode 100755 Meta/check-idl-files.py diff --git a/Meta/check-idl-files.py b/Meta/check-idl-files.py new file mode 100755 index 00000000000..4c320008f10 --- /dev/null +++ b/Meta/check-idl-files.py @@ -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() diff --git a/Meta/lint-ci.sh b/Meta/lint-ci.sh index 8bde2beff5f..45cd41beaa6 100755 --- a/Meta/lint-ci.sh +++ b/Meta/lint-ci.sh @@ -15,6 +15,7 @@ set +e for cmd in \ Meta/check-debug-flags.sh \ + Meta/check-idl-files.py \ Meta/check-newlines-at-eof.py \ Meta/check-png-sizes.sh \ Meta/check-style.py \