fune/tools/lint/cpp/mingw-capitalization.py
Tom Ritter 069fabef4a Bug 1444167 Add a MinGW Header Capitalization lint job r=ahal
MinGW headers are all lowercase, and because we build FF with MinGW
on Linux - capitalization matters.  But if you're plugging along,
working on Windows, you might forget about that, and wind up
inadvertently breaking the MinGW build because you capitalized
an include file (as is common in Windows development.)

This lint job takes the list of header files from MinGW
(generated by cd mingw-w64/mingw-w64-headers &&
  find . -name "*.h" | xargs -I bob -- basename bob | sort | uniq)
and will alert if they are in an #include statement but not
all-lowercase.

MozReview-Commit-ID: 4QFSdHx5Uak

--HG--
extra : rebase_source : d76c258191d4cbb7665775bd1b8d79028890727f
2018-03-08 13:41:00 -06:00

36 lines
1.2 KiB
Python

# 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):
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