From 09f2b9513c39f05adea23a091aa0149088247684 Mon Sep 17 00:00:00 2001 From: Andreia Gaita Date: Tue, 23 Jul 2024 11:36:59 +0200 Subject: [PATCH] Fix header_guards so it detects the copyright header properly. Having hardcoded offsets is a problem if the copyright header ever changes or when running on forks with different copyright header formats. --- misc/scripts/header_guards.py | 37 ++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/misc/scripts/header_guards.py b/misc/scripts/header_guards.py index b554be5159d..fed418db1ed 100755 --- a/misc/scripts/header_guards.py +++ b/misc/scripts/header_guards.py @@ -8,22 +8,38 @@ if len(sys.argv) < 2: print("Invalid usage of header_guards.py, it should be called with a path to one or multiple files.") sys.exit(1) -HEADER_CHECK_OFFSET = 30 -HEADER_BEGIN_OFFSET = 31 -HEADER_END_OFFSET = -1 - changed = [] invalid = [] for file in sys.argv[1:]: - with open(file, "rt", encoding="utf-8", newline="\n") as f: + header_start = -1 + HEADER_CHECK_OFFSET = -1 + + with open(file.strip(), "rt", encoding="utf-8", newline="\n") as f: lines = f.readlines() - if len(lines) <= HEADER_BEGIN_OFFSET: - continue # Most likely a dummy file. + for idx, line in enumerate(lines): + sline = line.strip() - if lines[HEADER_CHECK_OFFSET].startswith("#import"): - continue # Early catch obj-c file. + if header_start < 0: + if sline == "": # Skip empty lines at the top. + continue + + if sline.startswith("/**********"): # Godot header starts this way. + header_start = idx + else: + HEADER_CHECK_OFFSET = 0 # There is no Godot header. + break + else: + if not sline.startswith("*") and not sline.startswith("/*"): # Not in the Godot header anymore. + HEADER_CHECK_OFFSET = idx + 1 # The include should be two lines below the Godot header. + break + + if HEADER_CHECK_OFFSET < 0: + continue + + HEADER_BEGIN_OFFSET = HEADER_CHECK_OFFSET + 1 + HEADER_END_OFFSET = len(lines) - 1 split = file.split("/") # Already in posix-format. @@ -82,6 +98,9 @@ for file in sys.argv[1:]: objc = False for idx, line in enumerate(lines): + if line.startswith("// #import"): # Some dummy obj-c files only have commented out import lines. + objc = True + break if not line.startswith("#"): continue elif line.startswith("#ifndef") and header_check == -1: