mirror of
https://github.com/SerenityOS/serenity.git
synced 2025-01-22 09:21:57 -05:00
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:
parent
8c9acd4a76
commit
7e9c2bd36f
2 changed files with 70 additions and 0 deletions
69
Meta/check-idl-files.py
Executable file
69
Meta/check-idl-files.py
Executable 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()
|
|
@ -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 \
|
||||||
|
|
Loading…
Reference in a new issue