diff --git a/Meta/check-html-doctype.py b/Meta/check-html-doctype.py new file mode 100755 index 00000000000..c2790000ab8 --- /dev/null +++ b/Meta/check-html-doctype.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 + +import os +import re +import subprocess +import sys + +# FIXME: Include Layout tests in general. +# They are currently deferred to a later PR to make review easier for now. +RE_RELEVANT_FILE = re.compile('^Tests/LibWeb/(Ref|Screenshot|Text)/(.(?!wpt-import/))*\\.html$') +RE_DOCTYPE = re.compile('^', re.IGNORECASE) + + +def should_check_file(filename): + return RE_RELEVANT_FILE.match(filename) is not None + + +def find_files_here_or_argv(): + if len(sys.argv) > 1: + raw_list = sys.argv[1:] + else: + process = subprocess.run(["git", "ls-files"], check=True, capture_output=True) + raw_list = process.stdout.decode().strip('\n').split('\n') + + return filter(should_check_file, raw_list) + + +def run(): + files_with_missing_doctypes = [] + + for filename in find_files_here_or_argv(): + with open(filename, 'r') as file: + if not RE_DOCTYPE.search(file.readline()): + files_with_missing_doctypes.append(filename) + + if files_with_missing_doctypes: + print('The following HTML files should include a doctype declaration at the start of the file but don\'t:\n' + + 'You should add to the very beginning of these files, except if they absolutely need ' + + 'to run in quirks mode. In that case, you can clearly indicate so with a bogus doctype that says ' + + '"quirks" instead of "html".\n', + ' '.join(files_with_missing_doctypes)) + 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 e8e3e95adcc..19d89520049 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-html-doctype.py \ Meta/check-idl-files.py \ Meta/check-newlines-at-eof.py \ Meta/check-png-sizes.sh \