aboutsummaryrefslogtreecommitdiffhomepage
path: root/scripts
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2021-02-01 17:31:58 +1100
committerNeil <nyamatongwe@gmail.com>2021-02-01 17:31:58 +1100
commit20bdc47bf1ece6f32b104e4ecc64abd88f5bd8ab (patch)
treed8a7ed2264cc6ef3ca6ed1efbf4bbd2afed9caf6 /scripts
parent219092af51fa15d813a0374227ce9baf8d53d239 (diff)
downloadscintilla-mirror-20bdc47bf1ece6f32b104e4ecc64abd88f5bd8ab.tar.gz
Move the patterns to check and exclude to HeaderOrder.txt so one script can be
used for Scintilla, Lexilla, and SciTE. Update HeaderOrder.txt to match files moved out to Lexilla.
Diffstat (limited to 'scripts')
-rw-r--r--scripts/HeaderCheck.py64
-rw-r--r--scripts/HeaderOrder.txt53
2 files changed, 48 insertions, 69 deletions
diff --git a/scripts/HeaderCheck.py b/scripts/HeaderCheck.py
index 29dc4fba3..1349c3b20 100644
--- a/scripts/HeaderCheck.py
+++ b/scripts/HeaderCheck.py
@@ -1,23 +1,9 @@
#!/usr/bin/env python3
# Script to check that headers are in a consistent order
-# Canonical header order is defined in scripts/HeaderOrder.txt
+# Canonical header order is defined in a file, normally scripts/HeaderOrder.txt
# Requires Python 3.6 or later
-import pathlib
-
-patterns = [
- "include/*.h",
- "src/*.cxx",
- "lexlib/*.cxx",
- "lexers/*.cxx",
- "win32/*.cxx",
- "gtk/*.cxx",
- "cocoa/*.mm",
- "cocoa/*.h",
- "test/unit/*.cxx",
- "lexilla/src/*.cxx",
- "lexilla/test/*.cxx",
-]
+import pathlib, sys
def IsHeader(x):
return x.strip().startswith("#") and \
@@ -28,32 +14,41 @@ def HeaderFromIncludeLine(s):
#\s*#\s*(include|import)\s+\S+\s*
return s.strip()[1:].strip()[7:].strip()
-def ExtractHeaders(filename):
- with filename.open(encoding="cp437") as infile:
+def ExtractHeaders(file):
+ with file.open(encoding="cp437") as infile:
return [HeaderFromIncludeLine(l) for l in infile if IsHeader(l)]
-def ExcludeName(name):
- # LexCaml adds system headers in #if to be an external lexer
- # moc_ files are generated by Qt and follow its rules
- return "LexCaml" in name or "moc_" in name
+def ExtractWithPrefix(file, prefix):
+ with file.open(encoding="cp437") as infile:
+ return [l.strip()[len(prefix):] for l in infile if l.startswith(prefix)]
+
+def ExcludeName(name, excludes):
+ return any(exclude in name for exclude in excludes)
def SortLike(incs, order):
return sorted(incs, key = lambda i: order.index(i))
-def CheckFiles(root):
- # Find all the lexer source code files
+basePrefix = "//base:"
+sourcePrefix = "//source:"
+excludePrefix = "//exclude:"
+
+def CheckFiles(headerOrderTxt):
+ headerOrderFile = pathlib.Path(headerOrderTxt).resolve()
+ bases = ExtractWithPrefix(headerOrderFile, basePrefix)
+ base = bases[0] if len(bases) > 0 else ".."
+ orderDirectory = headerOrderFile.parent
+ root = (orderDirectory / base).resolve()
+
+ # Find all the source code files
+ patterns = ExtractWithPrefix(headerOrderFile, sourcePrefix)
+ excludes = ExtractWithPrefix(headerOrderFile, excludePrefix)
+
filePaths = []
for p in patterns:
filePaths += root.glob(p)
- # The Qt platform code interleaves system and Scintilla headers
- #~ filePaths += root.glob("qt/ScintillaEditBase/*.cpp")
- #~ filePaths += root.glob("qt/ScintillaEdit/*.cpp")
- #~ print(filePaths)
- scriptDirectory = root / "scripts"
- headerOrderFile = scriptDirectory / "HeaderOrder.txt"
headerOrder = ExtractHeaders(headerOrderFile)
originalOrder = headerOrder[:]
- orderedPaths = [p for p in sorted(filePaths) if not ExcludeName(str(p))]
+ orderedPaths = [p for p in sorted(filePaths) if not ExcludeName(str(p), excludes)]
allIncs = set()
for f in orderedPaths:
print(" File ", f.relative_to(root))
@@ -105,7 +100,7 @@ def CheckFiles(root):
if headerOrder != originalOrder:
newIncludes = set(headerOrder) - set(originalOrder)
- headerOrderNew = scriptDirectory / "NewOrder.txt"
+ headerOrderNew = orderDirectory / "NewOrder.txt"
print(f"{headerOrderFile}:1: changed to {headerOrderNew}")
print(f" Added {', '.join(newIncludes)}.")
with headerOrderNew.open("w") as headerOut:
@@ -117,4 +112,7 @@ def CheckFiles(root):
print("In HeaderOrder.txt but not used")
print("\n".join(unused))
-CheckFiles(pathlib.Path(__file__).resolve().parent.parent)
+if len(sys.argv) > 1:
+ CheckFiles(sys.argv[1])
+else:
+ CheckFiles("HeaderOrder.txt")
diff --git a/scripts/HeaderOrder.txt b/scripts/HeaderOrder.txt
index 1f61d5440..23aaad9f8 100644
--- a/scripts/HeaderOrder.txt
+++ b/scripts/HeaderOrder.txt
@@ -2,15 +2,26 @@
// All platform headers should be included before Scintilla headers
// and each of these groups are then divided into directory groups.
+// Base of the repository relative to this file
+
+//base:..
+
+// File patterns to check:
+//source:include/*.h
+//source:src/*.cxx
+//source:lexlib/*.cxx
+//source:lexers/*.cxx
+//source:win32/*.cxx
+//source:gtk/*.cxx
+//source:cocoa/*.mm
+//source:cocoa/*.h
+//source:test/unit/*.cxx
+//source:lexilla/src/*.cxx
+//source:lexilla/test/*.cxx
+
// C standard library
#include <stddef.h>
-#include <stdlib.h>
#include <stdint.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <ctype.h>
// C++ wrappers of C standard library
#include <cstddef>
@@ -18,7 +29,6 @@
#include <cstdint>
#include <cassert>
#include <cstring>
-#include <cctype>
#include <cstdio>
#include <cstdarg>
#include <ctime>
@@ -28,12 +38,10 @@
// C++ standard library
#include <stdexcept>
#include <new>
-#include <utility>
#include <string>
#include <string_view>
#include <vector>
#include <map>
-#include <set>
#include <forward_list>
#include <algorithm>
#include <iterator>
@@ -44,9 +52,7 @@
#include <regex>
#include <iostream>
#include <sstream>
-#include <fstream>
#include <mutex>
-#include <filesystem>
// POSIX
#include <dlfcn.h>
@@ -91,30 +97,11 @@
#include "Scintilla.h"
#include "ScintillaWidget.h"
-#include "SciLexer.h"
-
// lexlib
-#include "StringCopy.h"
-#include "PropSetSimple.h"
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "Accessor.h"
-#include "StyleContext.h"
#include "CharacterSet.h"
#include "CharacterCategory.h"
-#include "LexerModule.h"
-#include "CatalogueModules.h"
-#include "OptionSet.h"
-#include "SparseState.h"
-#include "SubStyles.h"
-#include "DefaultLexer.h"
-#include "LexerBase.h"
-#include "LexerSimple.h"
-#include "LexerNoExceptions.h"
// src
-#include "Catalogue.h"
-
#include "Position.h"
#include "IntegerRectangle.h"
#include "UniqueString.h"
@@ -152,12 +139,6 @@
#include "AutoComplete.h"
#include "ScintillaBase.h"
-#include "ExternalLexer.h"
-
-#include "Lexilla.h"
-#include "TestDocument.h"
-#include "LexillaAccess.h"
-
// Platform-specific headers
// win32