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.
This commit is contained in:
Andreia Gaita 2024-07-23 11:36:59 +02:00
parent 293c0f7646
commit 09f2b9513c

View File

@ -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.") print("Invalid usage of header_guards.py, it should be called with a path to one or multiple files.")
sys.exit(1) sys.exit(1)
HEADER_CHECK_OFFSET = 30
HEADER_BEGIN_OFFSET = 31
HEADER_END_OFFSET = -1
changed = [] changed = []
invalid = [] invalid = []
for file in sys.argv[1:]: 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() lines = f.readlines()
if len(lines) <= HEADER_BEGIN_OFFSET: for idx, line in enumerate(lines):
continue # Most likely a dummy file. sline = line.strip()
if lines[HEADER_CHECK_OFFSET].startswith("#import"): if header_start < 0:
continue # Early catch obj-c file. 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. split = file.split("/") # Already in posix-format.
@ -82,6 +98,9 @@ for file in sys.argv[1:]:
objc = False objc = False
for idx, line in enumerate(lines): 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("#"): if not line.startswith("#"):
continue continue
elif line.startswith("#ifndef") and header_check == -1: elif line.startswith("#ifndef") and header_check == -1: