diff options
author | Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com> | 2022-12-19 13:06:25 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-19 13:06:25 +0100 |
commit | 82dad10746fb54396fcc5caee6a6d79e7131e867 (patch) | |
tree | 455ceef792a058c10d3a84394eebd85a075b44d9 | |
parent | bb12621746004ddfb34832e13810735688ee5cfa (diff) | |
parent | 3b56d291472202f2be153d0d30ba50dbcdb4fd9d (diff) | |
download | mbedtls-82dad10746fb54396fcc5caee6a6d79e7131e867.zip mbedtls-82dad10746fb54396fcc5caee6a6d79e7131e867.tar.gz mbedtls-82dad10746fb54396fcc5caee6a6d79e7131e867.tar.bz2 |
Merge pull request #6820 from gilles-peskine-arm/code-style-skip-generated-files
Don't touch the style of generated files
-rwxr-xr-x | scripts/code_style.py | 37 | ||||
-rwxr-xr-x | tests/scripts/check-generated-files.sh | 10 |
2 files changed, 42 insertions, 5 deletions
diff --git a/scripts/code_style.py b/scripts/code_style.py index 68cd556..8e82b93 100755 --- a/scripts/code_style.py +++ b/scripts/code_style.py @@ -22,9 +22,10 @@ change of code style. import argparse import io import os +import re import subprocess import sys -from typing import List +from typing import FrozenSet, List UNCRUSTIFY_SUPPORTED_VERSION = "0.75.1" CONFIG_FILE = ".uncrustify.cfg" @@ -32,10 +33,33 @@ UNCRUSTIFY_EXE = "uncrustify" UNCRUSTIFY_ARGS = ["-c", CONFIG_FILE] STDOUT_UTF8 = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') STDERR_UTF8 = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8') +CHECK_GENERATED_FILES = "tests/scripts/check-generated-files.sh" def print_err(*args): print("Error: ", *args, file=STDERR_UTF8) +# Match FILENAME(s) in "check SCRIPT (FILENAME...)" +CHECK_CALL_RE = re.compile(r"\n\s*check\s+[^\s#$&*?;|]+([^\n#$&*?;|]+)", + re.ASCII) +def list_generated_files() -> FrozenSet[str]: + """Return the names of generated files. + + We don't reformat generated files, since the result might be different + from the output of the generator. Ideally the result of the generator + would conform to the code style, but this would be difficult, especially + with respect to the placement of line breaks in long logical lines. + """ + # Parse check-generated-files.sh to get an up-to-date list of + # generated files. Read the file rather than calling it so that + # this script only depends on Git, Python and uncrustify, and not other + # tools such as sh or grep which might not be available on Windows. + # This introduces a limitation: check-generated-files.sh must have + # the expected format and must list the files explicitly, not through + # wildcards or command substitution. + content = open(CHECK_GENERATED_FILES, encoding="utf-8").read() + checks = re.findall(CHECK_CALL_RE, content) + return frozenset(word for s in checks for word in s.split()) + def get_src_files() -> List[str]: """ Use git ls-files to get a list of the source files @@ -52,11 +76,14 @@ def get_src_files() -> List[str]: print_err("git ls-files returned: " + str(result.returncode)) return [] else: + generated_files = list_generated_files() src_files = str(result.stdout, "utf-8").split() - # Don't correct style for files in 3rdparty/ - src_files = list(filter( \ - lambda filename: not filename.startswith("3rdparty/"), \ - src_files)) + # Don't correct style for third-party files (and, for simplicity, + # companion files in the same subtree), or for automatically + # generated files (we're correcting the templates instead). + src_files = [filename for filename in src_files + if not (filename.startswith("3rdparty/") or + filename in generated_files)] return src_files def get_uncrustify_version() -> str: diff --git a/tests/scripts/check-generated-files.sh b/tests/scripts/check-generated-files.sh index 3006ec7..946794c 100755 --- a/tests/scripts/check-generated-files.sh +++ b/tests/scripts/check-generated-files.sh @@ -116,6 +116,16 @@ check() fi } +# Note: if the format of calls to the "check" function changes, update +# scripts/code_style.py accordingly. For generated C source files (*.h or *.c), +# the format must be "check SCRIPT FILENAME...". For other source files, +# any shell syntax is permitted (including e.g. command substitution). + +# Note: Instructions to generate those files are replicated in: +# - **/Makefile (to (re)build them with make) +# - **/CMakeLists.txt (to (re)build them with cmake) +# - scripts/make_generated_files.bat (to generate them under Windows) + check scripts/generate_errors.pl library/error.c check scripts/generate_query_config.pl programs/test/query_config.c check scripts/generate_driver_wrappers.py library/psa_crypto_driver_wrappers.c |