diff options
| -rw-r--r-- | scripts/HeaderCheck.py | 72 | 
1 files changed, 27 insertions, 45 deletions
| diff --git a/scripts/HeaderCheck.py b/scripts/HeaderCheck.py index 18f980883..ba78ec56f 100644 --- a/scripts/HeaderCheck.py +++ b/scripts/HeaderCheck.py @@ -3,68 +3,50 @@  # Canonical header order is defined in scripts/HeaderOrder.txt  # Requires Python 3.6 or later -from __future__ import print_function -import codecs, glob, os, platform, sys, unicodedata +import codecs, glob, os -def ciCompare(a,b): -    return cmp(a.lower(), b.lower()) - -def ciKey(a): -    return a.lower() - -def SortListInsensitive(l): -    try:    # Try key function -        l.sort(key=ciKey) -    except TypeError:    # Earlier version of Python, so use comparison function -        l.sort(ciCompare) +patterns = [ +    "include/*.h", +    "src/*.cxx", +    "lexlib/*.cxx", +    "lexers/*.cxx", +    "win32/*.cxx", +    "gtk/*.cxx", +    "curses/*.cxx", +    "cocoa/*.mm", +    "cocoa/*.h", +    "test/unit/*.cxx", +]  def IsHeader(x):      return x.strip().startswith("#") and ("include" in x or "import" in x) +def HeaderFromIncludeLine(s): +    #\s*#\s*(include|import)\s+\S+\s* +    return s.strip()[1:].strip()[7:].strip() +  def ExtractHeaders(filename): -    with codecs.open(filename, "r", "UTF-8") as infile: -        includeLines = [x.strip()[1:].strip()[7:].strip() for x in infile.readlines() if \ -            IsHeader(x)] -    if '.' not in filename: -        print(filename) -        for n in includeLines: -            print(n) -        print() -    return includeLines +    with codecs.open(filename, "r", "windows-1252") as infile: +        return [HeaderFromIncludeLine(l) for l in infile if IsHeader(l)]  def CheckFiles(root):      # Find all the lexer source code files -    filePaths = glob.glob(root + "/include/*.h") -    filePaths += glob.glob(root + "/src/*.cxx") -    SortListInsensitive(filePaths) -    filePaths += glob.glob(root + "/lexlib/*.cxx") -    filePaths += glob.glob(root + "/lexers/*.cxx") -    filePaths += glob.glob(root + "/win32/*.cxx") -    filePaths += glob.glob(root + "/gtk/*.cxx") -    filePaths += glob.glob(root + "/cocoa/*.mm") -    filePaths += glob.glob(root + "/cocoa/*.h") -    filePaths += glob.glob(root + "/test/unit/*.cxx") +    filePaths = [] +    for p in patterns: +        filePaths += glob.glob(os.path.join(root, p))      # The Qt platform code interleaves system and Scintilla headers      #~ filePaths += glob.glob(root + "/qt/ScintillaEditBase/*.cpp")      #~ filePaths += glob.glob(root + "/qt/ScintillaEdit/*.cpp") -    filePaths += glob.glob(root + "/curses/*.cxx")      #~ print(filePaths) -    masterHeaderList = ExtractHeaders(root + "/scripts/HeaderOrder.txt") -    for f in filePaths: -        if "LexCaml" in f: +    masterHeaderList = ExtractHeaders(os.path.join(root, "scripts/HeaderOrder.txt")) +    orderedPaths = sorted(filePaths, key=str.casefold) +    for f in orderedPaths: +        if "LexCaml" in f: # LexCaml adds system headers in #if to be an external lexer              continue          print("   File ", f) -        try: -            incs = ExtractHeaders(f) -        except UnicodeDecodeError: -            #~ print("UnicodeDecodeError\n") -            continue +        incs = ExtractHeaders(f)          #~ print("\n".join(incs))          news = set(incs) - set(masterHeaderList) -        #~ print("") -        #~ print("\n".join(incs)) -        #~ print("") -        ended = False          m = 0          i = 0          while i < len(incs): | 
