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.

(cherry picked from commit a7578164d4ea2aa6e7831d83e9a55b1ff39e37f7;
minorly amended to resolve conflict in lint-ci.sh due to serenity still
having check-emoji.py and check-markdown.sh)
This commit is contained in:
sideshowbarker 2024-09-10 16:10:05 +09:00 committed by Nico Weber
parent 8c9acd4a76
commit 7e9c2bd36f
2 changed files with 70 additions and 0 deletions

69
Meta/check-idl-files.py Executable file
View file

@ -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()

View file

@ -23,6 +23,7 @@ for cmd in \
Meta/check-ak-test-files.sh \ Meta/check-ak-test-files.sh \
Meta/check-debug-flags.sh \ Meta/check-debug-flags.sh \
Meta/check-emoji.py \ Meta/check-emoji.py \
Meta/check-idl-files.py \
Meta/check-markdown.sh \ Meta/check-markdown.sh \
Meta/check-newlines-at-eof.py \ Meta/check-newlines-at-eof.py \
Meta/check-png-sizes.sh \ Meta/check-png-sizes.sh \