Skip to content

Commit 8b30d61

Browse files
committed
#15 updated to support any YEAR in boilerplate
1 parent 414db50 commit 8b30d61

1 file changed

Lines changed: 21 additions & 6 deletions

File tree

scripts/check_boilerplate.py

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,26 @@
11
#!/usr/bin/env python3
22
import argparse
33
import os
4+
import re
45

56
def read_file(path):
67
with open(path, "r", encoding="utf-8") as f:
78
return f.readlines()
89

10+
def normalize_boilerplate(boilerplate_lines):
11+
"""Convert boilerplate lines into regex patterns (supporting {YEAR})."""
12+
patterns = []
13+
for line in boilerplate_lines:
14+
# Escape everything for literal match
15+
pattern = re.escape(line.strip())
16+
# Replace escaped placeholder with regex
17+
pattern = pattern.replace(r"\{YEAR\}", r"\d{4}")
18+
patterns.append(re.compile(f"^{pattern}$"))
19+
return patterns
20+
921
def check_boilerplate(src_dir, boilerplate_path, exts=None):
1022
boilerplate_lines = read_file(boilerplate_path)
11-
boilerplate_stripped = [line.strip() for line in boilerplate_lines]
23+
boilerplate_patterns = normalize_boilerplate(boilerplate_lines)
1224

1325
results = []
1426
for root, _, files in os.walk(src_dir):
@@ -18,12 +30,15 @@ def check_boilerplate(src_dir, boilerplate_path, exts=None):
1830
file_path = os.path.join(root, file)
1931
try:
2032
file_lines = read_file(file_path)
21-
file_head = [line.strip() for line in file_lines[:len(boilerplate_lines)]]
33+
file_head = [line.strip() for line in file_lines[:len(boilerplate_patterns)]]
34+
35+
ok = True
36+
for line, pattern in zip(file_head, boilerplate_patterns):
37+
if not pattern.match(line):
38+
ok = False
39+
break
2240

23-
if file_head == boilerplate_stripped:
24-
results.append((file_path, True))
25-
else:
26-
results.append((file_path, False))
41+
results.append((file_path, ok))
2742
except Exception as e:
2843
results.append((file_path, f"Error: {e}"))
2944
return results

0 commit comments

Comments
 (0)