11#!/usr/bin/env python3
22import argparse
33import os
4- import re
54
65def read_file (path ):
76 with open (path , "r" , encoding = "utf-8" ) as f :
87 return f .readlines ()
98
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-
219def check_boilerplate (src_dir , boilerplate_path , exts = None ):
2210 boilerplate_lines = read_file (boilerplate_path )
23- boilerplate_patterns = normalize_boilerplate ( boilerplate_lines )
11+ boilerplate_stripped = [ line . strip () for line in boilerplate_lines ]
2412
2513 results = []
2614 for root , _ , files in os .walk (src_dir ):
@@ -30,15 +18,12 @@ def check_boilerplate(src_dir, boilerplate_path, exts=None):
3018 file_path = os .path .join (root , file )
3119 try :
3220 file_lines = read_file (file_path )
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
21+ file_head = [line .strip () for line in file_lines [:len (boilerplate_lines )]]
4022
41- results .append ((file_path , ok ))
23+ if file_head == boilerplate_stripped :
24+ results .append ((file_path , True ))
25+ else :
26+ results .append ((file_path , False ))
4227 except Exception as e :
4328 results .append ((file_path , f"Error: { e } " ))
4429 return results
0 commit comments