summaryrefslogtreecommitdiffstats
path: root/tools/lint/cpp/mingw-capitalization.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lint/cpp/mingw-capitalization.py')
-rw-r--r--tools/lint/cpp/mingw-capitalization.py37
1 files changed, 37 insertions, 0 deletions
diff --git a/tools/lint/cpp/mingw-capitalization.py b/tools/lint/cpp/mingw-capitalization.py
new file mode 100644
index 0000000000..b5a4b07c6a
--- /dev/null
+++ b/tools/lint/cpp/mingw-capitalization.py
@@ -0,0 +1,37 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import os
+import re
+
+from mozlint.types import LineType
+
+here = os.path.abspath(os.path.dirname(__file__))
+HEADERS_FILE = os.path.join(here, "mingw-headers.txt")
+# generated by cd mingw-w64/mingw-w64-headers &&
+# find . -name "*.h" | xargs -I bob -- basename bob | sort | uniq)
+
+
+class MinGWCapitalization(LineType):
+ def __init__(self, *args, **kwargs):
+ super(MinGWCapitalization, self).__init__(*args, **kwargs)
+ with open(HEADERS_FILE, "r") as fh:
+ self.headers = fh.read().strip().splitlines()
+ self.regex = re.compile("^#include\s*<(" + "|".join(self.headers) + ")>")
+
+ def condition(self, payload, line, config):
+ if not line.startswith("#include"):
+ return False
+
+ if self.regex.search(line, re.I):
+ return not self.regex.search(line)
+
+
+def lint(paths, config, **lintargs):
+ results = []
+
+ m = MinGWCapitalization()
+ for path in paths:
+ results.extend(m._lint(path, config, **lintargs))
+ return results